AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 57393
Accepted
Van
Van
Asked: 2014-01-24 09:07:00 +0800 CST2014-01-24 09:07:00 +0800 CST 2014-01-24 09:07:00 +0800 CST

Por que MySQL + Windows Server = tabelas travadas periodicamente?

  • 772

Windows Server 2008 R2 x64
Servidor MySQL 5.6.14 x64

Alguém mais está tendo um problema em que algumas tabelas são marcadas como travadas em um servidor Microsoft Windows? Temos alguns servidores Windows (não por opção) e meia dúzia de servidores Linux rodando MySQL. Por alguma razão, as tabelas nos servidores Windows são marcadas como "travadas" de vez em quando. Nunca tivemos esses problemas em nossos servidores Linux (Ubuntu).

2014-01-23 10:11:42 1868 [ERROR] MySQL: Table '.\elite_prod\ffcont' is marked as crashed and should be repaired
2014-01-23 10:11:42 1868 [ERROR] MySQL: Table '.\elite_prod\bldr' is marked as crashed and should be repaired
2014-01-23 10:11:43 1868 [ERROR] MySQL: Table '.\elite_prod\frtfwd' is marked as crashed and should be repaired
2014-01-23 10:11:44 1868 [ERROR] MySQL: Table '.\elite_prod\histry' is marked as crashed and should be repaired

Parece que temos que lidar com esse problema a cada duas semanas. Muito frustrante.

mysql windows
  • 2 2 respostas
  • 753 Views

2 respostas

  • Voted
  1. Best Answer
    RolandoMySQLDBA
    2014-01-24T09:51:32+08:002014-01-24T09:51:32+08:00

    Pela mensagem de erro, posso dizer rapidamente o seguinte:

    • O banco de dados é elite_prod
    • ffcount, bldr, frtfwd, e histrysão todas tabelas MyISAM

    Porque você está usando o MyISAM Storage Engine , você tem duas desvantagens principais :

    HANDICAP #1

    As alterações no MyISAM são armazenadas em cache de maneira diferente (independentemente do sistema operacional)

    • As páginas de índice para tabelas MyISAM são armazenadas em cache no MyISAM Key Buffer (dimensionado por key_buffer_size )
    • As alterações de índice são liberadas .MYIpelo MyISAM Storage Engine
    • Os dados nunca são armazenados em cache, pois não há buffer centrado no mecanismo para dados
    • As alterações de dados são liberadas .MYDpelo sistema operacional (OUCH !!!!)
    • Eu discuti isso antes
      • Quais são as principais diferenças entre InnoDB e MyISAM?
      • Poucas consultas de inserção foram revertidas devido a falha do sistema
      • Meu banco de dados continua travando na inicialização, como posso repará-lo sem que ele seja executado?

    HANDICAP #2

    O Microsoft Windows é péssimo em armazenar alterações de disco em cache. Mesmo rodando FLUSH TABLES;no MySQL em um ambiente Windows não é uma panaceia. IMHO, qualquer pessoa que use PostgreSQL ou Oracle deve poder expressar essa mesma reclamação sobre o Windows. Vou deixar para os gurus do SQL Server responder como eles encontram o cache do Windows em termos de SQL Server.

    ANÁLISE

    MyISAM mantém uma contagem de identificadores de arquivos abertos nas tabelas.

    Se o processo mysqld ou o Windows Server travar, todo MyISAM que tinha manipuladores de arquivos abertos manterá a contagem de manipuladores de arquivos abertos internamente.

    Quando você acessa uma tabela MyISAM pela primeira vez desde que o mysqld foi iniciado, ela deve ter um identificador de arquivo zero. Caso contrário, você receberá essa mensagem de erro marked as crashed and should be repaired. Isso explica as tabelas que aparecem periodicamente como travadas.

    Veja minha postagem A tabela MyISAM continua travando. Quais são minhas opções?

    SUGESTÕES

    Você pode mudar essas tabelas para o InnoDB e deixar o InnoDB Buffer armazenar tudo em cache, ou pelo menos um cache melhor. Eu ainda me preocuparia com o Windows a esse respeito porque a opção innodb_flush_method está desabilitada na versão Windows do MySQL. Eu digo desativado porque a documentação do MySQL diz:

    Controla as chamadas do sistema usadas para liberar dados para os arquivos de dados e arquivos de log do InnoDB, que podem influenciar a taxa de transferência de E/S. Esta variável é relevante apenas para sistemas Unix e Linux. Em sistemas Windows, o método flush é sempre async_unbuffered e não pode ser alterado.

    Se você quiser deixar as tabelas como MyISAM, volte para o Ubuntu porque é um pouco mais diligente quando se trata de liberar alterações de disco, especialmente quando tem RAM suficiente. Mesmo um terabyte de RAM não fará nada pelas tabelas MyISAM no Windows.

    • 2
  2. Up_One
    2014-01-24T09:23:20+08:002014-01-24T09:23:20+08:00

    por que você não os conserta

    REPAIR [NO_WRITE_TO_BINLOG | LOCAL] TABLE
        tbl_name [, tbl_name] ...
        [QUICK] [EXTENDED] [USE_FRM]
    

    E depois, se o erro continuar, solucione o problema!

    • Certifique-se de que nada esteja "tocando" o diretório de dados externamente, como verificadores de vírus
    • Desligue o MySQL corretamente
    • Use a opção --myisam-recover para verificar/reparar automaticamente suas tabelas caso o desligamento não tenha sido feito corretamente
    • Ou você pode converter todas as tabelas myisam para InnoDB (já que o InnoDB tem menos chance de corrupção)
    • -1

relate perguntas

  • Existem ferramentas de benchmarking do MySQL? [fechado]

  • Onde posso encontrar o log lento do mysql?

  • Como posso otimizar um mysqldump de um banco de dados grande?

  • Quando é o momento certo para usar o MariaDB em vez do MySQL e por quê?

  • Como um grupo pode rastrear alterações no esquema do banco de dados?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve