MySQL Tuning leicht gemacht – Datenbank optimieren mit Tuning Primer Tool
Als Admin hat man es mit Datenbanken nicht immer einfach, vor allem dann, wenn eine Datenbank nicht unbedingt zum eigenen Fachgebiet gehört. Natürlich kann man sich etwas einlesen und die MySQL Datenbank nach ein paar Anhaltspunkten über die my.conf konfigurieren – ob jedoch diese Einstellungen genau für die eigene Umgebung richtig sind – ist ein anderes Thema.
Denn nicht jede MySQL Umgebung ist gleich – jeder benutzt die Datenbank auf andere Art und Weise und so kann man mit etwas Fine Tuning schon noch etwas mehr Leistung aus der eigenen Umgebung zaubern. Doch was macht man, wenn einem die nötige Erfahrung fehlt und man nicht alle Parameter im Kopf hat, bzw. nicht alle möglichen Abfragen über welche man die Performance fest stellen kann kennt? Klar kann man sich dann richtig tief in die Datenbank einarbeiten um alle Abfragen und Ausgaben der Datenbank zu optimieren! Viel einfacher geht es jedoch mit einem kleinem Programm, welches Euch sagt, welche Möglichkeiten der Optimierung einen Sinn machen und was man verbessern könnte.
Das kleine Script welche ich Euch hier zeigen möchte ist übrigens direkt von den Jungs, welche auch die MySQL Datenbank programmieren und die sollten ja wissen, wo man am einfachsten etwas verbessern kann.
Das kleine Tool findet ihr hier!
Aber im Prinzip könnt ihr auch direkt meinem kleinem HowTo folgen!
Zuerst verbindet ihr Euch mit SSH auf Euren Server auf dem die Datenbank läuft.
Schritt 1: In das Verzeichnis wechseln in welchem das Script ausgeführt werden soll:
cd /user/bin
Schritt 2: Download des tuning-primer.sh Scriptes
wget http://www.day32.com/MySQL/tuning-primer.sh
Schritt 3: Zugriffsrechte setzen
chmod 755 tuning-primer.sh
Schritt 4: Script ausführen
./tuning-primer.sh
Fertig!! Jetzt wird Euch eine Auflistung der Einstellungen angezeigt und Euch dazu Tipps geliefert, wie man etwas verbessern könnte. Diesen Anweisungen solltet ihr nun einfach folgen und schon habt ihr eine optimierte Datenbank laufen! Die Änderungen werden in der my.cnf der MySQL Datenbank vorgenommen – aber zumindest dies solltet ihr ja wissen.
TIPP: Das Script solltet ihr zu unterschiedlichen Zeiten ausführen um eventuelle Unterschiede beim Zugriff auf die Datenbank zu sehen.
Hier ein Auszug aus einem Testlauf:
SLOW QUERIES
The slow query log is NOT enabled.
Current long_query_time = 2 sec.
You have 158837 out of 5474288 that take longer than 2 sec. to complete
Your long_query_time seems to be fineBINARY UPDATE LOG
The binary update log is enabledWORKER THREADS
Current thread_cache_size = 128
Current threads_cached = 13
Current threads_per_sec = 0
Historic threads_per_sec = 0
Your thread_cache_size is fineMAX CONNECTIONS
Current max_connections = 120
Current threads_connected = 1
Historic max_used_connections = 14
The number of used connections is 11% of the configured maximum.
Your max_connections variable seems to be fine.INNODB STATUS
Current InnoDB index space = 2 M
Current InnoDB data space = 4 M
Current InnoDB buffer pool free = 4 %
Current innodb_buffer_pool_size = 8 M
Depending on how much space your innodb indexes take up it may be safe
to increase this value to up to 2 / 3 of total system memoryMEMORY USAGE
Max Memory Ever Allocated : 401 M
Configured Max Per-thread Buffers : 1.93 G
Configured Max Global Buffers : 170 M
Configured Max Memory Limit : 2.10 G
Physical Memory : 7.81 G
Max memory limit seem to be within acceptable normsKEY BUFFER
Current MyISAM index space = 201 M
Current key_buffer_size = 128 M
Key cache miss rate is 1 : 1212
Key buffer free ratio = 69 %
Your key_buffer_size seems to be fineQUERY CACHE
Query cache is enabled
Current query_cache_size = 32 M
Current query_cache_used = 23 M
Current query_cache_limit = 1 M
Current Query cache Memory fill ratio = 73.53 %
Current query_cache_min_res_unit = 4 K
MySQL won't cache query results that are larger than query_cache_limit in sizeSORT OPERATIONS
Current sort_buffer_size = 128 K
Current read_rnd_buffer_size = 60 K
Sort buffer seems to be fineJOINS
Current join_buffer_size = 16.00 M
You have had 7082 queries where a join could not use an index properly
join_buffer_size >= 4 M
This is not advised
You should enable "log-queries-not-using-indexes"
Then look for non indexed joins in the slow query log.OPEN FILES LIMIT
Current open_files_limit = 8322 files
The open_files_limit should typically be set to at least 2x-3x
that of table_cache if you have heavy MyISAM usage.
Your open_files_limit value seems to be fineTABLE CACHE
Current table_cache value = 4096 tables
You have a total of 1695 tables
You have 1833 open tables.
The table_cache value seems to be fineTEMP TABLES
Current max_heap_table_size = 100 M
Current tmp_table_size = 100 M
Of 96733 temp tables, 35% were created on disk
Perhaps you should increase your tmp_table_size and/or max_heap_table_size
to reduce the number of disk-based temporary tables
Note! BLOB and TEXT columns are not allow in memory tables.
If you are using these columns raising these values might not impact your
ratio of on disk temp tables.TABLE SCANS
Current read_buffer_size = 60 K
Current table scan ratio = 1232 : 1
read_buffer_size seems to be fineTABLE LOCKING
Current Lock Wait ratio = 1 : 55
You may benefit from selective use of InnoDB.
If you have a high concurrency of inserts on Dynamic row-length tables
consider setting ‚concurrent_insert=2‘.
In Wirklichkeit ist die Sache sogar noch etwas farbiger!
ACHTUNG!
Sollte es beim Ausführen zur Fehlermeldung
Error: "Command line calculator ‚bc‘ not found!"
kommen – so ist BC nicht installiert!
Dies erledigt ihr z.B. unter Debian mittels:
apt-get install bc
So, dies sollte es nun auch schon gewesen sein! Ich wünsche Euch viel Erfolg beim MySQL optimieren / Tuning! Solltet ihr noch Fragen haben, einfach hier einen kleinen Kommentar hinterlassen!
Tags:
- my cnf optimieren grosse datenbank
- mysql datenbank verbessern
- MySQL Optimieren
- tuning primer error: command line calculator c not found!
- tuning-primer sh command line calculator bc not found
Recht interessant diese Sache aber ich traume mich nicht in den WP Datenbanken zu „Spielen“, nicht mal mit solch einem Tool. Kann zu viel schief gehen.
Mal eine Frage. Du bekommst ja die Meldung:
join_buffer_size >= 4 M
This is not advised
Ist das kein Problem? Ich habe nämlich genau die selber Meldung und bin mir nicht sicher, ob das ein Problem ist.