Desempenho MYSQL
Uma grande quantidade de operações de insert, update ou delete podem fazer com que a tabela fique fragmentada, podendo causar alto uso de espaço TMP, I/O de disco e processamento, gerando lentidão e podendo causar uma sobrecarga, podendo ser necessária uma manutenção em sua base de dados, neste artigo daremos algumas dicas, acompanhe logo a baixo:
Optimize Table
O comando ‘optimize table’, é responsável por reorganizar o armazenamento físico dos dados de índices associados a tabela, para reduzir espaço de armazenamento e melhorar a eficiência de I/O quando a tabela é acessada. As mudanças exatas feitas em cada tabela dependem do tipo de storage engine utilizado pela tabela.
Se a tabela tem linhas deletadas ou divididas, repara a tabela. |
Se as páginas de índice não estão organizadas, as organiza. |
Se as estatísticas da tabela não estão atualizadas (e a reparação não pode ser completada organizando o índice), as atualiza. |
Para tabelas InnoDB, o OPTIMIZE TABLE é ligado ao ALTER TABLE, que recria a tabela para atualizar as estatísticas do índice e liberar espaço não utilizado no índice clusterizado.
Verificando se suas tabelas estão fragmentadas
Acesse sua base de dados execute o seguinte comando para verificar se sua base esta fragmentada:
SELECT TABLE_SCHEMA, TABLE_NAME, TABLE_ROWS, DATA_LENGTH, INDEX_LENGTH, DATA_FREE, (DATA_FREE*100/DATA_LENGTH) as PRC FROM INFORMATION_SCHEMA.TABLES WHERE (DATA_FREE*100/DATA_LENGTH); |
O comando acima mostra no campo PRC o percentual de fragmentação levando em consideração o ‘DATA_LENGTH’ e o ‘DATA_FREE’, teoricamente quanto maior o datafree mais fragmentada está a tabela, porém este comando mostra também as tabelas InnoDB, onde o ‘datafree’ pode ter um valor maior e fixo, isto não indica fragmentação.
Para verificar as engines das tabelas e também poder visualizar o ‘DATA_FREE’ você pode rodar o seguinte comando:
SHOW TABLE STATUS; |
Qualquer valor no campo ‘DATA_FREE’ das tabelas MyIsam é indício de fragmentação.
Desfragmentado as tabelas MyIsam, execute o seguinte comando:
optimize table NOMEDATABELA; |
Para reindexar as tabelas InnoDB:
ALTER TABLE `NOMEDATABELA` ENGINE=InnoDB; |
Para otimizar todas as tabelas você pode rodar o seguinte comando SSH: (a opção auto-repair faz com que dados corrompidos sejam descartados, caso queira pode omitir ‘–auto-repair’ do comando)
mysqlcheck -h hostname -u nomedabase -psenhadabase nomedabase –optimize –auto-repair; |