Ich habe eine Drupal-Site und leide unter Leistungsproblemen. Ich habe festgestellt, wie ich eine Datenbank von MyISAM nach InnoDB konvertiere. Dies zeigt an, dass sich die Leistung durch Umschalten verbessern kann.
Wie kann ich feststellen, ob meine MySQL-Datenbank InnoDB oder MyISAM ist?
performance
database
Chrisjlee
quelle
quelle
Antworten:
Sie können eine benutzerdefinierte Abfrage ausführen:
um alle Tabellen in Ihrer Datenbank und die jeweils verwendete Engine aufzulisten.
Alternativ können Sie sich mit phpMyAdmin bei Ihrer Datenbank anmelden und Ihre Datenbank auswählen. Die Engine wird in der
Type
Spalte in der Liste der Tabellen angezeigt.Persönlich würde ich Navicat für MySQL empfehlen , es ist eine sehr schöne MySQL-GUI und macht es sehr einfach, solche Dinge herauszufinden.
Quelle: http://www.electrictoolbox.com/mysql-table-storage-engine/
quelle
SHOW TABLE STATUS
. Um eine einfache Zählung der Anzahl der Tabellen in jedem Motortyp zu erhalten, ist dies der FallSELECT ENGINE,COUNT(TABLE_NAME) FROM information_schema.TABLES WHERE TABLE_SCHEMA='database_name' GROUP BY ENGINE
.Nur Dinge auszuprobieren, um eine Website schneller zu machen, ist wie blindlings Autos zu wechseln und zu hoffen, dass Sie beim nächsten Mal eine schnellere bekommen.
Versuchen Sie zuerst die niedrig hängenden Früchte. Wenn es nicht hilft, versuchen Sie, den wirklichen Engpass zu finden.
Oft ist es nur eine langsame DB-Abfrage, die einen Index benötigt, oder ein Modul, das Dinge langsam erledigt.
Ich habe auch große Unterschiede zwischen Hostern entdeckt. Wenn Sie ein neues Drupal sofort installieren, ist die Leistung in Ordnung? Wenn nicht, ist es Zeit, nach einem anderen Hoster zu suchen.
quelle
Meine beste Erfahrung war es, pro Tisch zu entscheiden. InnoDB ist nett, weil es das Sperren von Tabellen vermeiden kann (kein anderer Prozess kann aus einer Tabelle lesen, während ein Prozess schreibt), aber es funktioniert schrecklich mit COUNT (), das häufig für Pager-Abfragen verwendet wird.
(Bearbeiten: siehe Clives Kommentar unten)
Es gibt auch Auswirkungen auf Ihr MySQL-Setup, je nachdem, welche Datenbank Sie verwenden. Wenn Sie Zugriff auf den Server haben, sollte mysqltuner Ihr erster Schritt sein, um die Konfiguration zu überprüfen:
https://github.com/rackerhacker/MySQLTuner-perl#readme
quelle
COUNT
Abfragen nach diesem Artikel von der ehemaligen High - Performance Group Manager für MySQL , obwohl es eigentlich nur eine Abfrage enthält , wirkt sichCOUNT(*)
ohne eineWHERE
Klausel.SELECT COUNT(*) FROM table
Benutzer mit diesem Wert sofort zurückkehren kann. InnoDB tut dies nicht, daher muss der gesamte Primärschlüsselindex gescannt werden. Das heißt, während Drupal viel tutSELECT COUNT(*)
, kann ich mir nur eine Stelle im gesamten Code vorstellen, die dies ohneWHERE
Klausel tut . Verwenden Sie MyISAM daher nicht aus Sorge um diesen speziellen Randfall. InnoDB mit einem Pufferpool mit anständiger Größe ist für alle realen Abfragen schneller.FWIW auf unserer Drupal 6.x-Site mit fast 20.000 Knoten traten einige Leistungsprobleme auf, und ich entschied mich dafür, alle Tabellen in InnoDB zu verschieben. Es war einfach und die Art und Weise, wie ich damit umging, bestand darin, mit mysqldump den gesamten Inhalt in eine SQL-Datei zu kopieren, einen Editor (sed) zu verwenden, um alle Vorkommen von MyISAM in InnoDB zu ersetzen, und dann die Datenbank aus dieser Datei neu zu laden. Einer der Nachteile ist, dass Sie keinen Speicherplatz aus einer InnoDB-Datenbank (IIRC) wiederherstellen können. Solange Sie Ihre doppelten Tabellen in einer separaten Datenbank aufbewahren, sollten Sie keine Probleme haben. Oh, und wir haben eine signifikante Leistungssteigerung gesehen. Und weil wir vier Drupal-Instanzen haben, wurde die schiere Anzahl von Tabellendateien aus dem Dateisystem entfernt (ja, sie sind in der InnoDB-Datei selbst enthalten). Das ist mein Wert von 0,02 $.
quelle
innodb_file_per_table
Option.for tbl in $(mysql -Ne 'show tables' databasename); do mysql -e "ALTER TABLE $tbl ENGINE=InnoDB"; done
. Fügen Sie-uroot -psomepass
den beiden Optionenmysql
bei Bedarf geeignete Optionen ( z. B.) hinzu .Nur ein Kopf hoch. Wenn Sie Drupal 6 verwenden, können Sie das DBTuner- Modul installieren . Es kann Ihre Tabellen leicht von MyISAM nach InnoDB verschieben. Also ja, dafür gibt es ein Modul!
quelle