Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Trabalhando com MyISAM no MySQL

MyISAM é um dos mecanismos de armazenamento mais populares no MySQL. MyISAM frequentemente é a segunda escolha depois do InnoDB - neste post vamos tentar descobrir a melhor forma de trabalhar com este motor.

O que é MyISAM?

MyISAM é um dos mecanismos de armazenamento do MySQL. O MyISAM é baseado no ISAM (Indexed Sequential Access Method), um algoritmo de indexação desenvolvido pela IBM que permite recuperar informações de grandes conjuntos de dados de forma rápida. No entanto, ele não se sai muito bem ao ler e gravar simultaneamente em uma tabela, devido ao bloqueio de tabela. Também não suporta transações.

Para alguns engenheiros do MySQL, este mecanismo é a escolha mais popular depois do InnoDB:o mecanismo de armazenamento MyISAM foi o único mecanismo de armazenamento fornecido pelo MySQL em 2005 e esteve disponível para uso por mais de 20 anos. MyISAM era o mecanismo de armazenamento padrão para MySQL até a versão 5.5.

MyISAM por dentro

Uma ilustração de como o MyISAM funciona por dentro não está no escopo deste blog, mas podemos fornecer as configurações que ajudam a otimizar o desempenho do mecanismo:

  • Myisam_sort_buffer_size define o buffer que é alocado quando o índice é classificado executando consultas REPAIR, CREATE INDEX ou ALTER TABLE.
  • Key_buffer_size define o tamanho do buffer usado para blocos de índice nas tabelas MyISAM. Aumentar esse parâmetro pode levar a um melhor manuseio do índice.
  • Sort_buffer_size descreve o tamanho de um buffer que é alocado para encadeamentos que precisam realizar operações de classificação.
  • Read_buffer_size descreve o tamanho de um buffer que é alocado para encadeamentos que realizam operações de varredura sequencial.
  • Write_buffer_size descreve o tamanho do buffer de gravação.

Esses quatro parâmetros são importantes, mas embora sejam importantes, você também deve ficar de olho na variável key_buffer_size. A variável key_buffer_size determina o tamanho dos buffers de índice mantidos na memória - pense nela como a contraparte innodb_buffer_pool_size, mas para MyISAM. Se seus servidores consistem principalmente em tabelas MyISAM, você pode alocar cerca de 25% ou mais da RAM disponível no servidor para a variável key_buffer_size. Há também outra maneira de determinar qual deve ser o valor do parâmetro key_buffer_size - basta comparar o valor de key_read_requests (valor total de solicitações para ler um índice) e o valor de key_reads (o valor de key_reads é o número de solicitações que tiveram que ser ler do disco). Os valores para esses parâmetros podem ser recuperados observando as variáveis ​​de status do servidor (simplesmente emita uma consulta SHOW GLOBAL STATUS em seu servidor MySQL). Também é benéfico ter em mente que se key_reads retornar um valor grande, o valor de key_buffer_size provavelmente será muito pequeno.

MyISAM e MySQL 8.0

Se você perguntar a alguns engenheiros do MySQL, eles dirão que o MyISAM não deve mais ser usado. Por quê? Bem, algumas pessoas dizem isso devido ao fato de que, quando o MySQL avançou, eles adicionaram a maioria dos recursos que anteriormente só podiam ser vistos no MyISAM no InnoDB, tornando o MyISAM obsoleto:

  • Os índices de texto completo estão disponíveis no InnoDB desde a versão 5.6.
  • Os tablespaces portáteis ficaram disponíveis no InnoDB desde a versão 5.6.
  • Os índices espaciais ficaram disponíveis no InnoDB desde a versão 5.7.
  • A última atualização da tabela ficou disponível no InnoDB desde a versão 5.7.

Então, você ainda deve usar o MyISAM? Provavelmente não. Há uma ressalva - lembre-se de que consultas COUNT(*) simples provavelmente serão executadas mais rapidamente no MyISAM do que no InnoDB - MyISAM armazena o número nos metadados da tabela, o InnoDB não.

Estou usando o MyISAM e quero mudar para o InnoDB, o que faço?

Se você ainda usa MyISAM e quer mudar para InnoDB, simplesmente converta todas as suas tabelas para InnoDB. Obviamente, é mais fácil falar do que fazer, mas aqui está um guia simples:

  1. Descubra quais tabelas em sua instância MySQL estão usando MyISAM:
    SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = ‘database_name’ AND ENGINE = ‘MyISAM’;
  2. Converta todas as suas tabelas MyISAM para InnoDB:
    ALTER TABLE `table_name` ENGINE = InnoDB;

Se você não quiser executar várias instruções ALTER TABLE uma após a outra, considere colocar as instruções ALTER TABLE em um loop. É isso - você está feito!

Resumo


MyISAM é um dos motores MySQL mais populares. O mecanismo era o padrão para versões do MySQL até 5.5. O mecanismo é uma das escolhas mais populares depois do InnoDB, mas pode ser chamado de obsoleto a partir do MySQL 8.0 - o MySQL já garantiu que tudo o que pode ser feito com o MyISAM também pode ser feito quando o InnoDB está em uso, então neste momento MyISAM só é útil se você quiser que consultas simples COUNT(*) sejam mais rápidas. Essas consultas serão mais rápidas porque o MyISAM armazena o número nos metadados da tabela - outros mecanismos MySQL não.