MySQL Performance Tuning mit Tuning-Primer.sh Script

ob es eine Internetseite gibt, die verschiedenen "Variablen" bereits ins Deutsche übersetzt hat.
Siehe Seite 1-3 in diesem Thread.

Jedoch kannst Du, wenn Du magst, bereits anhand meiner Auswertung ein paar Empfehlungen sprechen? ;)
Ja, sobald Du die (verstandenen) Empfehlungen vom tuning-primer umgesetzt hast, wieder 48 Stunden gewartet hast und dann das Script nochmal laufen gelassen hast.

huschi.
 
Hallo zusammen,

was bedeutet dieser/e Blo(e)cke hier:

INNODB STATUS
Current InnoDB index space = 15 M
Current InnoDB data space = 8 M
Current InnoDB buffer pool free = 0 %
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 memory

MEMORY USAGE
Max Memory Ever Allocated : 47 M
Configured Max Per-thread Buffers : 262 M
Configured Max Global Buffers : 19 M
Configured Max Memory Limit : 281 M
Physical Memory : 1.96 G
Max memory limit seem to be within acceptable norms
 
Bei InnoDB steht, dass Dein Buffer-Pool von 8M ständig voll ist. Dies ist ein Zeichen dafür, dass er wahrscheinlich nicht groß genug dimensioniert ist um die Queries schnell auszuführen.
Oder anderes ausgedrückt: Hier wäre Potenzial zur Performance-Steigerung wenn Du mehr RAM einstellen würdest.

Der zweite Block ist rein Informativ:
Die Configured-Max-Werte ergeben sich, wenn man die Einstellungen (Buffers, etc.) bei maximaler Ausnutzung zusammen rechnet. (Also die Theorie.)
Max-Ever ist ein statistischer Wert. (Also die Praxis.)
Der Physical-Memory ergibt sich aus der verbauten Hardware.

Hier lässt sich also ablesen, ob man im Zweifelsfall weit über den Hardware-Speicher hinaus konfiguriert hat und wie die Auslastung in der Realität aussieht.

huschi.
 
Hi,

danke erstmal. Und vielleicht noch etwas zu diesen Teilen:

Code:
JOINS
Current join_buffer_size = 132.00 K
You have had 3657 queries where a join could not use an index properly
You have had 7 joins without keys that check for key usage after each row
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.

Note! This script will still suggest raising the join_buffer_size when
ANY joins not using indexes are found.

und dieser Teil:

Code:
TEMP TABLES
Current max_heap_table_size = 16 M
Current tmp_table_size = 32 M
Of 973109 temp tables, 30% were created on disk
Effective in-memory tmp_table_size is limited to max_heap_table_size.
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.
 
Last edited by a moderator:
Current join_buffer_size = 132.00 K
Der kann ruhig in den MB-Bereich gelegt werden. Gerade, wenn Du große Tabellen hast.
You have had 3657 queries where a join could not use an index properly
Hier stimmt an einer kleinen Stelle das Datenbank-Modell nicht.
Da Du aber relativ viel (~1700) Tabellen hast, nehme ich an, dass Du wahrscheinlich nicht viel Einfluss darauf haben wirst. Außerdem fällt die Zahl im Verhältnis zu Total-Questions relativ gering aus.

Current max_heap_table_size = 16 M
Current tmp_table_size = 32 M
Es gibt Leute die die feste Meinung vertreten dass diese Werte identisch sein sollten. Ich bin eher ein Anhänger der tmp_table_size < max_heap_table_size.
Der umgekehrte Fall - wie hier - ist aber definitiv falsch. Denn tmp_table_size wird automatisch auf 16M reduziert.

huschi.
 
<Moderation>
Bitte nicht diesen Thread eskalieren lassen.
Ich denke Riddler wird bereits verstanden haben, dass er sich im Ton vergriffen hat und daher zu diesem Zeitpunkt keine weitere Hilfe erwarten kann.
Abgesehen davon stehen seine Antworten bereits auf den anderen 16 Seiten dieses Threads den er nun sicherlich fleißig lesen wird.
</Moderation>

huschi.
 
Kann die Datei weder auf meinen Home PC noch auf den Server laden. Die Webseite von denen ist anscheinend nicht erreichbar...

Hat die Datei noch jemand rumliegen und könnte sie mir schicken?
 
Absolute Performance Probleme

Hallo,

dank Google bin ich hier bei euch im Forum gelandet.
Ich habe ein Riesen-Problem mit unserem Webshop der zur Zeit ca. 240000 Artikel hat, die DB läuft bei Hosteurope, jedenfalls ist die Abfrage sehr sehr langsam was meines Erachtens an den Einstellungen von MySQL liegt.

Als Shop-System läuft XTC-Modified, ich muss auch öfters mehrere neue 10.000 Aktualisierungen einspielen aber das geht im Moment nur schlecht aufgrund der MySQL - Einstellungen



Ich hab bereit das Tuning-Primer.sh Script ausgeführt und folgender Inhalt wurde mir ausgespuckt

Code:
	-- MYSQL PERFORMANCE TUNING PRIMER --
	     - By: Matthew Montgomery -

MySQL Version 5.0.51a-3ubuntu5.8 x86_64

Uptime = 0 days 9 hrs 12 min 54 sec
Avg. qps = 22
Total Questions = 738193
Threads Connected = 1

Warning: Server has not been running for at least 48hrs.
It may not be safe to use these recommendations

To find out more information on how each of these
runtime variables effects performance visit:
http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html
Visit http://www.mysql.com/products/enterprise/advisors.html
for info about MySQL's Enterprise Monitoring and Advisory Service

SLOW QUERIES
The slow query log is NOT enabled.
Current long_query_time = 10 sec.
You have 102 out of 738214 that take longer than 10 sec. to complete
Your long_query_time seems to be fine

BINARY UPDATE LOG
The binary update log is NOT enabled.
You will not be able to do point in time recovery
See http://dev.mysql.com/doc/refman/5.0/en/point-in-time-recovery.html

WORKER THREADS
Current thread_cache_size = 8
Current threads_cached = 5
Current threads_per_sec = 0
Historic threads_per_sec = 0
Your thread_cache_size is fine

MAX CONNECTIONS
Current max_connections = 100
Current threads_connected = 1
Historic max_used_connections = 6
The number of used connections is 6% of the configured maximum.
You are using less than 10% of your configured max_connections.
Lowering max_connections could help to avoid an over-allocation of memory
See "MEMORY USAGE" section to make sure you are not over-allocating

INNODB STATUS
Current InnoDB index space = 1 M
Current InnoDB data space = 2 M
Current InnoDB buffer pool free = 0 %
Current innodb_buffer_pool_size = 2 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 memory

MEMORY USAGE
Max Memory Ever Allocated : 50 M
Configured Max Per-thread Buffers : 262 M
Configured Max Global Buffers : 34 M
Configured Max Memory Limit : 297 M
Physical Memory : 1.00 G
Max memory limit seem to be within acceptable norms

KEY BUFFER
Current MyISAM index space = 40 M
Current key_buffer_size = 16 M
Key cache miss rate is 1 : 206
Key buffer free ratio = 19 %
You could increase key_buffer_size
It is safe to raise this up to 1/4 of total system memory;
assuming this is a dedicated database server.

QUERY CACHE
Query cache is enabled
Current query_cache_size = 16 M
Current query_cache_used = 9 M
Current query_cache_limit = 1 M
Current Query cache Memory fill ratio = 57.94 %
Current query_cache_min_res_unit = 4 K
MySQL won't cache query results that are larger than query_cache_limit in size

SORT OPERATIONS
Current sort_buffer_size = 2 M
Current read_rnd_buffer_size = 256 K
Sort buffer seems to be fine

JOINS
Current join_buffer_size = 132.00 K
You have had 810 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.

Note! This script will still suggest raising the join_buffer_size when
ANY joins not using indexes are found.

OPEN FILES LIMIT
Current open_files_limit = 1024 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 fine

TABLE CACHE
Current table_cache value = 64 tables
You have a total of 262 tables
You have 64 open tables.
Current table_cache hit rate is 3%
, while 100% of your table cache is in use
You should probably increase your table_cache

TEMP TABLES
Current max_heap_table_size = 16 M
Current tmp_table_size = 32 M
Of 10751 temp tables, 36% were created on disk
Effective in-memory tmp_table_size is limited to max_heap_table_size.
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 = 128 K
Current table scan ratio = 19992 : 1
You have a high ratio of sequential access requests to SELECTs
You may benefit from raising read_buffer_size and/or improving your use of indexes.

TABLE LOCKING
Current Lock Wait ratio = 1 : 395
You may benefit from selective use of InnoDB.
If you have long running SELECT's against MyISAM tables and perform
frequent updates consider setting 'low_priority_updates=1'
If you have a high concurrency of inserts on Dynamic row-length tables
consider setting 'concurrent_insert=2'.

Jetzt verratet mir bitte mal wo ich was anpassen soll?
 
Ich bin es eigentlich Leid. Jeder der lesen kann, sollte anhand der Ausgabe und Tipps des Scriptes und den Hinweisen aus diesem Thread zumindest die Basis-Parameter hinbekommen.
Daher heute nur Stichworte:
- innodb_buffer_pool_size
- key_buffer_size
- join_buffer_size
- table_cache und open_files_limit

huschi.
 
Hallo,
ich würde ja hier erstmal mit dem lesen beginnen.

Uptime = 0 days 9 hrs 12 min 54 sec
Avg. qps = 22
Total Questions = 738193
Threads Connected = 1

Warning: Server has not been running for at least 48hrs.
It may not be safe to use these recommendations

Danach kannst du Huschi's Rat folgen ;-)

Gruß
 
Optimieren würde ich einen Server nur wenn sich z.B. der Seitenaufbau deutlich verlangsamt hat. Solange alles rund läuft kann man sich die Arbeit sparen.

Nutzt mann Apache Web Server und MySQL sollte man mit der Optimierung bei Apache beginnen (Punkt 1 und Punkt 5).

Apache und MySQL optimieren

Wenn man tiefer einsteigen möchte kann man sich die Punkte 2 - 4 vornehmen und Apache bzw. MySQL bezüglich RAM Verbrauch optimieren.
 
Back
Top