MyISAM para leituras de dados

10

Eu tenho uma tabela com cerca de 1 bilhão de linhas e 98% de leitura intensiva.

Eu tentei ajustar o banco de dados, com diferentes mecanismos de armazenamento (MyISAM e InnoDB)

Em seguida, fizemos alguns testes para ver o desempenho

Na cláusula where, eu tinha um ID de chave primária, e parece que, como os armazenamentos MyISAM Key Cache carregam todo o índice em seu buffer, o uso do MyISAM parece ser bem rápido, cerca de 2 vezes mais rápido que o InnoDB

Mas para o InnoDB, parece mais lento !! É que o InnoDB não usa nenhum buffer para pré-carregar os índices?

    
por Akash 13.08.2012 / 08:45

5 respostas

6

Antes de decidir sobre MyISAM ou InnoDB, você terá que examinar os dois Storage Engines em termos de como cada um armazena em cache

MyISAM

Quando lidos, os índices de uma tabela MyISAM podem ser lidos uma vez a partir do arquivo .MYI e carregados no MyISAM Key Cache (conforme dimensionado por key_buffer_size ). Como você pode tornar a tabela MyISAM mais fácil de ler? Com isso:

ALTER TABLE mytable ROW_FORMAT=Fixed;

Eu escrevi sobre isso em minhas postagens anteriores

  • Sep 20, 2011 : link (leia este primeiro primeiro)
  • May 10, 2011 : link (TRADEOFF # 2)
  • Aug 12, 2011 : link (Parágrafo 3)
  • Jan 03, 2012 : link (Sob o cabeçalho Replicação )

InnoDB

OK, e o InnoDB? O InnoDB faz alguma E / S de disco para consultas? Surpreendentemente, sim, faz !! Você provavelmente está pensando que sou louco por dizer isso, mas é absolutamente verdade, mesmo para consultas SELECT . Neste ponto, você provavelmente está se perguntando "Como no mundo está o InnoDB fazendo E / S de disco para consultas?"

Tudo volta ao InnoDB sendo um ACID - Mecanismo de armazenamento transacional de reclamação. Para que o InnoDB seja Transacional, ele deve suportar o I em ACID , que é Isolamento. A técnica para manter o isolamento para transações é feita através do MVCC, Controle de Concorrência Multiversão . Em termos simples, o InnoDB registra como os dados se parecem antes que as transações tentem alterá-los. Onde isso é gravado? No arquivo de espaço de tabela do sistema, melhor conhecido como ibdata1. Isso requer E / S de disco .

COMPARAÇÃO

Já que o InnoDB e o MyISAM fazem E / S de disco, quais fatores aleatórios determinam quem é mais rápido?

  • Tamanho das colunas
  • Formato da coluna
  • Conjuntos de caracteres
  • Intervalo de valores numéricos (exigindo INTs grandes o suficiente)
  • Linhas divididas entre blocos (encadeamento de linhas)
  • Fragmentação de dados causada por DELETEs e UPDATEs
  • Tamanho da chave primária (o InnoDB possui um índice clusterizado, exigindo duas pesquisas importantes)
  • Tamanho das entradas do índice
  • a lista continua ...

EPÍLOGO

Assim, em um ambiente de leitura pesada, é possível que uma tabela MyISAM com um Formato de Linha Fixo supere as leituras InnoDB do InnoDB Buffer Pool se houver dados suficientes sendo gravados nos logs de undo contidos em ibdata1 para suportar o comportamento transacional imposto aos dados do InnoDB. Planeje seus tipos de dados, consultas e mecanismo de armazenamento com cuidado. Uma vez que os dados aumentam, pode se tornar muito difícil mover os dados.

A propósito, escrevi algo assim cinco dias atrás: Como atribuo um limite de memória para mySQL?

    
por 13.08.2012 / 18:26
3

O MyISAM sempre rodará muito mais rápido que o innodb quando não houver contenção para os dados. Comece a adicionar 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 dois motores é muito diferente.

A razão pela qual existem diferentes mecanismos é porque existem diferentes cargas de trabalho / padrões de acesso.

    
por 13.08.2012 / 14:48
2

você tem que 'aquecer' innodb. por exemplo, reproduzindo logs de acesso ou executando algumas consultas inteligentes que tocarão em cada valor do índice.

dê uma olhada aqui ou aqui .

Espero que você não use as configurações padrão do mysql para innodb - elas eram adequadas para hardware de ~ 2000.

    
por 13.08.2012 / 09:59
1

Confira este site, ele tem informações muito úteis:

link

link

Você também pode ajustar seu sistema de arquivos. Tenho bons resultados de desempenho no XFS com ótimos valores sunit e swidth (claro, se você usar RAID)

    
por 13.08.2012 / 18:56
0

Depois de ajustar ainda mais o InnoDB no MariaDB, eu aumentei o innodb_buffer_pool_size para o tamanho do meu banco de dados InnoDB, pois, fazendo isso, o InnoDB começou a buscar linhas mais rapidamente

Suponho que o ajuste do InnoDB seja bastante importante de acordo com as necessidades do seu banco de dados

    
por 13.08.2012 / 16:24