it-swarm.com.de

Die Einstellungen für MySQL InnoDB page_cleaner sind möglicherweise nicht optimal

Diesen Hinweis in mysqld.log sehen:

[Note] InnoDB: page_cleaner: 1000ms intended loop took 15888ms. The settings might not be optimal. (flushed=200 and evicted=0, during the time.)

Hier scheint so etwas zu erwähnen: MySQL-Instanz blockiert "Doing SYNC Index"

Meine Frage lautet: Welche Maßnahmen sollten gegebenenfalls ergriffen werden, wenn dieser Hinweis in den Protokollen angezeigt wird?

MySQL- und OS-Versionen:
mysql-community-server - 5.7.9 - 1.el7.x86_64
Centos-release-7-1.1503.el7.centos.2.8.x86_64

Das Ausführen von SHOW VARIABLES LIKE 'innodb%'; wie vorgeschlagen zeigt:

innodb_page_cleaners | 1
18
mcmacerson

Der Standardwert von innodb_page_cleaners wurde in MySQL 5.7.8 von 1 auf 4 geändert. Wenn die Anzahl der Seitenbereinigungsthreads die Anzahl der Pufferpoolinstanzen überschreitet, wird innodb_page_cleaners automatisch auf den gleichen Wert wie innodb_buffer_pool_instances festgelegt

Überprüfen Sie innodb_buffer_pool_instances mit:

mysql> SHOW GLOBAL VARIABLES LIKE 'innodb_buffer_pool_instances'

Sie können innodb_page_cleaners Nur so hoch wie innodb_buffer_pool_instances Setzen. Wenn Sie innodb_page_cleaners=4 Wollen, brauchen Sie auch innodb_buffer_pool_instances=4.

11
Leandro

Wir hatten das gleiche Problem bei verschiedenen Clients und stellten fest, dass das Problem darauf zurückzuführen war, dass der Wert von innodb_lru_scan_depth vom Standardwert von 1024 auf 128 festgelegt wurde. Durch Verringern des Werts wird jedoch die für die Verarbeitung benötigte Zeit verkürzt Eine Transaktion, insbesondere bei schreibgebundenen Workloads. Ich glaube, dass ein zu niedriger Wert den Pufferpool nicht in der Lage halten würde, einige seiner Puffer und schmutzigen Seiten des Pufferpools zu löschen.

In unserem Fall haben wir eine drastische Verbesserung festgestellt, indem wir den Wert von 128 auf 256 erhöht haben. Im Allgemeinen hängt der richtige Wert jedoch von der Hardware und der Art der Last ab. Der Trick besteht darin, den richtigen Wert zwischen der Erhöhung der Leistung von OLTP und dem Reinhalten des Pufferpools durch MySQL zu finden, damit der page_cleaner nicht viel Arbeit benötigt , wie in der obigen Nachricht angegeben ("InnoDB: page_cleaner: 1000ms beabsichtigte Schleife dauerte 15888ms").

Der Wert kann dynamisch geändert werden, ohne MySQL neu zu starten, z.

SET GLOBAL innodb_lru_scan_depth=256;
5
Brian Fenech

Dieser StackOverflow Thread kann nützlich sein ...

https://stackoverflow.com/questions/41134785/how-to-solve-mysql-warning-innodb-page-cleaner-1000ms-intended-loop-took-xxx

Dies bedeutet im Grunde, dass Ihre Datenbank zu viele Schreibvorgänge erhält, wodurch der BufferPool mit schmutzigen Werten gefüllt wird. Dies veranlasst den PageCleaner , schmutzige Seiten zu bearbeiten und zu löschen. Da zu viele schmutzige Seiten als üblich vorhanden waren, dauerte es länger, bis der PageCleaner den Puffer löschte.

innodb_lru_scan_depth Eine bestimmte Variable steuert, wie viel des Pufferpool-Scans zum Löschen durchgeführt werden soll. Dies kann entweder ein großer Wert sein oder der Schreibdurchsatz des Systems ist sehr hoch und verursacht eine große Anzahl schmutziger Seiten.

0
swayamraina