So lösen Sie mysql Warnung: "InnoDB: page_cleaner: 1000 ms beabsichtigte Schleife dauerte XXX ms. Die Einstellungen sind möglicherweise nicht optimal "?

11

Ich habe einen MySQL-Import ausgeführt. mysql dummyctrad & lt; dumpfile.sql auf dem Server und es dauert zu lange, um abzuschließen. Die Speicherabbilddatei ist ungefähr 5G. Server centos 6 Speicher = 16G und 8core Prozessoren, mysql v 5.7 x64

Sind diese normalen Nachrichten / Status "Warten auf Tabellenspülung" und die Nachricht InnoDB: page_cleaner: 1000ms intended loop took 4013ms. The settings might not be optimal

mysql log Inhalt

%Vor%

Prozessliste \

%Vor%

Update-1

mysqlforum , innodb_lru_scan_depth

Das Ändern des innodb_lru_scan_depth-Werts auf 256 hat die Ausführungszeit der INSERT-Abfragen + keine Warnmeldung im Protokoll verbessert, der Standardwert war innodb_lru_scan_depth = 1024;

SET GLOBAL innodb_lru_scan_depth=256;

    
satch_boogie 14.12.2016, 04:20
quelle

1 Antwort

27
  

InnoDB: page_cleaner: 1000ms beabsichtigte Schleife dauerte 4013ms. Die Einstellungen sind möglicherweise nicht optimal. (errötet = 1438 und geräumt = 0, während der Zeit.)

Das Problem ist typisch für eine MySQL-Instanz, bei der Sie eine hohe Änderungsrate für die Datenbank haben. Wenn Sie Ihren 5-GB-Import ausführen, erstellen Sie schnell schmutzige Seiten. Wenn verschmutzte Seiten erstellt werden, ist der Seitenreinigungs-Thread für das Kopieren von fehlerhaften Seiten aus dem Speicher auf die Festplatte verantwortlich.

In Ihrem Fall gehe ich davon aus, dass Sie nicht ständig 5 GB importieren. Das ist eine außergewöhnlich hohe Datenlast, und das ist temporär. Sie können die Warnungen wahrscheinlich ignorieren, da InnoDB nach und nach aufholt.

Hier ist eine detaillierte Erklärung der Interna, die zu dieser Warnung führen.

Der Seiten-Cleaner durchsucht den Pufferpool einmal pro Sekunde nach schmutzigen Seiten, die vom Pufferpool auf den Datenträger geleert werden sollen. Die Warnung, die Sie gesehen haben, zeigt, dass sie viele schmutzige Seiten zum Spülen hat, und es dauert mehr als 4 Sekunden, um einen Stapel von ihnen auf die Festplatte zu spülen, wenn sie diese Arbeit in weniger als 1 Sekunde erledigen sollte. Mit anderen Worten, es beißt mehr ab, als es kauen kann.

Sie haben dies angepasst, indem Sie innodb_lru_scan_depth von 1024 auf 256 reduziert haben. Dadurch wird reduziert, wie weit der Seitenaufreinigungs-Thread in dem Pufferpool während seines einmal pro Sekunde dauernden Zyklus nach schmutzigen Seiten sucht. Sie bitten es, kleinere Bisse zu nehmen.

Beachten Sie, dass wenn Sie viele Bufferpool-Instanzen haben, führt das Löschen zu mehr Arbeit. Es beißt innodb_lru_scan_depth Arbeitsaufwand für jede Pufferpoolinstanz. Möglicherweise haben Sie diesen Engpass versehentlich verursacht, indem Sie die Anzahl der Pufferpools erhöht haben, ohne die Scantiefe zu verringern.

Die Dokumentation für innodb_lru_scan_depth sagt "Eine Einstellung, die kleiner als die Standardeinstellung ist, ist im Allgemeinen für die meisten Arbeitslasten geeignet." Es klingt, als hätten sie dieser Option einen Wert gegeben, der standardmäßig zu hoch ist.

Mit den Optionen innodb_io_capacity und innodb_io_capacity_max können Sie die vom Hintergrundspülen verwendete IOPS begrenzen. Die erste Option ist ein Softlimit für den I / O-Durchsatz, den InnoDB anfordern wird. Aber diese Grenze ist flexibel; Wenn die Spülung hinter der Rate der Erstellung neuer schmutziger Seiten zurückbleibt, wird InnoDB die Spülrate über diese Grenze hinaus dynamisch erhöhen. Die zweite Option definiert ein strengeres Limit für die Erhöhung der Spülrate durch InnoDB.

Wenn die Rate der Spülung mit der durchschnittlichen Rate der Erstellung neuer schmutziger Seiten mithalten kann, dann ist alles in Ordnung. Wenn Sie jedoch permanent fehlerhafte Seiten schneller erstellen, als sie gelöscht werden können, wird der Pufferpool schließlich mit fehlerhaften Seiten gefüllt, bis die fehlerhaften Seiten innodb_max_dirty_page_pct des Pufferpools überschreiten. An diesem Punkt wird die Spülrate automatisch erhöht und kann erneut dazu führen, dass der page_cleaner Warnungen sendet.

Eine andere Lösung wäre, MySQL auf einem Server mit schnelleren Festplatten zu installieren. Sie benötigen ein I / O-System, das den Durchsatz bewältigen kann, der für die Seitenspülung erforderlich ist.

Wenn diese Warnung ständig unter durchschnittlichem Datenverkehr angezeigt wird, versuchen Sie möglicherweise, zu viele Schreibabfragen auf diesem MySQL-Server durchzuführen. Es könnte Zeit sein, die Schreibvorgänge zu skalieren und die Schreibvorgänge auf mehrere MySQL-Instanzen mit jeweils einem eigenen Festplattensystem aufzuteilen.

Lesen Sie mehr über den Seitenreiniger: Ссылка

    
Bill Karwin 15.12.2016, 02:22
quelle

Tags und Links