Eu tenho uma tabela com cerca de 1 bilhão de linhas e seus 98% de leitura intensiva.
Tentei ajustar o banco de dados, com diferentes mecanismos de armazenamento (MyISAM e InnoDB)
Em seguida, executou alguns testes para visualizar o desempenho
Na cláusula where, eu tinha um ID de chave primária e parecia que, como o MyISAM Key Cache armazena todo o índice em seu buffer, o uso do MyISAM parecia ser bastante rápido, cerca de 2 vezes mais rápido que o InnoDB
Mas para o InnoDB, parecia mais lento !! O InnoDB não usa nenhum buffer para pré-carregar os índices?
Respostas:
Antes de decidir sobre o MyISAM ou o InnoDB, você terá que examinar os dois mecanismos de armazenamento em termos de como cada um armazena em cache
MyISAM
Quando lidos, os índices de uma tabela MyISAM podem ser lidos uma vez no arquivo .MYI e carregados no cache de chaves MyISAM (conforme o tamanho de key_buffer_size ). Como você pode ler o arquivo .MYD de uma tabela MyISAM mais rápido? Com isso:
Eu escrevi sobre isso em meus posts anteriores
Sep 20, 2011
: /dba/5974/best-of-myisam-and-innodb/6008#6008 (leia este primeiro)May 10, 2011
: /dba/2640/what-is-the-performance-impact-of-using-char-vs-varchar-on-a-fixed-size-field/2643#2643 (TRADEOFF # 2)Aug 12, 2011
: /dba/4576/which-dbms-is-good-for-super-fast-reads-and-a-simple-data-structure/4589#4589 (parágrafo 3)Jan 03, 2012
: /dba/10069/optimized-my-cnf-for-high-end-and-busy-server/10080#10080 (sob o título Replicação )InnoDB
OK, e o InnoDB? O InnoDB faz E / S de disco para consultas? Surpreendentemente, sim! Você provavelmente está pensando que eu sou louco por dizer isso, mas é absolutamente verdade, mesmo para consultas SELECT . Neste ponto, você provavelmente está se perguntando "Como o InnoDB está fazendo a E / S de disco para consultas?"
Tudo remonta ao InnoDB como um mecanismo de armazenamento transacional compatível com ACID . Para que o InnoDB seja Transacional, ele precisa suportar o
I
inACID
, que é Isolation. A técnica para manter o isolamento para transações é feita via MVCC, Multiversion Concurrency Control . Em termos simples, o InnoDB registra a aparência dos dados antes que as transações tentem alterá-los. Onde isso é gravado? No arquivo de espaço de tabela do sistema, mais conhecido como ibdata1. Isso requer E / S de disco .COMPARAÇÃO
Como o InnoDB e o MyISAM realizam E / S de disco, que fatores aleatórios determinam quem é mais rápido?
DELETEs
eUPDATEs
EPÍLOGO
Assim, em um ambiente de leitura pesada, é possível que uma tabela MyISAM com um formato de linha fixa supere as leituras do InnoDB do InnoDB Buffer Pool se houver dados suficientes sendo gravados nos logs de desfazer contidos no ibdata1 para suportar o comportamento transacional imposta aos dados do InnoDB. Planeje seus tipos de dados, consultas e mecanismo de armazenamento com muito cuidado. Depois que os dados crescem, pode ser muito difícil mover os dados.
A propósito, escrevi algo parecido com isso há 5 dias: Como atribuir um limite de memória para o mySQL?
fonte
O MyISAM sempre rodará muito mais rápido que o innodb quando não houver contenção para os dados. Comece adicionando várias sessões tentando atualizar a mesma tabela e o innodb obtém rapidamente a vantagem de desempenho.
Como você ajusta o sistema para os 2 motores é muito diferente.
A razão pela qual diferentes mecanismos existem é porque existem diferentes cargas de trabalho / padrões de acesso.
fonte
você precisa 'aquecer' o innodb. por exemplo, reproduzindo os logs de acesso ou executando algumas consultas inteligentes que afetam cada valor do índice.
dê uma olhada aqui ou aqui .
Espero que você não use as configurações padrão do mysql para o innodb - elas foram adequadas para o hardware a partir de ~ 2000.
fonte
Confira este site, tem informações muito úteis:
http://www.mysqlperformanceblog.com/2007/11/01/innodb-performance-optimization-basics/
http://www.mysqlperformanceblog.com/2007/11/03/choosing-innodb_buffer_pool_size/
Você também pode ajustar seu sistema de arquivos. Tenho bons resultados de desempenho no XFS com valores ideais de sunit e swidth (é claro se você usa RAID)
fonte
Depois de ajustar o InnoDB no MariaDB, aumentei o
innodb_buffer_pool_size
tamanho do meu banco de dados InnoDB, pois, ao fazer isso, o InnoDB começou a buscar linhas mais rapidamenteSuponho que ajustar o InnoDB seja muito importante de acordo com as necessidades do seu banco de dados
fonte