Welche Konfigurationsoptionen für MySQL bieten die größten Geschwindigkeitsverbesserungen?
Ich frage mich, ob die Konfigurationsdatei tatsächlich verbessert wurde, welche Tabellentypen, Hardware-Setups, Replikationen usw. verwendet wurden. Außer der Abfragestruktur und der Tabellenstruktur (diese sind auf der Website und bei Stack Overflow leicht zu finden). Sind Dinge wie Cache-Einstellungen für Abfragen die Geschwindigkeit, die Sie am meisten beschleunigt haben? Wie wäre es mit Laufwerken; ist es besser, es auf einem externen oder internen RAID zu haben? Hat die Replikation zu einer besseren Leistung geführt, insbesondere bei großen Leseabfragen?
Welche anderen Einstellungen / Änderungen haben Sie vorgenommen, um die Leistung von MySQL zu verbessern?
Hinweis: Mir ist klar, dass diese sehr nutzungsabhängig sind (dh kleine Website vs. Data Warehouse), aber da ich denke, dass die meisten von uns wahrscheinlich an einer Vielzahl von Standorten / Systemen arbeiten, ist es gut, eine Vielzahl von Techniken zu kennen, die auf verschiedene angewendet werden können Situationen. Ich denke auch, dass einige Techniken zwischen Situationen übertragen werden können.
quelle
Antworten:
Hier sind meine Empfehlungen (Ihre Millage kann variieren)
quelle
Wieder einmal hat Dave Cheney es hier wirklich aus dem Park geworfen. Ich kann seiner Antwort auf Ihre Frage wirklich nichts hinzufügen. Ich möchte jedoch darauf hinweisen, was Sie nicht gefragt haben. Wie Jeremy Zawodny und Peter Zaitsev mir vor Jahren beigebracht haben, wird Ihr ROI für das Aufspüren und Optimieren fehlerhafter Abfragen Ihren ROI für das zehnfache Durchführen von Konfigurationsänderungen übertreffen. Sicher, Sie möchten keine schlechte Konfiguration, kein falsches RAID-Setup oder nicht genügend RAM. Aber unter exzellenten und sogar marginalen MySQL-DBAs sind schlechte Abfragen (normalerweise von Entwicklern / Frameworks, nicht vom DBA) ein chronischer Zustand, bei dem eine schlechte Konfiguration erträglich ist .
(Ich habe eine Weile nach diesen Adjektiven gesucht und bin immer noch nicht zufrieden mit denen, die ich ausgewählt habe.)
Ich möchte noch einmal betonen, dass Sie, wenn Ihre Entwickler ein ORM verwenden, wie es in Frameworks wie Ruby on Rails und Django üblich ist, die Abfragen, die Ihre Datenbank betreffen, WIRKLICH überwachen MÜSSEN. Wenn Entwickler aufhören, an SQL zu denken und die Datenbank abstrahieren lassen, ist das ein echt fieses Problem. Ich liebe die beiden Frameworks, die ich gerade erwähnt habe. (Stimmen Sie mich nicht dafür ab, dass ich sie schlecht ausgesprochen habe.) Das macht Query Sleuthing nur sehr wichtig. (Lesen Sie: Arbeitsplatzsicherheit)
quelle
Einige andere Dinge (die in Dave Cheneys Antwort nicht erwähnt wurden)
Setzen Sie innodb_flush_method auf O_DIRECT, um eine doppelte Datenpufferung zu vermeiden. Vermeiden Sie dies, wenn Ihre RAID-Karte keinen batteriegepufferten Schreibcache hat oder sich Ihre Daten in einem SAN befinden.
Spielen Sie auch mit der innodb_thread_concurrency. Ich glaube, die Standardeinstellung ist 8, aber es lohnt sich, dies zu optimieren, um zu sehen, ob es die Leistung verbessert
Stellen Sie sicher, dass der Abfrage-Cache aktiviert ist, und überprüfen Sie die Statistiken, um die Trefferquote zu ermitteln. Wenn es gut ist, versuchen Sie es zu erhöhen, um zu sehen, ob es die Trefferquote verbessert.
Abhängig von den ausgeführten Anwendungen können Sie möglicherweise die Standardisolationsstufe ändern. Der Standardwert ist REPEATABLE_READ, aber READ_COMMITTED bietet möglicherweise eine bessere Leistung
Wenn es sich bei Ihren Anweisungen hauptsächlich um UPDATEs und DELETEs handelt, können Sie versuchen, den Cache auf dem Slave mit einer SELECT-Abfrage vorzubereiten, die die zu ändernde Ergebnismenge zurückgibt. Schauen Sie sich das mk-slave-Prefetch- Tool an, das dies für Sie erledigt
Schauen Sie sich neben MyISAM und InnoDB auch andere Speicher-Engines an
quelle
Ich kann nichts über Hardware sagen, aber Sie könnten http://blog.mysqltuner.com ausprobieren. Es ist ein Perl-Skript, das Ihre MySQL-Einstellungen analysiert.
Eine Beispielausgabe finden Sie unter http://www.thomas-krenn.com/de/wiki/MySQL_Performance_Tuning#mysqltuner.pl
quelle
Als erstes sollten Sie sich die Speicherparameter ansehen. Die Standardeinstellungen für MySQL sind sehr, sehr konservativ. Unabhängig davon, welche Engine Sie verwenden, müssen Sie wahrscheinlich die Anzahl der Speicherparameter um das Zehn- oder sogar Hundertfache erhöhen.
Als nächstes sollten Sie sich den Tabellencache ansehen. Der Standardwert ist 64, was nur nützlich ist, wenn Sie nicht mehr als etwa 60 Tabellen haben. Sie werden das sehr weit bringen wollen.
Als Drittes sollten Sie sich den Thread und die Verbindungsparameter ansehen. Der Standardwert für wait_timeout ist für die meisten webbasierten Anwendungen sehr lang und kann auf 30 Sekunden reduziert werden. Dies wird auch die Speichernutzung verbessern, da MySQL schneller Verbindungen aufbaut und viel weniger im Ruhezustand herumliegt.
quelle