Was ist ein InnoDB-Pufferpool?
Der InnoDB-Pufferpool ist der Speicherplatz, der viele In-Memory-Datenstrukturen von InnoDB, Puffer, Caches, Indizes und sogar Zeilendaten enthält. innodb_buffer_pool_size ist der MySQL-Konfigurationsparameter, der die Speichermenge angibt, die MySQL dem InnoDB-Pufferpool zuweist. Dies ist eine der wichtigsten Einstellungen in der MySQL-Hosting-Konfiguration und sollte basierend auf dem verfügbaren System-RAM konfiguriert werden.
In diesem Beitrag führen wir Sie durch zwei Ansätze zum Festlegen Ihres InnoDB-Pufferpoolgrößenwerts, untersuchen die Vor- und Nachteile dieser Praktiken und schlagen auch eine einzigartige Methode vor erreichen Sie einen optimalen Wert basierend auf der Größe Ihres System-RAM.
Ansatz 1. Faustregelmethode
Am häufigsten wird dieser Wert auf 70 % bis 80 % des System-RAM gesetzt. Obwohl es in den meisten Fällen gut funktioniert, ist diese Methode möglicherweise nicht in allen Konfigurationen optimal. Nehmen wir das Beispiel eines Systems mit 192 GB RAM. Basierend auf der obigen Methode kommen wir auf etwa 150 GB für die Pufferpoolgröße. Dies ist jedoch nicht wirklich eine optimale Zahl, da sie die große RAM-Größe, die im System verfügbar ist, nicht vollständig nutzt und etwa 40 GB Speicher zurücklässt. Dieser Unterschied kann noch deutlicher werden, wenn wir zu Systemen mit größeren Konfigurationen wechseln, bei denen wir den verfügbaren RAM in größerem Umfang nutzen sollten.
Ansatz 2. Ein differenzierterer Ansatz
Dieser Ansatz basiert auf einem detaillierteren Verständnis der Interna des InnoDB-Pufferpools und seiner Interaktionen, das sehr gut im Buch High Performance MySQL beschrieben wird.
Schauen wir uns die folgende Methode an, um die Größe des InnoDB-Pufferpools zu berechnen.
- Starten Sie mit dem gesamten verfügbaren RAM.
- Ziehen Sie einen geeigneten Betrag für die Anforderungen des Betriebssystems ab.
- Subtrahieren Sie einen geeigneten Betrag für alle MySQL-Anforderungen (wie verschiedene MySQL-Puffer, temporäre Tabellen, Verbindungspools und replikationsbezogene Puffer).
- Teilen Sie das Ergebnis durch 105 %, was eine Annäherung an den Overhead darstellt, der für die Verwaltung des Pufferpools selbst erforderlich ist.
Sehen wir uns zum Beispiel ein System mit 192 GB RAM an, das nur InnoDB verwendet und eine Gesamtgröße der Protokolldatei von etwa 4 GB hat. Wir können eine Regel wie „maximal 2 GB oder 5 % des gesamten RAM“ für die Zuweisung von Betriebssystemanforderungen verwenden, wie im obigen Buch empfohlen, was etwa 9,6 GB entspricht. Dann weisen wir auch etwa 4 GB für andere MySQL-Anforderungen zu, hauptsächlich unter Berücksichtigung der Größe der Protokolldatei. Diese Methode ergibt etwa 170 GB für unsere InnoDB-Pufferpoolgröße, was etwa 88,5 % Auslastung der verfügbaren RAM-Größe entspricht.
Obwohl wir oben die Regel „maximal 2 GB oder 5 % des gesamten RAM“ verwendet haben, um unsere Speicherzuweisung für die Anforderungen des Betriebssystems zu berechnen, funktioniert dieselbe Regel nicht in allen Fällen sehr gut , speziell für Systeme mit mittelgroßem RAM zwischen 2 GB und 32 GB. Beispielsweise bleibt in einem System mit 3 GB RAM die Zuweisung von 2 GB für die Anforderungen des Betriebssystems nicht viel für den InnoDB-Pufferpool, während die Zuweisung von 5 % des RAM für unsere Betriebssystemanforderungen einfach zu wenig ist.
Also passen wir die obige Betriebssystemzuweisungsregel an und untersuchen die InnoDB-Berechnungsmethode für verschiedene RAM-Konfigurationen:
Für Systeme mit kleinem RAM (<=1 GB)
Für Systeme mit weniger als 1 GB RAM ist es besser, den MySQL-Standardkonfigurationswert von 128 MB für die Größe des InnoDB-Pufferpools zu verwenden.
P>Für Systeme mit mittelgroßem RAM (1 GB – 32 GB)
In Anbetracht des Falls von Systemen mit einer RAM-Größe von 1 GB bis 32 GB können wir die Betriebssystemanforderungen mithilfe dieser groben Heuristik berechnen:
256 MB + 256 * log2 (RAM-Größe in GB)
Die Rationalisierung hier ist, dass wir für niedrige RAM-Konfigurationen mit einem Basiswert von 256 MB für die Anforderungen des Betriebssystems beginnen und diese Zuweisung in einer logarithmischen Skala als erhöhen die Menge an RAM steigt. Auf diese Weise können wir eine deterministische Formel entwickeln, um RAM für unsere Betriebssystemanforderungen zuzuweisen. Wir werden auch die gleiche Menge an Speicher für unsere anderen MySQL-Anforderungen zuweisen. Beispielsweise würden wir in einem System mit 3 GB RAM eine faire Zuordnung von 660 MB für Betriebssystemanforderungen und weitere 660 MB für andere MySQL-Anforderungen vornehmen, was zu einem Wert von etwa 1,6 GB für unsere InnoDB-Pufferpoolgröße führt.
Für Systeme mit größerem RAM (> 32 GB)
Für Systeme mit RAM-Größen von mehr als 32 GB würden wir wieder auf die Berechnung des Betriebssystembedarfs als 5 % unserer System-RAM-Größe zurückgreifen, und die gleiche Menge für Andere MySQL-Anforderungen. Für ein System mit einer RAM-Größe von 192 GB landet unsere Methode also bei etwa 165 GB für die Größe des InnoDB-Pufferpools, was wiederum ein optimaler Wert ist.
InnoDB Buffer Pool Size Calculator
Berechnen Sie den optimalen Wert für RAM beliebiger Größe:
InnoDB Buffer Pool Size Calculator – Berechnen Sie die optimale Zahl für jede System-RAM-GrößeClick To Tweet
Darstellung der InnoDB-Pufferpoolgröße für verschiedene RAM-Größen
Vorsicht bei der Berechnung der InnoDB-Pufferpoolgröße
Die Überlegungen in diesem Blogbeitrag beziehen sich auf Linux-Systeme, die für MySQL dediziert sind. Für Windows-Systeme oder Systeme, auf denen mehrere Anwendungen zusammen mit MySQL ausgeführt werden, können diese Beobachtungen ungenau sein. Es ist auch wichtig zu beachten, dass wir diese Tools zwar als Referenz verwenden können, aber wirklich viel Erfahrung, Experimente, kontinuierliche Überwachung und Feinabstimmung erforderlich sind, um die richtige Größe für Ihre innodb_buffer_pool_size zu erhalten.