Script macht Optimierungsvorschläge. Einstellungen muss man in der
my.cnf sebst eintragen. SQL zu optimieren benötigt etwas Zeitaufwand und ist auch von der PHP Anwendung selbst abhängig.
Wie soll die /etc/my.cnf aussehen?
Bei vServern/rootDS mit wenig RAM sollte man mit kleinen Werten beginnen und dann
/usr/bin/tuning-primer.sh laufen lassen
Beispiel my.cnf
Code:
[mysqld]
key_buffer = 2M
sort_buffer_size = 32K
myisam_sort_buffer_size = 32K
read_buffer_size = 16K
read_rnd_buffer_size = 32K
query_cache_size = 2M
thread_cache = 8
table_cache = 512
max_connections = 20
low_priority_updates = 1
long_query_time = 2
mit tuning-primer.sh beobachten wir nun das Verhalten von MySQL und fügen bei Bedarf in der
my.cnf neue Variables hinzu oder ändern deren Werte. Eine Datenbank ist dynamisch d.h. Tabellen werden mit der Zeit grösser. Daher sollte man tuning-primer.sh regelmässig laufen lassen z.B. jede Woche.
Ausgabe Beispiel:
Code:
MEMORY USAGE
Max Memory Ever Allocated : 8 M #momentan benutzt
Configured Max Per-thread Buffers : 25 M
Configured Max Global Buffers : 4 M
Configured Max Memory Limit : 30 M #maximal nutzbar
Total System Memory : 1 G
Configured Max Memory Limit, also wieviel RAM man maximal MySQL zur Verfügung stellen will, errechnet sich vereinfacht aus
key_buffer + (sort_buffer + read_buffer) x max_connections = RAM
Beispiel:
wir wollen MySQL 512 MB zur Verfügung stellen.
key_buffer = 128M + (read_buffer = 4M + sort_buffer = 4 M) x max_connections = 512 MB
128 + (4 + 4) x max_connections = 512
wir stellen die Formel nach max_connections um
max_connections = (RAM - key_buffer) : (read_buffer + sort_buffer)
max connections = (512 - 128) : (4 + 4)
max_connections = 384 : 8
max_connections = 48
benötigen wir mehr als 48 max_connections, müssen wir mehr RAM zur Verfügung stellen oder read_buffer und sort_buffer kleiner machen.
Regel
je weniger RAM zur Verfügung steht und je mehr max_connections benötigt werden, desto kleiner müssen read_buffer, sort_buffer u. key_buffer sein.