Die maximale Speichernutzung von MySQL hängt stark von der Hardware, Ihren Einstellungen und der Datenbank selbst ab.
Hardware
Die Hardware ist der offensichtliche Teil. Je mehr RAM desto besser, desto schneller sind die Festplatten . Glauben Sie diesen monatlichen oder wöchentlichen Newslettern jedoch nicht. MySQL skaliert nicht linear - auch nicht auf Oracle-Hardware. Es ist etwas kniffliger.
Das Fazit lautet: Es gibt keine allgemeine Faustregel für die Empfehlungen für Ihr 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 - einige wichtige Einschränkungen:
- Tischmaschine (
InnoDB
, MyISAM
, ...)
- Größe
- Indizes
- Verwendung
Die meisten MySQL-Tipps zum Stackoverflow enthalten Informationen zu 5-8 sogenannten wichtigen Einstellungen. Zunächst einmal sind nicht alle von Bedeutung - z. B. die Zuweisung vieler Ressourcen zu InnoDB und die Nichtverwendung von InnoDB macht wenig Sinn, da diese Ressourcen verschwendet werden.
Oder - viele Leute schlagen vor, die max_connection
Variable zu verbessern - nun, wenig wissen sie, dass dies auch impliziert, dass MySQL mehr Ressourcen zuweist, um diese zu bedienen max_connections
- falls dies jemals benötigt wird. Die naheliegendere Lösung könnte darin bestehen, die Datenbankverbindung in Ihrer DBAL zu schließen oder die zu verringern wait_timeout
, um diese Threads freizugeben.
Wenn Sie meinen Drift bemerken, gibt es wirklich viel zu lesen und zu lernen.
Motoren
Tisch-Engines sind eine ziemlich wichtige Entscheidung. Viele Menschen vergessen diese frühzeitig und kämpfen plötzlich mit einem 30-GB- MyISAM
Tisch, der ihre gesamte Anwendung blockiert und blockiert.
Ich will damit nicht sagen, dass MyISAM scheiße ist, InnoDB
kann aber so angepasst werden, dass es fast oder fast so schnell reagiert wie MyISAM
und bietet so etwas wie das Sperren von Zeilen, UPDATE
während MyISAM
die gesamte Tabelle beim Schreiben gesperrt wird.
Wenn Sie MySQL auf Ihrer eigenen Infrastruktur ausführen können, sollten Sie auch den Percona-Server überprüfen, da er neben vielen Beiträgen von Unternehmen wie Facebook und Google (sie wissen es schnell) auch Perconas eigenen Drop-Server enthält. als Ersatz für InnoDB
, genannt XtraDB
.
Informationen zur Einrichtung des Percona-Servers (und des Clients) (unter Ubuntu) finden Sie in meiner Liste: http://gist.github.com/637669
Größe
Die Datenbankgröße ist sehr, sehr wichtig - ob Sie es glauben oder nicht, die meisten Leute in den Intarwebs haben noch nie ein großes und schreibintensives MySQL-Setup durchgeführt, aber diese existieren wirklich. Einige Leute werden trollen und etwas sagen wie "Use PostgreSQL !!! 111", aber lassen Sie uns sie vorerst ignorieren.
Das Fazit lautet: Ausgehend von der Größe muss eine Entscheidung über die Hardware getroffen werden. Sie können eine 80-GB-Datenbank mit 1 GB RAM nicht wirklich schnell ausführen.
Indizes
Es ist nicht: je mehr, desto besser. Es müssen nur die benötigten Indizes festgelegt und die Verwendung überprüft werden EXPLAIN
. Hinzu kommt, dass MySQL EXPLAIN
wirklich begrenzt ist, 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. Roll deinen eigenen.
Primer einstellen
Ein guter Anfang ist der Tuning Primer . Es ist ein Bash-Skript (Hinweis: Sie benötigen Linux), das die Ausgabe von SHOW VARIABLES
und SHOW STATUS
in eine hoffentlich nützliche Empfehlung umschließt. Wenn Ihr Server einige Zeit ausgeführt wurde, ist die Empfehlung besser, da Daten vorhanden sind, auf denen sie basieren können.
Der Tuning Primer ist jedoch keine magische Sauce. Sie sollten immer noch alle Variablen nachlesen, die geändert werden sollen.
lesen
Ich kann den mysqlperformanceblog sehr empfehlen . 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 Leute haben jahrelange Erfahrung.
Eine weitere großartige Ressource ist natürlich planet-mysql .