Tuning Script

Timkom

New Member
Hallo Leute,

habe das primer tuning script nun für fast 7 Tage laufen lassen. Was könnte ich noch verbessern. Bin für jeden Vorschlag dankbar..

Gruß,

Tim

MySQL Version 5.0.18-Max-log i686

Uptime = 6 days 18 hrs 17 min 57 sec
Avg. qps = 18
Total Questions = 10636813
Threads Connected = 3

Server has been running for over 48hrs.
It should be safe to follow these recommendations

To find out more information on how each of these
runtime variables effects performance visit:
MySQL AB :: MySQL 5.0 Reference Manual :: 5.1.3 System Variables

SLOW QUERIES
Current long_query_time = 3 sec.
You have 3587 out of 10636813 that take longer than 3 sec. to complete
The slow query log is enabled.
Your long_query_time seems to be fine

MAX CONNECTIONS
Current max_connections = 130
Current threads_connected = 3
Historic max_used_connections = 22
The number of used connections is 16% of the configured maximum.
Your max_connections variable seems to be fine.

WORKER THREADS
Current thread_cache_size = 12
Current threads_cached = 10
Current threads_per_sec = 0
Historic threads_per_sec = 0
Your thread_cache_size is fine

MEMORY USAGE
/usr/bin/tuning.sh: line 994: let: expression expected
Max Memory Ever Allocated : 252 M
Configured Max Memory Limit : 502 M
Total System Memory : 5078 M

KEY BUFFER
Current MyISAM index space = 23 M
Current key_buffer_size = 128 M
Key cache miss rate is 1 / 8692
Key buffer fill ratio = 15.00 %
Your key_buffer_size seems to be too high.
Perhaps you can use these resources elsewhere

QUERY CACHE
Query cache is enabled
Current query_cache_size = 64 M
Current query_cache_used = 20 M
Current Query cache fill ratio = 31.50 %

SORT OPERATIONS
Current sort_buffer_size = 2 M
Current record/read_rnd_buffer_size = 256.00 K
Sort buffer seems to be fine

JOINS
Current join_buffer_size = 128.00 K
You have had 153091 queries where a join could not use an index properly
You should enable "log-queries-not-using-indexes"
Then look for non indexed joins in the slow query log.
If you are unable to optimize your queries you may want to increase your
join_buffer_size to accommodate larger joins in one pass.

TABLE CACHE
Current table_cache value = 1412 tables
You have a total of 631 tables
You have 1105 open tables.
The table_cache value seems to be fine

TEMP TABLES
Current tmp_table_size = 32 M
57% of tmp tables created were disk based
Perhaps you should increase your tmp_table_size

TABLE SCANS
Current read_buffer_size = 128.00 K
Current table scan ratio = 182 : 1
read_buffer_size seems to be fine

TABLE LOCKING
Current Lock Wait ratio = 1 : 182
You may benefit from selective use of InnoDB.
 
wieviel RAM hat der Server?

Ändern würde ich:
Code:
[mysqld]

key_buffer = 32M
net_buffer_length = 8K

sort_buffer_size = 256K
myisam_sort_buffer_size = 256K
read_buffer_size = 128K
read_rnd_buffer_size = 256K
join_buffer_size = 1M

query_cache_size = 32M
thread_cache = 12 oder 24
table_cache = 1280

max_connections = 130
low_priority_updates = 1
long_query_time = 2

wichtig sind
Code:
Max Memory Ever Allocated : 252 M
Configured Max Memory Limit : 502 M
und sollten dem RAM vom Server angepasst sein. Hat man für MySQL nur 50 MB zur Verfügung, sollte Configured Max Memory Limit auch nur 50 M sein.

Um den RAM Verbrauch zu mindern kann man die buffers/caches kleiner machen oder die max_connections kleiner machen. Du hast ja max_connections = 130. Daraus resultieren dann auch die 502 M bei Max Memory Limit. Tatsächlich wurden aber bisher max 252 M benötigt da du ja auch nur 22 Historic Max Used Connections hattest.

Wenn dein Server 1 GB RAM hat, würde ich in der servertuning.conf einstellen
Code:
Timeout 30
KeepAlive On
MaxKeepAliveRequests 150
KeepAliveTimeout 2

<IfModule prefork.c>
StartServers       1
MinSpareServers    2
MaxSpareServers    5
ServerLimit       40
[COLOR="Red"]MaxClients        40[/COLOR]
MaxRequestsPerChild  4000

und in der my.cnf die
Code:
max_connections = 40
wie bei MaxClients setzen. Apache kann dann 40 Seitenaufrufe gleichzeitig handhaben.

Generall könnte man ja sagen:

Laut Tuning Primer Script hattest du max 22 MySQL Connections gleichzeitig. Nun könnte man behaupten, die max_connections werden wohl nicht mehr werden. Darum können wir Apache so konfigurieren, daß Apache auch lediglich 22 'Connections' handhaben muß, also MaxClients 22

Apache würde dann ~ 22 x 15 MB = 330 MB RAM verbrauchen und für MySQL hätte man dann bei 1 GB RAM ~ 520 MB zur Verfügung. Damit lassen sich sehr große buffers/caches machen.

Nur was nutzt es, wenn man key_buffer 128M hat, tatsächlich aber nur 18M benötigt werden? Dann lieber die buffers/caches so klein machen wie man sie benötigt und dafür die max_connections und MaxClients höher machen.

Regel:

Je mehr gleichzeitige Seitenaufrufe man hat (max_connections, MaxClients), desto kleiner müssen die buffers/caches werden damit der RAM nicht ausgeht.

Anleitung:

man muß Apache und MySQL RAM zuweisen, also ein Limit setzen. Dazu ermittelt man den RAM Verbrauch eines Tasks (Child) mit
Code:
ps -ylC httpd --sort:rss
oder
Code:
ps axu --sort:command
RSS in KB

Hat der Server 1 GB RAM, ziehen wir pauschal ~ 150 MB für Linux, Plesk, Dr. Web, Spamassassin, ect. ab. (im Einzalfall sollten man den RAM Verbrauch von Plesk ect. selbst ermitteln).

1024 MB - 150 MB = 874 MB

MySQL weisen wir ~ 100 MB zu, bleiben für Apache noch 774 MB RAM. Diese teilen wir nun durch 15 MB (RSS Wert), also 774 : 15 = 50 MaxClienst (servertuning.conf).

In der my.cnf setzen wir die max_connections auch auf 50 und machen die buffers/caches und Variables so groß, das Configured Max Memory Limit 100M nicht überschritten wird.

Haben wir laut Tuning Primer Script zu kleinen key_buffer oder join_buffer ect. sollten wir diesen erhöhen! Da wir dann aber die 100M überschreiten, müssen wir die MaxClients (servertuning.conf) und max_connetions (my.cnf) reduzieren, z.B. von 50 auf 49 oder 48.
 
Last edited by a moderator:
Back
Top