Der Buffer Pool ist der zentrale Arbeitsspeicher-Cache der InnoDB-Speicher-Engine in MySQL und MariaDB. Er hält Daten- und Indexseiten im Hauptspeicher, damit wiederholte Zugriffe nicht jedes Mal von der Festplatte lesen müssen. Je größer der Buffer Pool, desto mehr Arbeit läuft direkt aus dem RAM — bei dedizierten Servern werden oft 70 bis 80 % des physischen Speichers dafür eingeplant.
Wie der Buffer Pool arbeitet
InnoDB verwaltet den Speicher in Seiten (typischerweise 16 KiB). Beim Lesen wird die benötigte Seite in den Pool geladen; wird sie geändert, markiert InnoDB sie als dirty und schreibt sie später im Hintergrund auf die Platte. Die Verdrängung alter Seiten übernimmt eine LRU-Liste (Least Recently Used): Wenig genutzte Seiten fliegen zuerst raus. Eine Besonderheit ist die Aufteilung in einen jungen und einen alten Bereich, damit einmalige große Scans nicht den gesamten Cache verdrängen.
Konfiguration
innodb_buffer_pool_size = 8G
Die Größe lässt sich in MySQL 8 / MariaDB online ändern, ohne den Server neu zu starten. Auf Servern mit mehreren Kernen kann der Pool in mehrere Instanzen aufgeteilt werden (innodb_buffer_pool_instances), um Sperren zu reduzieren. Die Auslastung prüft man über SHOW ENGINE INNODB STATUS oder die Performance-Schema-Tabellen.
Abgrenzung
Der Buffer Pool arbeitet auf Seitenebene und beschleunigt damit grundsätzlich jede Art von Zugriff. Der Query-Cache speichert dagegen fertige Abfrageergebnisse, und ein Hash-Index beschleunigt gezielte Gleichheitssuchen innerhalb der Datenstruktur. Zusammen mit den Optimierungsstrategien der Engine ergibt sich daraus das typische Performance-Bild einer Datenbank.
Warum der Buffer Pool so wichtig ist
Festplattenzugriffe sind um Größenordnungen langsamer als RAM-Zugriffe. Liegt der aktive Datensatz vollständig im Buffer Pool, arbeiten OLTP-Lasten nahezu ohne Platten-I/O. Deshalb gilt: innodb_buffer_pool_size ist der wichtigste Performance-Parameter einer InnoDB-Installation.
Verwandte Grundlagen: Query-Cache, Hash-Index, Datenbank-Indizes, In-Memory-Datenbank, MVCC.