Mehrere typische Werte von innodb_flush_method fsync: InnoDB verwendet den Systemaufruf fsync(), um sowohl die Daten- als auch die Protokolldateien zu leeren. fsync ist die Standardeinstellung. O_DSYNC: InnoDB verwendet O_SYNC zum Öffnen und Leeren der Protokolldateien und fsync() zum Leeren der Datendateien. InnoDB verwendet O_DSYNC nicht direkt, da es damit bei vielen Unix-Varianten Probleme gab. O_DIRECT: InnoDB verwendet O_DIRECT (oder directio() unter Solaris), um die Datendateien zu öffnen, und verwendet fsync(), um sowohl die Daten- als auch die Protokolldateien zu leeren. Diese Option ist unter einigen GNU/Linux-Versionen, FreeBSD und Solaris verfügbar. Wie man den Wert erhält, wird im offiziellen MySQL-Dokument empfohlen Wie sich jede Einstellung auf die Leistung auswirkt, hängt von der Hardwarekonfiguration und der Arbeitslast ab. Benchmark Ihre konkrete Konfiguration, um zu entscheiden, welche Einstellung verwendet werden soll oder ob die Standardeinstellung beibehalten werden soll. Untersuchen Sie die Statusvariable Innodb_data_fsyncs, um die Gesamtzahl der fsync()-Aufrufe für jede Einstellung. Die Mischung aus Lese- und Schreibvorgängen in Ihrer Arbeitslast kann sich auf die Leistung einer Einstellung auswirken. Beispielsweise auf einem System mit einem Hardware-RAID-Controller und batteriegepuffertem Schreibcache, O_DIRECT kann helfen, doppeltes Puffern zwischen dem InnoDB-Pufferpool und der Datei des Betriebssystems zu vermeiden Systemcache. Auf einigen Systemen, auf denen sich InnoDB-Daten und -Protokolldateien auf einem SAN befinden, ist der Standard value oder O_DSYNC könnte bei einer leseintensiven Arbeitslast mit überwiegend SELECT-Anweisungen schneller sein. Immer Testen Sie diesen Parameter mit Hardware und Arbeitslast, die Ihre Produktionsumgebung widerspiegeln Mit anderen Worten: Der konkrete Wert hängt von der Hardwarekonfiguration und der Arbeitslast ab und lässt sich am besten durch einen Stresstest bestimmen. Im Allgemeinen ist o_direct jedoch in einer Linux-Umgebung mit einem RAID-Controller und einer Write-Back-Schreibrichtlinie die bessere Wahl. Handelt es sich bei dem Speichermedium um SAN, ist die Verwendung der Standardeinstellungen fsync oder osync möglicherweise besser. Im Allgemeinen scheinen die meisten Leute den Wert „o_direct“ mit einer RAID-Karte unten und der Lese-/Schreibrichtlinie auf „Writeback“ eingestellt zu verwenden. Als ich Sysbench zum Stresstest des OLTP-Typs verwendete, stellte ich fest, dass o_direct tatsächlich eine bessere Leistung als fsync aufweist und für die meisten Szenarien geeignet zu sein scheint. Ich bin jedoch kürzlich auf eine solche SQL-Anweisung gestoßen und das Kundenfeedback war sehr langsam. Bei gleichem Speicher wurde der damit erstellte Cloud-Host relativ schneller ausgeführt. Später stellte ich fest, dass der enorme Leistungsunterschied hauptsächlich durch die unterschiedlichen Einstellungswerte von innodb_flush_method verursacht wurde. Testszenario 1 innodb_flush_method ist der Standardwert, d. h. fsync, der Cache-Pool ist 512 M, das Tabellendatenvolumen beträgt 1,2 G, ohne den Einfluss des Cache-Pools ist das stabile Ergebnis mysql> Variablen wie „%innodb_flush_me%“ anzeigen; +---------------------+--------+ | Variablenname | Wert | +---------------------+--------+ | innodb_flush_method | | +---------------------+--------+ 1 Zeile im Satz (0,00 Sek.) mysql> SELECT sql_no_cache SUM(Ergebnis)-SUM(Einkommen) FROM Journal, wobei account_id = "1c6ab4e7-main"; +--------------------------+ | SUMME(Ergebnis)-SUMME(Einkommen) | +--------------------------+ |-191010.51 | +--------------------------+ 1 Reihe im Satz (1,22 Sek.) mysql> SELECT sql_no_cache SUM(Ergebnis)-SUM(Einkommen) FROM Journal, wobei account_id = "1c6ab4e7-main"; +--------------------------+ | SUMME(Ergebnis)-SUMME(Einkommen) | +--------------------------+ |-191010.51 | +--------------------------+ 1 Reihe im Satz (1,22 Sek.) mysql> erklären SELECT sql_no_cache SUM(Ergebnis)-SUM(Einkommen) FROM Journal, wobei account_id = '1c6ab4e7-main'; +----+----------+---------+------+---------------+------------+---------+---------+---------+---------+--------+-----------------------+ | ID | Auswahltyp | Tabelle | Typ | mögliche Schlüssel | Schlüssel | Schlüssellänge | Ref. | Zeilen | Extra | +----+----------+---------+------+---------------+------------+---------+---------+---------+---------+--------+-----------------------+ | 1 | SIMPLE | Journal | Ref | Account-ID | Account-ID | 62 | const | 161638 | Indexbedingung wird verwendet | +----+----------+---------+------+---------------+------------+---------+---------+---------+---------+--------+-----------------------+ 1 Zeile im Satz (0,03 Sek.) Testszenario 2 innodb_flush_method wird in o_direct geändert, wodurch der Einfluss des Cache-Pools und das Ergebnis nach der Stabilisierung eliminiert werden mysql> Variablen wie „%innodb_flush_me%“ anzeigen; +---------------------+----------+ | Variablenname | Wert | +---------------------+----------+ | innodb_flush_method | O_DIRECT | +---------------------+----------+ 1 Zeile im Satz (0,00 Sek.) mysql> SELECT sql_no_cache SUM(Ergebnis)-SUM(Einkommen) FROM Journal, wobei account_id = "1c6ab4e7-main"; +--------------------------+ | SUMME(Ergebnis)-SUMME(Einkommen) | +--------------------------+ |-191010.51 | +--------------------------+ 1 Reihe im Satz (3,22 Sek.) mysql> SELECT sql_no_cache SUM(Ergebnis)-SUM(Einkommen) FROM Journal, wobei account_id = "1c6ab4e7-main"; +--------------------------+ | SUMME(Ergebnis)-SUMME(Einkommen) | +--------------------------+ |-191010.51 | +--------------------------+ 1 Zeile im Satz (3,02 Sek.) mysql> erklären SELECT sql_no_cache SUM(Ergebnis)-SUM(Einkommen) FROM Journal, wobei account_id = '1c6ab4e7-main'; +----+----------+---------+------+---------------+------------+---------+---------+---------+---------+--------+-----------------------+ | ID | Auswahltyp | Tabelle | Typ | mögliche Schlüssel | Schlüssel | Schlüssellänge | Ref. | Zeilen | Extra | +----+----------+---------+------+---------------+------------+---------+---------+---------+---------+--------+-----------------------+ | 1 | SIMPLE | Journal | Ref | Account-ID | Account-ID | 62 | const | 161638 | Indexbedingung wird verwendet | +----+----------+---------+------+---------------+------------+---------+---------+---------+---------+--------+-----------------------+ 1 Zeile im Satz (0,00 Sek.) Vergleich der Ergebnisse: Die Ausführungspläne der beiden sind genau gleich, aber die Leistung ist sehr unterschiedlich. Die Abfrageergebnisse beim ersten Start der Datenbank sind ebenfalls sehr unterschiedlich, und o_direct ist auch sehr unterschiedlich ( Testergebnisse ausgelassen). Ich verstehe nicht ganz, warum in diesem Fall die Leseleistung aufgrund der zusätzlichen Schicht des Betriebssystem- Cache viel höher ist. Die Einstellungen der Produktionsumgebung müssen auf den Ergebnissen des Stresstests und den tatsächlichen Auswirkungen basieren, und Sie können den Erfahrungswerten nicht blind vertrauen. Verbesserungsmaßnahmen: Ohne innodb_flush_method zu ändern, kann diese SQL-Anweisung durch Hinzufügen eines zusammengesetzten Indexes (account_id, outcome, income) weiter optimiert werden, um einen umfassenden Indexscan durchzuführen, der die Antwortzeit erheblich verkürzen kann. Die obige innodb_flush_method-Wertmethode (Beispielerklärung) ist der gesamte Inhalt, den der Editor mit Ihnen teilt. Ich hoffe, sie kann Ihnen als Referenz dienen. Ich hoffe auch, dass Sie 123WORDPRESS.COM unterstützen. |
<<: Einführung in Jenkins und wie man Jenkins mit Docker bereitstellt
>>: JavaScript Canvas implementiert die Bewegung des Balls entlang der Maus
Inhaltsverzeichnis Die benutzerdefinierte CSS-Var...
Wenn Sie das Breitenattribut direkt auf den Stil d...
Im vorherigen Artikel wurden mehrere Methoden zur...
Inhaltsverzeichnis Veränderungen im Lebenszyklus ...
Inhaltsverzeichnis Vorwort Begründung Verfahren 1...
Dieser Artikel ist eine selbstgeschriebene Nachah...
1. Welche drei Formate? Dies sind: gif, jpg und pn...
Vorwort Wenn wir Webseiten schreiben, stoßen wir ...
Ich habe heute einen neuen Trick gelernt. Ich kann...
beschreiben: Installieren Sie die VM unter Window...
1. Einführung in Prometheus Prometheus ist eine O...
<br />Es ist nicht länger als zwei Jahre her...
Die Projektanforderungen erfordern eine gewisse V...
Inhaltsverzeichnis Ref und Reaktiv Referenz Reakt...