Ich habe in letzter Zeit Probleme mit Thrashing, weil mir der Speicher ausgeht. (Mein VPS hat insgesamt 256 Millionen)
Ich versuche MySQL mit mysqltuner.pl zu optimieren und erhalte die folgenden Ergebnisse:
-------- Allgemeine Statistiken ---------------------------------------- ---------- [-] Versionsprüfung für MySQLTuner-Skript übersprungen [OK] Derzeit wird unterstütztes MySQL-Protokoll der Version 5.0.51a-3ubuntu5.4 ausgeführt [OK] Betrieb mit 64-Bit-Architektur -------- Storage Engine Statistics --------------------------------------- ---- [-] Status: + Archive -BDB -Federated -InnoDB -ISAM -NDBCluster [-] Daten in MyISAM-Tabellen: 114M (Tabellen: 454) [!!] Gesamtzahl der fragmentierten Tabellen: 34 -------- Leistungsmetriken ---------------------------------------- --------- [-] Bis zu: 40 s (570 q [14.250 qps], 23 Conn, TX: 154 K, RX: 23 K) [-] Lesen / Schreiben: 100% / 0% [-] Gesamtpuffer: 338,0 MB global + 2,7 MB pro Thread (maximal 20 Threads) [!!] Maximal mögliche Speichernutzung: 392,9M (153% des installierten RAM) [OK] Langsame Abfragen: 0% (5/570) [OK] Höchste Auslastung der verfügbaren Verbindungen: 15% (3/20) [!!] Schlüsselpuffergröße / Gesamtzahl der MyISAM-Indizes: 8,0M / 9,4M [!!] Trefferquote des Schlüsselpuffers: 57,1% (7 zwischengespeicherte / 3 Lesevorgänge) [OK] Abfrage-Cache-Effizienz: 21,9% (7 zwischengespeicherte / 32 ausgewählte) [OK] Cache-Bereinigungen pro Tag abfragen: 0 [OK] Sortierungen, die temporäre Tabellen erfordern: 0% (0 temporäre Sortierungen / 1 Sortierungen) [OK] Temporäre Tabellen, die auf der Festplatte erstellt wurden: 0% (0 auf der Festplatte / 32 insgesamt) [OK] Trefferrate im Thread-Cache: 86% (3 erstellt / 23 Verbindungen) [OK] Trefferquote im Tabellen-Cache: 26% (128 offen / 484 geöffnet) [OK] Verwendetes Limit für offene Dateien: 25% (259 / 1K) [OK] Sofort erworbene Tabellensperren: 100% (492 sofortige / 492 Sperren) -------- Empfehlungen ----------------------------------------- ------------ Allgemeine Empfehlungen: Führen Sie OPTIMIZE TABLE aus, um Tabellen für eine bessere Leistung zu defragmentieren MySQL wurde innerhalb der letzten 24 Stunden gestartet - Empfehlungen können ungenau sein Reduzieren Sie Ihren gesamten MySQL-Speicherbedarf, um die Systemstabilität zu gewährleisten Zu ändernde Variablen: *** MySQLs maximale Speichernutzung ist gefährlich hoch *** *** Fügen Sie RAM hinzu, bevor Sie die MySQL-Puffervariablen erhöhen *** key_buffer_size (> 9,4 MB)
Aber ich bin ein bisschen verwirrt, wie ich die maximale Speichernutzung reduzieren kann. Es scheint auf key_buffer und max_connections zu basieren, aber muss da noch etwas anderes dabei sein?
my.cnf:
key_buffer = 8M max_allowed_packet = 12M thread_stack = 128 KB thread_cache_size = 8 max_connections = 20 table_cache = 128 tmp_table_size = 256 MB max_heap_table_size = 256M join_buffer_size = 256 KB query_cache_limit = 8 Millionen query_cache_size = 64M
Ich habe versucht, MySQL-Tuning-Artikel durchzulesen, aber sie scheinen auf Leute ausgerichtet zu sein, die bereits wissen, was sie tun! Jede Hilfe wäre dankbar. Vielen Dank!
Antworten:
Sie haben einen Server mit 256 MB, aber Sie können nicht alles verwenden - denken Sie daran, dass es einen gewissen Overhead für das Betriebssystem gibt. Hinzu kommt die Tatsache, dass Sie, wie andere Leute bereits erwähnt haben, überfordert sind und Sie auf jeden Fall hier verprügeln werden. 256M reichen nur für eine kleine DB, 20 Verbindungen sind viel mit dem, was Sie konfiguriert haben.
1) Reduziere deine maximalen Verbindungen auf 4 (du verwendest 3 von 20)
2) Optimieren Sie Ihren Abfrage-Cache besser; 8 Millionen sind wirklich groß, und insgesamt 64 Millionen hängen viel von Ihren Hits / Pflaumen ab. Probieren Sie eine 4/32 Combo und sehen Sie, wie es geht. Wirklich denke ich, dass eine 2/24 Kombination für Sie arbeiten würde.
3) Sie haben keine Sortierungen, die temporäre Tabellen erfordern. Warum ist das Verb max_heap_table_size dort? Kommentieren Sie das aus, verwenden Sie die Standardeinstellungen
4) Hast du tatsächlich 128 Tische? Versuchen Sie, diesen table_cache auf 64 oder 48 zu halbieren
5) Reduziere thread_cache_size auf 4
6) Optimieren Sie diese Tabellen, um die Fragmentierung zu reduzieren
Das sind einige Dinge, mit denen man anfangen soll. Es sieht so aus, als hätten Sie eine Reihe von Zahlen in eine Konfiguration geworfen, ohne ein Profil zu erstellen, um zu wissen, was Sie brauchten, und ein Durcheinander verursacht. Wenn alles andere fehlschlägt, kehren Sie zu den Standardeinstellungen zurück, und entfernen Sie Ihre benutzerdefinierten Einstellungen. Beginnen Sie dann erneut mit einigen Anleitungen zur Leistungsoptimierung, die Sie bei Google finden. Holen Sie sich die Ausgabe von SHOW VARIABLES und SHOW STATUS, suchen Sie eine der bajillion Tuning-Anleitungen und fügen Sie Ihre tatsächlichen, reellen Zahlen in ihre Gleichungen ein. Diese geben Ihnen dann die exakten Zahlen an, die Sie in Ihre Konfigurationsdatei einfügen müssen.
quelle
Ich bin kein MySQL-Guru und kann das Problem mit diesen Informationen nicht diagnostizieren, aber ich habe versucht, nach der Formel im Quellcode zu suchen. Hier ist es:
Wo:
und:
Jetzt müssen Sie jeden dieser Werte überprüfen und herausfinden, welcher für diese große Zahl verantwortlich ist. Und vertraue diesem Skript nicht vorbehaltlos - ich habe versucht, es auf einem meiner DB-Server auszuführen, und es hat berechnet, dass der maximale Arbeitsspeicher 140% des gesamten physischen Arbeitsspeichers beträgt, aber das System wird seit Jahren ohne Stabilitätsprobleme ausgeführt.
Viel Glück!
quelle
Wenn ich mich richtig erinnere, verwendet MySQL Tuner die folgende Formel, um die maximale Nutzung zu schätzen:
Denken Sie daran, dass dies nicht zu 100% korrekt ist, sondern lediglich eine Schätzung darstellt, da bestimmte Einstellungen in MySQL keine definierten Grenzen haben.
Sie können beginnen, einige Einstellungen in Ihrer Konfigurationsdatei abzuschwächen und den Tuner erneut auszuführen. Ich würde jedoch raten, die Hilfe eines Experten in Anspruch zu nehmen, wenn Sie keine Zeit haben, my.cnf zu ändern, ihn neu zu starten und den Tuner auszuführen.
quelle
Durch die Verwendung der Software mysqlcalculator.com können Sie viele Stunden sparen.
quelle