Dicas de Ajuste de Desempenho
Se o aplicativo top do Unix ou o Gerenciado de Tarefas do Windows mostrar que percentual de uso da CPU com sua carga de trabalho é menor que 70%, provavelmente sua carga de trabalho está no limite do disco. Talvez você esteja fazendo muitos commits de transações ou a área de buffer é muito pequena. Tornar o buffer maior pode lhe ajudar, mas não o configure com mais de 80% da memória física.
- Envolva diversas modificações em uma transação. O
InnoDBdeve descarregar o log em disco a cada commit da transação se esta transação fizer modificações no banco de dados. Uma vez que o velocidade de rotação do disco é normalmente 167 revoluções/segundo, o número de commits fica limitado aos mesmos 167/segundo se o disco não enganar o sistema operacional. - Se você puder ter perda dos últimos commits feitos em transações, você pode configurar o parâmetro
innodb_flush_log_at_trx_commitno arquivomy.cnfcom 0. OInnoDBtenta descarregar o log uma vez por segundo de qualquer forma, embora a descarga não seja garantida. - Torne os seus arquivos de log maiores, tão grande quanto a área de buffer. Quando o
InnoDBescrever o arquivo de log totalmente, ele terá que escrever o conteúdo modificado da área de buffer no disco em um ponto de verificação. Arquivos de log menores causarão muitos escrita desnecessárias em disco. O ponto negativo em arquivos grandes é que o tempo de recuperação será maior. - O buffer de log também deve ser grande, cerca de 8 MB.
- (Relevante para versão 3.23.39 e acima.) Em algumas versões do Linux e Unix, descarregar arquivos em disco com o comando
fdatasyncdo Unix e outros métodos parecido é surpreendentemente lento. O método padrão que oInnoDButiliza é a funçãofdatasync. Se você não estiver satisfeito com o desempenho da escrita do banco de dados, você pode tentar configurarinnodb_flush_methodemmy.cnfcomO_DSYNC, emboraO_DSYNCpareça ser mais lento em alguns sistemas. - Ao importar dados para o
InnoDB, esteja certo de que o MariaDB não está comautocommit=1ligado. Assim cada inserção exige uma descarga de log em disco. Coloque antes da linha de importação de arquivo do SQLSET AUTOCOMMIT=0;
e depois dele
COMMIT;
Se você utilizar a opção
mysqldump--opt, você obterá arquivos dump que são mais rápidos de importar também em uma tabelaInnoDB, mesmo sem colocá-los entreSET AUTOCOMMIT=0; ... COMMIT;. - Tome ciência dos grandes rollbacks de inserções em massa: o
InnoDButiliza o buffer de inserção para economizar E/S de disco em inserções, mas em um rollback correspondente tal mecanismo não é usado. Um rollback no limite de disco pode demorar cerca de 30 vezes mais que a insserção correspondente. Matar o processa de banco de dados não irá ajudar pois o rollback irá reiniciar ao se entrar no banco de dados. O único modo de se livrar de um rollback deste tipo é aumentar a área de buffer de forma que o rollback dependa do limite de CPU e seja executado rápidamente ou deltar todo o banco de dadosInnoDB. - Tome ciência também de outras grandeas operações com limite de disco. Use
DROP TABLEouTRUNCATE(a partiir do MariaDB-4.0) para esvaziar uma tabela, nãoDELETE FROM suatabela. - Utilize
INSERTmulti-line para reduzir a sobrecarga de comunicação entre o cliente e o servidro se você precisar inserir muitas linhas:INSERT INTO suatabela VALUES (1, 2), (5, 5);
Esta dica é válida para inserções em qualquer tipo de tabela, não apenas no
InnoDB.