Die maximale Speichernutzung von MySQL hängt stark von der Hardware, Ihren Einstellungen und ab die Datenbank selbst.
Hardware
Die Hardware ist der offensichtliche Teil. Je mehr RAM desto besser, schnellere Festplatten ftw . Glauben Sie diesen monatlichen oder wöchentlichen Newslettern jedoch nicht. MySQL skaliert nicht linear – nicht einmal auf Oracle-Hardware. Es ist ein wenig kniffliger als das.
Das Fazit lautet:Es gibt keine allgemeine Faustregel dafür, was für Ihre empfohlen wird MySQL-Setup. Es hängt alles von der aktuellen Nutzung oder den Projektionen ab.
Einstellungen &Datenbank
MySQL bietet unzählige Variablen und Schalter, um sein Verhalten zu optimieren. Wenn Sie auf Probleme stoßen, müssen Sie sich wirklich hinsetzen und das (f'ing) Handbuch lesen.
Was die Datenbank betrifft -- ein paar wichtige Einschränkungen:
- Tabellen-Engine (
InnoDB
,MyISAM
, ...) - Größe
- Indizes
- Nutzung
Die meisten MySQL-Tipps zu Stackoverflow informieren Sie über 5-8 sogenannte wichtige Einstellungen. Zunächst einmal sind nicht alle von Bedeutung - z. Es macht wenig Sinn, InnoDB viele Ressourcen zuzuweisen und InnoDB nicht zu verwenden, da diese Ressourcen verschwendet werden.
Oder - viele Leute schlagen vor, die max_connection
zu erhöhen Variable -- nun, sie wissen kaum, dass dies auch impliziert, dass MySQL mehr Ressourcen zuweist, um diese max_connections
zu bewältigen - falls nötig. Die offensichtlichere Lösung könnte darin bestehen, die Datenbankverbindung in Ihrem DBAL zu schließen oder das wait_timeout
zu verringern um diese Threads freizugeben.
Wenn Sie verstehen, was ich meine – es gibt wirklich viel, viel zu lesen und zu lernen.
Motoren
Tabellen-Engines sind eine ziemlich wichtige Entscheidung, viele Leute vergessen diese früh und kämpfen dann plötzlich mit einem 30 GB großen MyISAM
Tabelle, die ihre gesamte Anwendung sperrt und blockiert.
Ich will damit nicht sagen, dass MyISAM scheiße ist , aber InnoDB
kann so angepasst werden, dass es fast oder fast so schnell reagiert wie MyISAM
und bietet so etwas wie Zeilensperren bei UPDATE
wohingegen MyISAM
sperrt die gesamte Tabelle, wenn in sie geschrieben wird.
Wenn es Ihnen freisteht, MySQL auf Ihrer eigenen Infrastruktur auszuführen, sollten Sie sich vielleicht auch den percona-Server
denn neben vielen Beiträgen von Unternehmen wie Facebook und Google (sie wissen es schnell) enthält es auch Perconas eigenen Drop-in-Ersatz für InnoDB
, genannt XtraDB
.
Siehe meinen Kern für die Einrichtung des Percona-Servers (und -Clients) (auf Ubuntu):http://gist.github .com/637669
Größe
Die Datenbankgröße ist sehr, sehr wichtig - ob Sie es glauben oder nicht, die meisten Leute auf den Intarwebs haben noch nie mit einem großen und schreibintensiven MySQL-Setup gearbeitet, aber diese existieren wirklich. Einige Leute werden trollen und so etwas sagen wie:„Verwende PostgreSQL!!!111“, aber lass uns sie vorerst ignorieren.
Unterm Strich gilt:Nach der Größe zu urteilen, sind Entscheidungen über die Hardware zu treffen. Sie können eine 80-GB-Datenbank mit 1 GB RAM nicht wirklich schnell laufen lassen.
Indizes
Es gilt nicht:je mehr, desto besser. Es müssen nur benötigte Indizes gesetzt und die Verwendung mit EXPLAIN
überprüft werden . Hinzu kommt das EXPLAIN
von MySQL ist wirklich begrenzt, aber es ist ein Anfang.
Vorgeschlagene Konfigurationen
Über diese my-large.cnf
und my-medium.cnf
Dateien - ich weiß nicht einmal, für wen diese geschrieben wurden. Rollen Sie Ihre eigenen.
Tuning-Grundlage
Ein guter Anfang ist der Tuning-Primer
. Es ist ein Bash-Skript (Hinweis:Sie benötigen Linux), das die Ausgabe von SHOW VARIABLES
übernimmt und SHOW STATUS
und verpackt es in hoffentlich nützliche Empfehlungen. Wenn Ihr Server einige Zeit gelaufen ist, wird die Empfehlung besser sein, da es Daten gibt, auf denen sie basieren können.
Die Tuning-Fibel ist jedoch keine Zaubersoße. Sie sollten sich dennoch über alle Variablen informieren, die zur Änderung vorgeschlagen werden.
Lesen
Ich empfehle sehr gerne den mysqlperformanceblog . Es ist eine großartige Ressource für alle Arten von MySQL-bezogenen Tipps. Und es ist nicht nur MySQL, sie wissen auch viel über die richtige Hardware oder empfehlen Setups für AWS usw. Diese Jungs haben jahrelange Erfahrung.
Eine weitere großartige Ressource ist planet-mysql , natürlich.