PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : MySQL Einstellungen insb. für Forum optimieren



mark007q
29.06.07, 17:12
Hallo zusammen,

ich habe mir seit ein paar Tagen, nachdem mein Server doch mächtig zu kämpfen hatte, Gedanken zur MySQL Optimierung gemacht.

So kam ich auch dazu den Query Cache zunächst einmal einzuschalten, was erst einmal ein wahres Wunder bewirkte. Ich habe mich zwar nun schon etliche Stunden in die Materie eingelesen, bin mir aber sicher, dass meine jetzigen Werte immer noch nicht das gelbe vom Ei sind.

Mein Server ist der folgende:

AMD Athlon 64 3000+
1 GB Arbeitsspeicher
100 GB Festplatte
SATA Software Raid

Das sind meine jetzigen Werte: (show variables)
-> die fett gedruckten Werte habe ich verändert und auf diese Werte gestellt.

Variable_name Value
back_log 50
basedir /
bdb_cache_size 8388600
bdb_home /var/lib/mysql/
bdb_log_buffer_size 262144
bdb_logdir
bdb_max_lock 10000
bdb_shared_data OFF
bdb_tmpdir /tmp/
binlog_cache_size 32768
bulk_insert_buffer_size 8388608
character_set_client latin1
character_set_connection latin1
character_set_database latin1
character_set_results latin1
character_set_server latin1
character_set_system utf8
character_sets_dir /usr/share/mysql/charsets/
collation_connection latin1_swedish_ci
collation_database latin1_swedish_ci
collation_server latin1_swedish_ci
concurrent_insert ON
connect_timeout 5
datadir /var/lib/mysql/
date_format %Y-%m-%d
datetime_format %Y-%m-%d %H:%i:%s
default_week_format 0
delay_key_write ON
delayed_insert_limit 100
delayed_insert_timeout 300
delayed_queue_size 1000
expire_logs_days 0
flush OFF
flush_time 0
ft_boolean_syntax + -><()~*:""&|
ft_max_word_len 84
ft_min_word_len 4
ft_query_expansion_limit 20
ft_stopword_file (built-in)
group_concat_max_len 1024
have_archive YES
have_bdb YES
have_blackhole_engine YES
have_compress YES
have_crypt YES
have_csv YES
have_example_engine YES
have_geometry YES
have_innodb DISABLED
have_isam NO
have_merge_engine YES
have_ndbcluster NO
have_openssl NO
have_query_cache YES
have_raid YES
have_rtree_keys YES
have_symlink YES
init_connect
init_file
init_slave
innodb_additional_mem_pool_size 1048576
innodb_autoextend_increment 8
innodb_buffer_pool_awe_mem_mb 0
innodb_buffer_pool_size 8388608
innodb_data_file_path
innodb_data_home_dir
innodb_fast_shutdown ON
innodb_file_io_threads 4
innodb_file_per_table OFF
innodb_flush_log_at_trx_commit 1
innodb_flush_method
innodb_force_recovery 0
innodb_lock_wait_timeout 50
innodb_locks_unsafe_for_binlog OFF
innodb_log_arch_dir
innodb_log_archive OFF
innodb_log_buffer_size 1048576
innodb_log_file_size 5242880
innodb_log_files_in_group 2
innodb_log_group_home_dir
innodb_max_dirty_pages_pct 90
innodb_max_purge_lag 0
innodb_mirrored_log_groups 1
innodb_open_files 300
innodb_table_locks ON
innodb_thread_concurrency 8
interactive_timeout 28800
join_buffer_size 131072
key_buffer_size 134217728
key_cache_age_threshold 300
key_cache_block_size 1024
key_cache_division_limit 100
language /usr/share/mysql/english/
large_files_support ON
lc_time_names en_US
license GPL
local_infile OFF
locked_in_memory OFF
log OFF
log_bin OFF
log_error
log_slave_updates OFF
log_slow_queries ON
log_update OFF
log_warnings 1
long_query_time 5
low_priority_updates OFF
lower_case_file_system OFF
lower_case_table_names 0
max_allowed_packet 4193280
max_binlog_cache_size 4294967295
max_binlog_size 1073741824
max_connect_errors 10
max_connections 500
max_delayed_threads 20
max_error_count 64
max_heap_table_size 16777216
max_insert_delayed_threads 20
max_join_size 4294967295
max_length_for_sort_data 1024
max_prepared_stmt_count 16382
max_relay_log_size 0
max_seeks_for_key 4294967295
max_sort_length 1024
max_tmp_tables 32
max_user_connections 25
max_write_lock_count 4294967295
myisam_data_pointer_size 4
myisam_max_extra_sort_file_size 2147483648
myisam_max_sort_file_size 2147483647
myisam_recover_options OFF
myisam_repair_threads 1
myisam_sort_buffer_size 8388608
myisam_stats_method nulls_unequal
net_buffer_length 31744
net_read_timeout 30
net_retry_count 10
net_write_timeout 60
new OFF
old_passwords ON
open_files_limit 2500
pid_file /var/lib/mysql/dd17502.pid
port 3306
preload_buffer_size 32768
prepared_stmt_count 0
protocol_version 10
query_alloc_block_size 8192
query_cache_limit 3145728
query_cache_min_res_unit 4096
query_cache_size 67108864
query_cache_type ON
query_cache_wlock_invalidate OFF
query_prealloc_size 8192
range_alloc_block_size 2048
read_buffer_size 1044480
read_only OFF
read_rnd_buffer_size 262144
relay_log_purge ON
relay_log_space_limit 0
rpl_recovery_rank 0
secure_auth OFF
server_id 0
skip_external_locking ON
skip_networking OFF
skip_show_database OFF
slave_net_timeout 3600
slave_transaction_retries 0
slow_launch_time 2
socket /var/lib/mysql/mysql.sock
sort_buffer_size 8388600
sql_mode
sql_notes ON
sql_warnings ON
storage_engine MyISAM
sync_binlog 0
sync_frm ON
sync_replication 0
sync_replication_slave_id 0
sync_replication_timeout 0
system_time_zone CEST
table_cache 512
table_type MyISAM
thread_cache_size 30
thread_stack 1048576
time_format %H:%i:%s
time_zone SYSTEM
tmp_table_size 33554432
tmpdir
transaction_alloc_block_size 8192
transaction_prealloc_size 4096
tx_isolation REPEATABLE-READ
version 4.1.22-max-log
version_bdb Sleepycat Software: Berkeley DB 4.1.24: (November 3, 2006)
version_comment MySQL Community Edition - Experimental (GPL)
version_compile_machine i686
version_compile_os pc-linux-gnu
wait_timeout 30

Über show status ergibt sich derzeit folgendes:

Aborted_clients 14
Aborted_connects 0
Binlog_cache_disk_use 0
Binlog_cache_use 0
Bytes_received 24761923
Bytes_sent 141704623
Com_admin_commands 0
Com_alter_db 0
Com_alter_table 0
Com_analyze 0
Com_backup_table 0
Com_begin 377
Com_change_db 3762
Com_change_master 0
Com_check 0
Com_checksum 0
Com_commit 377
Com_create_db 0
Com_create_function 0
Com_create_index 0
Com_create_table 0
Com_dealloc_sql 0
Com_delete 247
Com_delete_multi 0
Com_do 0
Com_drop_db 0
Com_drop_function 0
Com_drop_index 0
Com_drop_table 0
Com_drop_user 0
Com_execute_sql 0
Com_flush 92
Com_grant 0
Com_ha_close 0
Com_ha_open 0
Com_ha_read 0
Com_help 0
Com_insert 278
Com_insert_select 0
Com_kill 0
Com_load 0
Com_load_master_data 0
Com_load_master_table 0
Com_lock_tables 1
Com_optimize 0
Com_preload_keys 0
Com_prepare_sql 0
Com_purge 0
Com_purge_before_date 0
Com_rename_table 0
Com_repair 0
Com_replace 353
Com_replace_select 44
Com_reset 0
Com_restore_table 0
Com_revoke 0
Com_revoke_all 0
Com_rollback 0
Com_savepoint 0
Com_select 40330
Com_set_option 28
Com_show_binlog_events 0
Com_show_binlogs 0
Com_show_charsets 0
Com_show_collations 0
Com_show_column_types 0
Com_show_create_db 0
Com_show_create_table 27
Com_show_databases 0
Com_show_errors 0
Com_show_fields 132
Com_show_grants 0
Com_show_innodb_status 0
Com_show_keys 70
Com_show_logs 0
Com_show_master_status 0
Com_show_ndb_status 0
Com_show_new_master 0
Com_show_open_tables 0
Com_show_privileges 0
Com_show_processlist 269
Com_show_slave_hosts 0
Com_show_slave_status 0
Com_show_status 252
Com_show_storage_engines 0
Com_show_tables 97
Com_show_variables 1
Com_show_warnings 0
Com_slave_start 0
Com_slave_stop 0
Com_stmt_close 0
Com_stmt_execute 0
Com_stmt_prepare 0
Com_stmt_reset 0
Com_stmt_send_long_data 0
Com_truncate 0
Com_unlock_tables 1
Com_update 5197
Com_update_multi 0
Connections 4329
Created_tmp_disk_tables 533
Created_tmp_files 0
Created_tmp_tables 6574
Delayed_errors 0
Delayed_insert_threads 0
Delayed_writes 0
Flush_commands 1
Handler_commit 0
Handler_delete 266
Handler_discover 0
Handler_read_first 4153
Handler_read_key 68771653
Handler_read_next 29924132
Handler_read_prev 9465
Handler_read_rnd 881040
Handler_read_rnd_next 1057781324
Handler_rollback 0
Handler_update 6279638
Handler_write 8708754
Key_blocks_not_flushed 0
Key_blocks_unused 82698
Key_blocks_used 33333
Key_read_requests 149625725
Key_reads 45786
Key_write_requests 2080214
Key_writes 3407
Max_used_connections 11
Not_flushed_delayed_rows 0
Open_files 356
Open_streams 0
Open_tables 207
Opened_tables 54
Qcache_free_blocks 1280
Qcache_free_memory 60755056
Qcache_hits 29073
Qcache_inserts 31810
Qcache_lowmem_prunes 0
Qcache_not_cached 8490
Qcache_queries_in_cache 3820
Qcache_total_blocks 9003
Questions 96350
Rpl_status NULL
Select_full_join 0
Select_full_range_join 0
Select_range 3266
Select_range_check 0
Select_scan 8631
Slave_open_temp_tables 0
Slave_retried_transactions 0
Slave_running OFF
Slow_launch_threads 0
Slow_queries 9
Sort_merge_passes 0
Sort_range 3267
Sort_rows 1909738
Sort_scan 9303
Table_locks_immediate 96572
Table_locks_waited 470
Threads_cached 9
Threads_connected 2
Threads_created 11
Threads_running 2
Uptime 6341

Jetzt frage ich mich natürlich, ob meine Änderungen soweit ok sind, oder ob man da noch was verbessern kann. Insbesondere würde mich interessieren, ob 64MB Query Cache nicht zu groß sind und der myisam_sort_buffer_size mit 8MB nicht zu knapp bemessen ist?

Aber auch die anderen Werte, die ich verändert habe oder auch nicht, würden mich interessieren? Sollte man ggf. das ein oder andere noch anders einstellen?

Viele Grüße
Mark

bla!zilla
29.06.07, 18:01
Hast du die fettgedruckten Werte wahllos geändert, oder hast du dir bei den Werten was gedacht, nach dem Motto "Viel hilft viel"?

cane
29.06.07, 18:43
Schau dir die Präsentationen von Chris Köntopp mal an, da sind zumindest zwei die auf die meistgestellten Fragen und generelle Optimierungsstrategien eingehen dabei.

Er hat sehr gute mySQL Skills, hat hier mit unseren Entwicklern mal ein Performancemeeting gemacht.

Weiterhin sind die mySQL Enterprisewerkzeuge nett um einen schnellen grafischen Überblick über den zustand und Optimierungsmöglichkeiten zu bekommen.

Schlussendlich ist jedes Setup sehr spezifisch, ich würde alles erstes mal die "slow queries" loggen um zu schauen wo Bottlenecks sind. Dazu je nach verwendetem Engine-Typ die conf anpassen.

mfg
cane

mark007q
29.06.07, 20:52
Nein, ich habe die fett gedruckten Werte nicht wahllos geändert, sondern mich an diversen Empfehlungen für einen Server, der in etwas meine Ausstattung hat orientiert.

Die Wirkung war bislang schon grandios. Mir sind die Bedeutungen der einzelnen Variablen nun auch bewusst. Aber das Zusammenspiel ist mir noch nicht so klar.

Insbesondere, wie ich ja schon geschrieben habe, stellt sich mir die Frage, ob das query cahce limit mit 3MB nicht evtl. zu hoch angesetzt (oder vielleicht zu wenig) ist oder der query cache Wert von 64MB bei 1 GB Hauptspeicher nicht zu hoch gegriffen?

Ich habe einen managed server, also ist es schwierig mit einer genauen Analyse um auch das letzte Quentchen heraus zu holen, da ich keinen Zugriff auf alles habe.

Aber, wenn ihr vor dem Hintergrund, dass ich ein Forum betreibe und dem Wissen um die technischen Daten meines Servers, eine Einstellung der fett gedruckten Werte vornehmen würdet, welche wären es dann?

Da wäre ich über eine kleine Hilfestellung sehr dankbar.

cane
30.06.07, 07:24
Du hast keinerlei Infos gepostet auf Basis deren man eine qualizifierte Aussage treffen könnte. Bitte poste:

- Plattendurchsatz
- Kumulierte Ausgabe mehrerer vmstat Ausgaben während der Zeit in der Spitzenlast auftritt.
- CPU- und RAM- Auslastung etc. über einen Zitraum von mindestens 24h (munin)
- Tabellentypen, Indexgrößen etc.
- slow-queries
-Verwendete Engines
- Verwendete Versionen von Apache, mysql, PHP, allen anderen beteiligten Diensten.
- Configs dieser Dienste
(...)

Auf dieser basis kann man grobe Empfehlungen geben - alles andere ist aus der luft gegriffen und damit Unsinn.

Lies bitte zuerst die von mir genannten Folien bevor Du weiter Fragen stellst - da steht alles sehr gut erklärt und zusammengefasst drin.

mfg
cane

mark007q
30.06.07, 08:30
Ich habe einen managed server, also ist es schwierig mit einer genauen Analyse um auch das letzte Quentchen heraus zu holen, da ich keinen Zugriff auf alles habe.

Das ist das Problem, daher weiß ich die genauen Daten nicht. Ich habe jedoch gesehen, dass unabhängig von den weiteren Infos zum Server, meine bisherigen Änderungen einen so deutlichen Performance Gewinn brachten, dass die Leitung zuvor und danach wie Tag und Nacht erschienen.

Kann man denn wirklich nicht basierend auf den Angaben die ich gemacht habe und ausgehend von einem Durschnitts PC mit den obigen Komponenten, insbesondere mit 1GB (Angabe wegen der Speicherausnutzung) grobe Empfehlungen aussprechen?

Kann ich mir ehrlich gesagt kaum vorstellen, denn auch die allgemeine Aussage "mach mal den Query Cache an und setze ihn auf 32MB ist bei egal welchem PC Typ mit 1GB und obiger Taktfrequenz + Platte in jedem Fall besser als den Cache auszuschalten und auch besser als ihn bei 5 MB zu halten.

Das meine ich, es gibt sicherlich allgemeingültige Regeln ohne Detailkenntnis von dem jeweiligen PC.

bla!zilla
30.06.07, 10:43
Performancetuning ist kein Hexenwerk, sondern Wissenschaft. Egal in welchen Bereich der IT. Man dreht ja nicht an ein paar Schrauben und freut sich das es schneller geht. Wenn du ein Problem mit nicht optimierten Queries hast, oder falschen Indizes, dann musst du weniger an dem Querycache basteln, als viel mehr an deinen Abfragen.

cane
30.06.07, 10:45
Das ist das Problem, daher weiß ich die genauen Daten nicht.


So kam ich auch dazu den Query Cache zunächst einmal einzuschalten, was erst einmal ein wahres Wunder bewirkte.

Query Cache ändern geht - Configs einsehen nicht :confused:

Wo steht dein Server? Bei fast allen Hostern die ich kenne können auf Anfrage sowohl Logs versendet, Configs angepasst als auch Programme installiert werden.

Dann schauen wir mal was sich machen lässt...

mfg
cane