Best Practices für 16 KB nichtflüchtige Speicher und MySQL

In diesem Dokument wird beschrieben, wie der nichtflüchtige Speicher mit einer physischen Blockgröße von 16 KB zur Leistungsverbesserung einer MySQL-Datenbank verwendet wird.

Schreiblastige MySQL-Arbeitslasten profitieren von der Deaktivierung des InnoDB doublewrite-Zwischenspeichers. InnoDB von MySQL führt während des Dirty Page Flush-Prozesses ein Doublewrite durch, damit möglicherweise abgerissene Seiten wiederhergestellt werden können.

Ist jedoch ein durchgängiger 16 KB Atomschreibpfad vorhanden, um sicherzustellen, dass eine 16 KB Datenseite nicht teilweise auf das Laufwerk festgeschrieben oder zerrissen wird, müssen keine Doublewrites ausgeführt werden. Wenn Doublewrite deaktiviert ist, wird die Dirty Page Flush-Funktion der Datenbank verdoppelt und verringert so die Häufigkeit, in der die Datenbank in einen Sync Flush Zustand gerät. Dies ermöglicht eine stabilere und verbesserte Leistung.

Hinweise

16 KB Atomschreibpfad von der Datenbank zum Blockgerät erstellen

Sie können einen durchgängigen 16 KB Atomschreibpfad von der Datenbank zum Blockgerät erstellen, wenn Sie einen 16 KB nichtflüchtigen Speicher verwenden. Dadurch kann die Doublewrite-Funktion in MySQL / InnoDB sicher deaktiviert werden und gewährleistet so eine stabilere und bessere Leistung für hohe Schreiblasten.

Sie können einen nichtflüchtigen Speicher mit der Google Cloud Platform Console, dem gcloud-Tool oder der API erstellen und anhängen.

  1. Erstellen Sie eine 16 KB Persistent Disk in Blockgröße und hängen Sie sie an Ihre VM an. Der 16 KB nichtflüchtige Speicher bietet 16 KB Schreibatomarität auf physischer Blockebene. Wir empfehlen Ihnen Ihre MySQL-Instanz so zu konfigurieren, dass Datendateien ausschließlich auf dem 16 KB nichtflüchtigen Speicher gespeichert werden. Speichern Sie Logdateien, insbesondere Redo-Logs und Bin-Logs, auf einem 4 KB nichtflüchtigen Speicher, der mit derselben VM verbunden ist. Dadurch wird sichergestellt, dass Logdateischreibvorgänge weiterhin mit hoher Leistung arbeiten, da kleine Logschreibvorgänge auf einem 16 KB nichtflüchtigen Speicher möglicherweise viele Lese-Änderungs-Schreibvorgänge auslösen, die langsamer sind.

  2. Formatieren Sie das 16 KB Laufwerk mithilfe des Dateisystems ext4 und der Option BigAlloc und legen Sie die Clustergröße auf 16 KB fest. Hier ist ein Beispiel eines mkfs-Befehls mit der angegebenen BigAlloc-Option:

    mkfs.ext4 -O bigalloc -C 16384 [...other options…]
    

    Durch die Verwendung von BigAlloc mit einer 16 KB Clustergröße wird sichergestellt, dass das Dateisystem Dateien zuordnet, die mit der 16 KB Grenze auf der Festplatte übereinstimmen.

  3. Wählen Sie beim Erstellen der VM-Instanz ein Betriebssystem-Image aus den Google Container-optimierten Betriebssystem-Image-Familien im cos-cloud-Projekt aus.

    Verwenden Sie den Befehl gcloud, um eine Liste aller verfügbaren cos-Images anzuzeigen:

    gcloud compute images list --project cos-cloud --no-standard-images
    

    Wählen Sie Version 67 oder höher. Für bessere Ergebnisse, wählen Sie ein Image aus der cos-stable-Familie.

    Durch die Auswahl eines cos-Images wird sichergestellt, dass Schreibvorgänge nicht durch Layer zwischen dem Dateisystem und der physischen Blockeinheitsebene über die 16 KB Grenze verteilt werden. Der Qualifizierungsprozess für cos-Images verfügt über integrierte Tests, um dieses Ergebnis sicherzustellen.

  4. Prüfen Sie, dass max_segments und max_sectors_kb ordnungsgemäß im Betriebssystem konfiguriert sind:

    max_segments >= max_sectors_kb/4
    

    Diese beiden Variablen sind bereits in allen VMs der Google Compute Engine konfiguriert. Wenn Sie nicht über ein Skript verfügen, das diese beiden Variablen nach der VM-Erstellung ändert, müssen Sie hier nichts tun.

    Sie können diese beiden Konstanten im Betriebssystem unter diesem Pfad abfragen:

    /sys/block/sd<drive letter>/queue/
    
  5. Konfigurieren Sie InnoDB für die Verwendung von O_DIRECT. Legen Sie O_DIRECT zur innodb_flush_method fest oder fügen Sie sie hinzu.

Jetzt können Sie die innodb_doublewrite-Option sicher ausschalten.

Diese Methode ist nicht der einzige Ansatz, mit dem Sie durchgängige 16 KB Schreibvorgänge mit einem 16 KB Blockgerät sicherstellen können. Wenn Sie beispielsweise Ihre Datenbank so konfigurieren, dass das Blockgerät direkt als unformatiertes Gerät verwendet wird, ohne ein Dateisystem zu verwenden, können Sie die obigen Schritte zur Konfiguration des Dateisystems überspringen.

Weitere Informationen

Hat Ihnen diese Seite weitergeholfen? Teilen Sie uns Ihr Feedback mit:

Feedback geben zu...

Compute Engine-Dokumentation