Das Ausführen von MySQL mit optimalen Einstellungen für bestimmte Ressourcen hilft bei der Bewältigung größerer Serverlasten und verhindert eine Verlangsamung des Servers. Im Allgemeinen ist es nach der Anpassung von Apache zur Bewältigung größerer Lasten vorteilhaft, MySQL auf zusätzliche Verbindungen abzustimmen.
Die Datenbankoptimierung ist ein umfangreiches Thema, und dieses Handbuch behandelt nur die Grundlagen der Bearbeitung Ihrer MySQL-Konfiguration. Große MySQL-Datenbanken können eine beträchtliche Menge an Arbeitsspeicher benötigen. Aus diesem Grund empfehlen wir für solche Setups die Verwendung eines High Memory Linode.
Hinweis Die Schritte in diesem Handbuch erfordern Root-Rechte. Stellen Sie sicher, dass Sie die folgenden Schritte als root ausführen oder mit dem sudo
Präfix. Weitere Informationen zu Berechtigungen finden Sie in unserem Leitfaden für Benutzer und Gruppen.
Tools, die bei der Optimierung von MySQL helfen können
Um festzustellen, ob Ihre MySQL-Datenbank neu konfiguriert werden muss, sehen Sie sich am besten an, wie Ihre Ressourcen jetzt funktionieren. Dies kann mit dem Top-Befehl oder mit dem LinodeLongview-Dienst erfolgen. Zumindest sollten Sie sich mit der RAM- und CPU-Auslastung Ihres Servers vertraut machen, die Sie mit diesen Befehlen ermitteln können:
echo [PID] [MEM] [PATH] && ps aux | awk '{print $2, $4, $11}' | sort -k2rn | head -n 20
ps -eo pcpu,pid,user,args | sort -k 1 -r | head -20
MySQLTuner
Das Skript MySQLTuner bewertet Ihre MySQL-Installation und gibt dann Vorschläge zur Steigerung der Leistung und Stabilität Ihres Servers aus.
-
Laden Sie das MySQLTuner-Skript herunter:
wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/mysqltuner.pl
-
Ändern Sie die Skriptberechtigungen so, dass sie ausführbar sind:
chmod +x mysqltuner.pl
-
Führen Sie
mysqltuner.pl
aus Skript. Sie werden aufgefordert, Ihren MySQL-Administrator-Login und Ihr Passwort einzugeben:./mysqltuner.pl
-
Das Skript gibt Ergebnisse zurück, die der folgenden Ausgabe ähneln:
MySQLTuner bietet Vorschläge zur Verbesserung der Datenbankleistung. Wenn Sie vorsichtig sind, Ihre Datenbank selbst zu aktualisieren, ist das Befolgen der Vorschläge von MySQLTuner eine der sichereren Möglichkeiten, Ihre Datenbankleistung zu verbessern.>> MySQLTuner 1.4.0 - Major Hayden <[email protected]> >> Bug reports, feature requests, and downloads at http://mysqltuner.com/ >> Run with '--help' for additional options and output filtering Please enter your MySQL administrative login: root Please enter your MySQL administrative password: [OK] Currently running supported MySQL version 5.5.41-0+wheezy1 [OK] Operating on 64-bit architecture -------- Storage Engine Statistics ------------------------------------------- [--] Status: +ARCHIVE +BLACKHOLE +CSV -FEDERATED +InnoDB +MRG_MYISAM [--] Data in InnoDB tables: 1M (Tables: 11) [--] Data in PERFORMANCE_SCHEMA tables: 0B (Tables: 17) [!!] Total fragmented tables: 11 -------- Security Recommendations ------------------------------------------- [OK] All database users have passwords assigned -------- Performance Metrics ------------------------------------------------- [--] Up for: 47s (113 q [2.404 qps], 42 conn, TX: 19K, RX: 7K) [--] Reads / Writes: 100% / 0% [--] Total buffers: 192.0M global + 2.7M per thread (151 max threads) [OK] Maximum possible memory usage: 597.8M (60% of installed RAM) [OK] Slow queries: 0% (0/113) [OK] Highest usage of available connections: 0% (1/151) [OK] Key buffer size / total MyISAM indexes: 16.0M/99.0K [!!] Query cache efficiency: 0.0% (0 cached / 71 selects) [OK] Query cache prunes per day: 0 [OK] Temporary tables created on disk: 25% (54 on disk / 213 total) [OK] Thread cache hit rate: 97% (1 created / 42 connections) [OK] Table cache hit rate: 24% (52 open / 215 opened) [OK] Open file limit used: 4% (48/1K) [OK] Table locks acquired immediately: 100% (62 immediate / 62 locks) [OK] InnoDB buffer pool / data size: 128.0M/1.2M [OK] InnoDB log waits: 0 -------- Recommendations ----------------------------------------------------- General recommendations: Run OPTIMIZE TABLE to defragment tables for better performance Enable the slow query log to troubleshoot bad queries Variables to adjust: query_cache_limit (> 1M, or use smaller result sets)
MySQL optimieren
Achten Sie beim Ändern der MySQL-Konfiguration auf die Änderungen und deren Auswirkungen auf Ihre Datenbank. Selbst wenn Sie den Anweisungen von Programmen wie MySQLTuner folgen, ist es am besten, den Vorgang zu verstehen.
Die MySQL-Konfigurationsdatei, die an folgendem Speicherort gespeichert ist:/etc/mysql/my.cnf
.
HinweisErstellen Sie vor dem Aktualisieren Ihrer MySQL-Konfiguration eine Sicherungskopie der
my.cnf
Datei:cp /etc/mysql/my.cnf ~/my.cnf.backup
Best Practice empfiehlt, dass Sie kleine Änderungen einzeln vornehmen und dann den Server nach jeder Änderung überwachen. Sie sollten MySQL nach jeder Änderung neu starten:
Für Distributionen, die systemd verwenden:
systemctl restart mysqld
Für Distributionen mit unterschiedlichen Init-Systemen:
service mysql restart
Beim Ändern von Werten in
my.cnf
vergewissern Sie sich, dass die zu ändernde Zeile nicht mit der Raute (#
) Präfix.
Schlüsselpuffer
Ändern des key_buffer
weist MySQL mehr Speicher zu, was Ihre Datenbanken erheblich beschleunigen kann, vorausgesetzt, Sie haben den Speicher frei. Der key_buffer
Die Größe sollte im Allgemeinen nicht mehr als 25 Prozent des Systemspeichers beanspruchen, wenn die MyISAM-Tabellen-Engine verwendet wird, und bis zu 70 Prozent für InnoDB. Wenn der Wert zu hoch eingestellt ist, werden Ressourcen verschwendet.
Laut MySQL-Dokumentation wird für Server mit 256 MB (oder mehr) RAM mit vielen Tabellen eine Einstellung von 64 MB empfohlen. Server mit 128 MB RAM und weniger Tabellen können auf 16 MB, den Standardwert, eingestellt werden. Bei Websites mit noch weniger Ressourcen und Tabellen kann dieser Wert niedriger eingestellt werden.
max_allowed_packet
Mit diesem Parameter können Sie die maximale Größe eines sendbaren Pakets festlegen. Ein Paket ist ein einzelner SQL-Status, eine einzelne Zeile, die an einen Client gesendet wird, oder ein Protokoll, das von einer Quelldatenbank an ein Replikat gesendet wird. Wenn Sie wissen, dass Ihr MySQL-Server große Pakete verarbeiten wird, erhöhen Sie diese am besten auf die Größe Ihres größten Pakets. Sollte dieser Wert zu klein eingestellt werden, erhalten Sie einen Fehler in Ihrem Fehlerprotokoll.
thread_stack
Dieser Wert enthält die Stapelgröße für jeden Thread. MySQL berücksichtigt den Standardwert des thread_stack
variabel ausreichend für normalen Gebrauch; sollte jedoch ein Fehler bezüglich des thread_stack
auftreten protokolliert werden, diese kann erhöht werden.
thread_cache_size
Wenn thread_cache_size
„ausgeschaltet“ (auf 0 gesetzt) ist, muss für jede neue Verbindung, die hergestellt wird, ein neuer Thread erstellt werden. Beim Lösen der Verbindungen wird das Gewinde zerstört. Andernfalls legt dieser Wert die Anzahl nicht verwendeter Threads fest, die in einem Cache gespeichert werden, bis sie für eine Verbindung verwendet werden müssen. Im Allgemeinen hat diese Einstellung nur geringe Auswirkungen auf die Leistung, es sei denn, Sie erhalten Hunderte von Verbindungen pro Minute. Zu diesem Zeitpunkt sollte dieser Wert erhöht werden, damit die meisten Verbindungen über zwischengespeicherte Threads hergestellt werden können.
max_connections
Dieser Parameter legt die maximale Menge an gleichzeitigen fest Verbindungen. Es ist am besten, die maximale Anzahl von Verbindungen zu berücksichtigen, die Sie in der Vergangenheit hatten, bevor Sie diese Zahl festlegen, damit Sie einen Puffer zwischen dieser oberen Zahl und den max_connections
haben Wert. Beachten Sie, dass dies nicht die maximale Anzahl von Benutzern angibt auf Ihrer Website zu einem Zeitpunkt; vielmehr zeigt es die maximale Anzahl von Benutzern, die Anfragen stellen gleichzeitig.
table_cache
Dieser Wert sollte höher gehalten werden als Ihre open_tables
Wert. Um diesen Wert zu ermitteln, verwenden Sie:
| |
Weitere Informationen
Weitere Informationen zu diesem Thema finden Sie in den folgenden Ressourcen. Obwohl diese in der Hoffnung bereitgestellt werden, dass sie nützlich sind, beachten Sie bitte, dass wir nicht für die Genauigkeit oder Aktualität extern gehosteter Materialien garantieren können.
- MySQL-Dokumentationsbibliothek
- MySQL-Tuning-Server-Parameter
- MySQLTuner