
Diese Frage erschien ursprünglich auf stackoverflow.com, aber mir wurde gesagt, dass ich auf dieser Site möglicherweise eine bessere Antwort bekomme ...
In Kürze werde ich einen Webserver für einen Kunden einrichten, der eine sehr geschäftige Website hat. Er hat ein Forum (läuft aufSimple Machines ForumSMF in PHP geschrieben), das kann nicht wirklich geändert werden. Ich möchte dies auf einen separaten virtuellen privaten Server verschieben, da es mit rund 40.000 Zugriffen pro Tag und über 400 Posts pro Tag sehr ausgelastet ist. Mit der SMF-Version, die es hat (die beste, stabilste Produktionsversion 1.1), muss MySQL ausgeführt werden, daher kann ich es nicht auf PostgreSQL ändern (was ich vielleicht vorziehen würde).
Wenn ich MySQL Server auf Ubuntu Server 10 LTS installiere, möchte ich wissen, ob ich etwas tun kann, um sicherzustellen, dass es so effizient wie möglich ist. Ich möchte es so schnell wie möglich laufen lassen, um die Ressourcen niedrig zu halten und sicherzustellen, dass wir unter unserem Ressourcenlimit für den Server bleiben. Mit einem virtuellen privaten Server habe ich die Möglichkeit, die Ressourcen blitzschnell zu wechseln, aber ich möchte sicherstellen, dass MySQL Server so effizient wie möglich eingerichtet ist, da ich auf diesem Gebiet kein Experte bin.
Ich habe ein wenig nachgeforscht und einen Artikel gefunden, der empfiehlt, Folgendes zu tun, um die Effizienz sicherzustellen:
# open mysql conf and set these settings:
# key_buffer = 16k
# max_allowed_packet = 1M
# thread_stack = 64K
nano /etc/mysql/my.cnf
# restart mysql
/etc/init.d/mysql restart
Kann mir jemand Tipps, Hinweise, Links und Informationen zu diesem Thema geben?
Antwort1
Zunächst einmal hat Janne recht: 40.000 Lesevorgänge und 400 Schreibvorgänge pro Tag sind null Belastung. Sie sollten bei praktisch jeder Art von Konfiguration absolut keine Leistungseinbußen haben.
Ich verwende ein ähnliches Setup auf einem VPS mit SMF. Ich habe festgestellt, dass es sehr von Caching-Mechanismen profitiert, da es APC verwendet.
Mein Setup (das ich dir empfehle):
- Nginx
- MySQL (mit InnoDB-Konvertierung der meisten SMF-Tabellen)
- PHP-FPM (extrem skalierbar, kann sehr wenig Ressourcen verbrauchen, wenn Sie es anweisen, mit wenigen Spawns zu beginnen)
- APC-Cache
Antwort2
Zunächst einmal klingen 40.000 Zugriffe pro Tag und über 400 Beiträge pro Tag nicht nach etwas, das MySQL ins Schwitzen bringen würde. 40.000 Zugriffe pro Tag sind über den Tag verteilt etwa 2 Zugriffe pro Sekunde, und über 400 Beiträge bedeuten, dass alle drei Minuten ein neuer Beitrag erscheint.
Und das ist nicht viel. Wirklich.
Sie haben nicht erwähnt, welche Speicher-Engine verwendet wird. Bei MyISAM-Tabellen müssen Sie insbesondere dieSchlüsselpufferUndTabellencacheWerte. Mit InnoDB-Tabelleninnodb_buffer_pool_sizeist das Wichtigste.
DerSchlüsselpuffer = 16kin Ihrem Beispiel klingt seltsam. Ein 16 Kilobyte großer Schlüsselpuffer? Auf keinen Fall, machen Sie ihn mindestens 16M (Megabyte), oder wenn Ihr Server über eine anständige Speicherkapazität verfügt, kann er viel mehr sein. Bitte beachten Sie jedoch, dass viele MySQL-VariablenVerbindungEs handelt sich dabei um spezifische, nicht um globale Werte. Wenn Ihre Serverlast also Tausende von gleichzeitigen MySQL-Verbindungen umfasst, müssen Sie die Werte nach unten optimieren. Wenn Sie jedoch normalerweise nur eine Handvoll Verbindungen, dafür aber große Datensätze haben, müssen Sie die Werte nach oben optimieren.