Vendo esta nota no mysqld.log:
[Note] InnoDB: page_cleaner: 1000ms intended loop took 15888ms. The settings might not be optimal. (flushed=200 and evicted=0, during the time.)
Parece haver menção a algo assim aqui: instância do MySQL parando "fazendo o índice SYNC"
Minha pergunta é: qual ação deve ser tomada, se houver, quando esta nota for vista nos logs?
Versões do MySQL e do SO:
mysql-community-server- 5.7.9 -1.el7.x86_64
centos-release-7-1.1503.el7.centos.2.8.x86_64
Executando SHOW VARIABLES LIKE 'innodb%'; como sugerido mostra:
innodb_page_cleaners | 1
Verifique innodb_buffer_pool_instances com:
Você só pode definir
innodb_page_cleaners
tão alto quantoinnodb_buffer_pool_instances
. Se você quiserinnodb_page_cleaners=4
, então você também precisainnodb_buffer_pool_instances=4
.Enfrentamos o mesmo problema em vários clientes e descobrimos que o problema era devido à configuração do valor de innodb_lru_scan_depth do padrão de 1024 para tão baixo quanto 128. Embora a redução do valor reduza o tempo necessário para processar uma transação, especialmente em cargas de trabalho vinculadas à gravação Acredito que definir o valor muito baixo tornaria o pool de buffers incapaz de manter a limpeza de alguns de seus buffers e páginas sujas do pool de buffers.
No nosso caso, vimos uma melhoria drástica aumentando o valor de 128 para 256, mas geralmente o valor correto depende do hardware e do tipo de carga. O truque é encontrar o valor certo entre aumentar o desempenho do OLTP e deixar o MySQL manter o pool de buffers limpo para que o page_cleaner não precise fazer muito trabalho, conforme indicado pela mensagem acima ( "InnoDB: page_cleaner: 1000ms pretendido loop levou 15888ms" ).
O valor pode ser alterado dinamicamente sem reiniciar o MySQL, por exemplo
Este thread do StackOverflow pode ser útil...
https://stackoverflow.com/questions/41134785/how-to-solve-mysql-warning-innodb-page-cleaner-1000ms-intended-loop-took-xxx
Isso basicamente significa que seu banco de dados está recebendo muitas gravações, fazendo com que o BufferPool seja preenchido com valores sujos. Isso aciona o PageCleaner para agir e limpar as páginas sujas. Como havia muitas páginas sujas do que o normal, levou mais tempo para o PageCleaner limpar o buffer.
innodb_lru_scan_depth
determinada variável controla quanto da varredura do buffer pool deve ser feito para limpeza. Isso pode ser um valor grande ou a taxa de transferência de gravação do sistema é muito alta, causando um grande número de páginas sujas.