Optimieren der InnoDB-Standardeinstellungen

8

Ich habe in my.ini geschaut und verschiedene Standardeinstellungen gesehen. Meine Datenbank läuft auf einem einzelnen eigenständigen PC. Ich möchte die Leistung von InnoDB und MySQL im Allgemeinen für die Leistung optimieren. Es gibt keine Einschränkung des Speicherplatzes. Welche Standardeinstellungen sollte ich ändern, um eine bessere Leistung, Zuverlässigkeit und mögliche Backups zu einem bestimmten Zeitpunkt zu erzielen [Hochverfügbarkeit].

Bearbeitet

Derzeit wird Folgendes angezeigt, wenn ich "Tabellen optimieren" über die Wartung in MySQL Administrator ausführe:

Die Tabelle unterstützt keine Optimierung. Stattdessen wird neu erstellt und analysiert

auf allen Tischen. Alle meine Tabellen sind InnoDB, aber warum unterstützen sie Optimize nicht?

RPK
quelle
Diese Bearbeitung rechtfertigt eine separate Frage, imo. Schauen Sie sich die Dokumentation zu OPTIMIZE TABLE an: dev.mysql.com/doc/refman/5.5/en/optimize-table.html InnoDB unterstützt den Befehl, aber der Prozess unterscheidet sich von MyISAM
Derek Downey

Antworten:

11

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

RolandoMySQLDBA
quelle
Mein PC verfügt über 2 GB RAM und InnoDB_Buffer_Pool_Size ist standardmäßig auf 6 MB eingestellt. Ich habe es auf 500 Millionen erhöht. Irgendwelche Vorschläge?
RPK
Stellen Sie 1536M ein, was 1,5 G entspricht, da dies 75% des installierten Arbeitsspeichers ist
RolandoMySQLDBA
Ich habe Ihre Abfrage ausgeführt und sie gibt eine Ausgabe von 45 G aus. Der Arbeitsspeicher auf meinem Server beträgt 8 GB. Muss ich meinen Arbeitsspeicher unbedingt erhöhen? Oder es gibt einige Bedingungen für die obige Abfrage ..
Stewie
@Stewie Wenn Sie über 45 GB InnoDB verfügen, benötigen Sie 60 GB RAM, wenn Sie über das Budget verfügen. Da Sie nur 8 GB haben, sind 75% des installierten Arbeitsspeichers (6 GB) ausreichend.
RolandoMySQLDBA
@ RolandoMySQLDBA: toller Beitrag! Aber ich verstehe nicht ganz, warum in Stewies Fall sein RAM nur 8 GB beträgt, aber die Ausgabe seiner Abfrage kann größer als 8 GB sein (in diesem Fall 45 GB). Könnten Sie das aufklären?
Chubaka
3

Hier ist ein älterer Artikel über die wichtigen Variablen für die Grobabstimmung. Das wichtigste ist wahrscheinlichinnodb_buffer_pool_size

Ich würde ein Upgrade auf MySQL 5.5 sehr empfehlen (falls Sie es noch nicht ausführen). Sie haben einige Änderungen an der InnoDB-Leistung vorgenommen. Sie bieten sogar einen Mainstream-Abschnitt zur Optimierung für InnoDB, da dies die Standard-Engine ist: http://dev.mysql.com/doc/refman/5.5/en/optimizing-innodb.html

Bei Backups zu bestimmten Zeitpunkten sollten Sie sich das Binärprotokoll ansehen . Die Grundlagen, um dies zu aktivieren, bestehen darin, die log-binVariable in Ihrer my.cnf festzulegen

Derek Downey
quelle
Ich habe ein Upgrade auf MySQL 5.5 durchgeführt.
RPK
2

Optimieren gibt es in vielen Farben.

Ich denke, Ihr erster Schritt sollte darin bestehen, zu entscheiden, was "optimieren" für Sie bedeutet. Für einige Leute bedeutet dies "schnellste SELECT-Abfragen". Für andere bedeutet dies "beste Balance zwischen SELECT-Leistung und INSERT-Leistung". Für noch andere "schnellste INSERT-Leistung".

Sie müssen entscheiden, welche Kriterien Sie haben und wie Sie feststellen, ob Ihre Änderungen hilfreich sind, bevor Sie mit der Optimierung beginnen.

Stellen Sie dann Ihre Konfigurationsdateien und Startoptionen unter Versionskontrolle und beginnen Sie zu experimentieren. Dokumentieren Sie, wessen Rat Sie folgen und wo Sie ihn gefunden haben. (Der Rat ändert sich im Laufe der Zeit, wenn sich die Codebasis und die Hardware ändern.) Stellen Sie auch diese Dokumente unter Versionskontrolle.

Mike Sherrill 'Cat Recall'
quelle