Die Art und Weise, InnoDB zu optimieren, ist zentriert
- InnoDB-Pufferpool: Zwischenspeichern von Datenseiten und Indexseiten. Die Menge an Daten und Index, die Sie zwischenspeichern können, ist keine Funktion der Speicherplatzbeschränkungen, sondern eine Funktion des verfügbaren Speichers und des derzeit von InnoDB verwendeten Speicherplatzes.
- InnoDB MetaData: Standardmäßig enthält die Datei ibdata1 normalerweise alles und jeden InnoDB. Dazu gehören Datenseiten, Indexseiten, Tabellenmetadaten und MVCC- Daten.
Hier ist eine Formel, die ich in den letzten 5 Jahren verwendet habe, um den InnoDB- Pufferpool basierend auf dem von InnoDB-Daten und Indexseiten verwendeten Speicherplatz zu berechnen :
SELECT CONCAT(ROUND(KBS/POWER(1024,IF(Power1024<0,0,
IF(Power1024>3,0,Power1024)))+0.49999),SUBSTR(' KMG',IF(Power1024<0,0,
IF(Power1024>3,0,Power1024))+1,1)) recommended_innodb_buffer_pool_size
FROM (SELECT SUM(data_length+index_length) KBS FROM information_schema.tables
WHERE engine='InnoDB') A,(SELECT 2 Power1024) B;
- Verwenden Sie (SELECT 0 Power1024) für Bytes
- Verwenden Sie (SELECT 1 Power1024) für KB
- Verwenden Sie (SELECT 2 Power1024) für MB
- Verwenden Sie (SELECT 3 Power1024) für GB
- Verwenden Sie (SELECT 4 Power1024) für TB (E-Mail an mich, wenn Sie TerraBytes RAM haben)
Natürlich habe ich eine Funktion des verfügbaren Speichers und des derzeit von InnoDB verwendeten Speicherplatzes angegeben. Verwenden Sie von hier aus nur den gesunden Menschenverstand. Die empfohlene Anzahl aus der obigen Abfrage sollte 75% des installierten Arbeitsspeichers nicht überschreiten !!! Dies ist die einfachste Faustregel für die Dimensionierung des InnoDB-Pufferpools.
Sie sollten innodb_flush_method auch auf O_DIRECT setzen, da dadurch stabile synchrone Schreibvorgänge für InnoDB bereitgestellt werden. Ich habe auch einen Beitrag darüber geschrieben, wie der Festplattenspeicher für InnoDB optimiert werden kann .
In Bezug auf die Meldungstabelle wird die Optimierung nicht unterstützt. Stattdessen wird neu erstellt + analysiert . Der Grund, warum Sie diese Fehlermeldung erhalten, ist die Tatsache, dass die Speicher-Engine InnoDB ist. Mechanisch kopiert OPTIMIZE TABLE die Tabelle einfach in eine temporäre Tabelle und führt ANALYZE TABLE aus .
In Wirklichkeit ist ANALYZE TABLE gegen InnoDB völlig nutzlos. Selbst wenn Sie ANALYZE TABLE für eine InnoDB-Tabelle ausgeführt haben, führt die InnoDB-Speicher-Engine immer wieder Tauchgänge in den Index für Kardinalitätsnäherungen durch, wodurch die soeben kompilierten Statistiken verworfen werden. Tatsächlich führte Percona einige Tests an ANALYZE TABLE durch und kam ebenfalls zu dem gleichen Ergebnis .
Hier sind andere Beiträge, die ich im Laufe des Jahres über InnoDB Tuning gemacht habe