Essa pergunta provavelmente também pode ser feita no StackOverflow, mas tentarei aqui primeiro ...
O desempenho das instruções INSERT e UPDATE em nosso banco de dados parece estar degradando e causando desempenho ruim em nosso aplicativo da web.
As tabelas são o InnoDB e o aplicativo usa transações. Existem ajustes fáceis que posso fazer para acelerar as coisas?
Acho que podemos estar vendo alguns problemas de bloqueio, como posso descobrir?
mysql
performance
innodb
mmattax
fonte
fonte
Respostas:
Verifique se o seu hardware e sistema operacional estão configurados e ajustados adequadamente:
Verifique se a sua instância do MySQL / InnoDB está ajustada corretamente:
Load data infile
O comando é muito mais rápido para séries de inserções.select count(*) from table;
é muito mais lento para o innodb do que para o myisam.Alguns links úteis:
fonte
Com a configuração padrão do innoDB, você ficará limitado à rapidez com que pode gravar e liberar transações no disco. Se você pode perder um pouco de ACID, experimente innodb_flush_log_at_trx_commit. Defina como 0 para gravar e liberar o log para o disco a cada segundo. Defina como 1 (padrão) para gravar e liberar cada confirmação. Defina como 2 para gravar no arquivo de log após cada confirmação, mas liberar apenas uma vez por segundo.
Se você pode lidar com a perda de 1s de transações, essa pode ser uma ótima maneira de melhorar muito o desempenho da gravação.
Além disso, preste atenção ao que seus discos estão fazendo. RAID 10> RAID 5 para gravações ao custo de um disco extra.
fonte
Os problemas de bloqueio serão examinados pelos status da conexão em
show full processlist;
Leia a
my.cnf
documentação e o MySQL. As opções de configuração estão muito bem documentadas.De um modo geral, você deseja que o máximo seja processado na memória possível. Para otimização de consultas, isso significa evitar tabelas temporárias. Aplicação adequada de índices.
O ajuste será específico para o mecanismo de banco de dados e a arquitetura de aplicativos preferidos. Existem recursos substanciais preexistentes a uma pesquisa na Internet.
fonte
A ativação dos monitores Innodb pode ajudar a identificar as causas de bloqueios e deadlocks:
MOSTRE O ESTADO DO INNODB DO MOTOR e os monitores do InnoDB
fonte
O InnoDB é um mecanismo muito bom. No entanto, depende muito de ser "sintonizado". Uma coisa é que, se suas inserções não estiverem na ordem de aumento de chaves primárias, o innoDB poderá demorar um pouco mais que o MyISAM. Isso pode ser superado facilmente, definindo um tamanho innodb_buffer_pool_size maior. Minha sugestão é configurá-lo em 60-70% da sua RAM total. Estou executando 4 desses servidores em produção agora, inserindo cerca de 3,5 milhões de linhas por minuto. Eles já têm cerca de 3 Terabytes. InnoDB tinha que ser, por causa das inserções altamente simultâneas. Existem outras maneiras de acelerar as pastilhas. E eu avaliei alguns.
fonte