Welche Tabellen sollten oder könnten nach InnoDB migriert werden und welche sollten MyISAM bleiben?


10

Gemäß Titel: Gibt es eine kurze Liste von Kandidaten für Tabellen, die nach InnoDB migriert werden sollen? Und was soll MyISAM bleiben.

Einige zusätzliche Informationen

  • Die Site hat eine ziemlich hohe Leselast, fügt jedoch ungefähr 10 Knoten pro Stunde mit Tags und dergleichen ein.
  • Wir nutzen CCK (eine große Anzahl normalisierter Tabellen in Form von content_field%).
  • Wir verwenden Ansichten auch für alle unsere Blöcke und Seiten. Viele davon können jedoch durch benutzerdefinierte Module ersetzt werden (um Datenbankabfragen und die Schwere dieser Abfragen zu verringern).
  • Benutzer sind alle anonym; mit Ausnahme einiger weniger angemeldeter Editoren und Webmaster.

Es ist komisch, dass das gesamte Internet keine Ahnung hat, wie man diese Frage tatsächlich beantwortet. Welche Drupal-Tabellen nehmen die meisten Schreibvorgänge und werden gesperrt ... wer weiß.
JM Becker

Antworten:


8

Sie sollten alle Daten in InnoDB konvertieren, um Probleme beim Sperren von Tabellen zu vermeiden. Hier sind jedoch einige Dinge zu beachten:

FULLTEXT-Indizierung

Derzeit unterstützt nur MyISAM die FULLTEXT-Indizierung. Die FULLTEXT-Indizierung für InnoDB ist derzeit für MySQL 5.6 in Arbeit, jedoch nicht produktionsbereit . Wenn Sie Drupal-Tabellen mit FULLTEXT-Indizes haben, können diese derzeit nicht in InnoDB konvertiert werden.

UPDATE zur FULLTEXT-Indizierung

MySQL 5.6 ist jetzt GA (out for Production Use). Bitte probieren Sie die FULLTEXT-Indizierung in InnoDB aus.

FULLTEXTFühren Sie die folgende Abfrage aus, um die Tabellen mit einem Index zu suchen:

SELECT table_schema,table_name
FROM information_schema.statistics
WHERE index_type='FULLTEXT';

Wenn keine Zeilen zurückkommen, konvertieren Sie alle InnoDB-Tabellen nach Herzenslust. Ich habe einen früheren Beitrag darüber geschrieben, wie alle MyISAM-Tabellen nur mit MySQL in InnoDB konvertiert werden .

MySQL-Replikation

Wenn Sie eine Umgebung mit vielen Lesevorgängen haben, können Lesevorgänge in MyISAM schneller ausgeführt werden, wenn Sie Folgendes tun:

  • Richten Sie die Master / Slave-Replikation ein
  • Erstellen Sie einen oder mehrere Read Slaves unter dem Master
  • Fügen Sie --skip-innodb/etc/my.cnf für alle Slaves hinzu (konvertiert Tabellen in MyISAM, wenn Daten in den Slave geladen werden).
  • Ändern Sie das Zeilenformat aller MyISAM-Tabellen auf jedem Slave mit diesem Befehl in FIXED: ALTER TABLE tblname ROW_FORMAT=FIXED;
  • Ich habe etwas dazu im DBA StackExchange gepostet
  • Das Buch MySQL Database Design and Tuning empfiehlt die Verwendung ROW_FORMAT=FIXEDauf den Seiten 72, 73. Dadurch werden alle VARCHAR-Felder intern in CHAR konvertiert. Dadurch wird die MyISAM-Tabelle größer, aber ausgeführte SELECTs dagegen werden viel schneller ausgeführt. Das kann ich persönlich bezeugen. Ich hatte einmal einen Tisch mit 1,9 GB. Ich habe das Format mit geändert ALTER TABLE tblname ROW_FORMAT=FIXED. Die Tabelle endete mit 3,7 GB. Die Geschwindigkeit der SELECTs dagegen war 20-25% schneller, ohne etwas anderes zu verbessern oder zu ändern.

Das einzige Problem dabei ist, Ihre Anwendung auf separate Leseslaves aufmerksam zu machen.

EPILOG

Wenn Sie sich andere Vorteile ansehen, die jede Speicher-Engine bietet, überprüfen Sie den DBA StackExchange:


4

Da Ihre Website schwer lesbar ist, würde ich einfach alle Tabellen in InnoDB konvertieren. Sie können dann die Leseleistung optimieren, indem Sie den InnoDB-Pufferpool und den Abfragecache entsprechend dimensionieren. Auf diese Weise erreichen wir mehrere tausend Abfragen pro Sekunde auf den dedizierten Datenbankservern in unserer Drupal-Hosting-Infrastruktur.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.