MySQL Einstellungen insb. für Forum optimieren

mark007q
Posts: 27
Joined: 2007-06-29 21:53

MySQL Einstellungen insb. für Forum optimieren

Post by mark007q »

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
Last edited by mark007q on 2007-06-29 22:06, edited 1 time in total.
Top

Roger Wilco
Administrator
Administrator
Posts: 6001
Joined: 2004-05-23 12:53

Re: MySQL Einstellungen insb. für Forum optimieren

Post by Roger Wilco »

Schon alle Stickies in diesem Forum gelesen?
mark007q wrote:Das sind meine jetzigen Werte: (show variables)
-> die fett gedruckten Werte habe ich verändert und auf diese Werte gestellt.
Welche fettgedruckten Werte?
Top

mark007q
Posts: 27
Joined: 2007-06-29 21:53

Re: MySQL Einstellungen insb. für Forum optimieren

Post by mark007q »

Die Stickies habe ich mir schon durchgelesen - aber genau aus diesem Grund auch die obigen Fragen in Bezug auf meine Konfiguration dazu. Dort ist ja auch unter show status ggf. eine gewisse Aussagekraft vorhanden, die sich mir als nicht Profi noch verborgen bleibt.

Sorry, da war ich etwas zu schnell mit dem fett Gedruckten :-D

Ich habe die Werte oben im 1. Post nun editiert - sind jetzt fett dargestellt.
Top

mark007q
Posts: 27
Joined: 2007-06-29 21:53

Re: MySQL Einstellungen insb. für Forum optimieren

Post by mark007q »

Wäre toll und ich würde mich echt freuen, wenn sich das mal jemand anschauen könnte.
Top

mark007q
Posts: 27
Joined: 2007-06-29 21:53

Re: MySQL Einstellungen insb. für Forum optimieren

Post by mark007q »

Erst einmal vielen Dank Matthias für deine Überlegungen.

Ich kann leider nicht alle Fragen beantworten, da ich einen managed server habe und daher nur begrenzte Möglichkeiten darauf zuzugreifen, aber ich versuche mal das zu beantworten was ich kann:

- insgesamt habe ich 151 Tabellen
- die meist abgefragte Tabelle hat eine Größe von 67,5 MB (in 1,5 Jahren entstanden - es ist ein Forum, wächst daher weiter an)
- diese Tabelle hat eine Index Größe von ca. 4MB
- die größte Tabelle (der Search Index) hat eine Größe von 195,5 MB bei einer Index Größe von ebenfalls 195,5 MB
- alle anderen Tabllen erreichen meist nicht annähernd 1MB, die drei größten neben den eben genannten sind noch 4, 12 und 19MB groß.
- hauptsächlich so weit ich das sehe finden "select" Abfragen statt
- insgesamt hat die Datenbank eine Größe von 330MB
- alle Tabellen sind im MyIsam Format

Meine jetzigen Werte, die ich verändert habe sind ja die folgenden:

- key_buffer_size 134217728
- myisam_sort_buffer_size 8388608
- query_cache_limit 3145728
- query_cache_size 67108864
- sort_buffer_size 8388600
- table_cache 512
- thread_cache_size 30

Es muss ja kein Feintuning sein, aber könnte man anhand der zusätzlichen Infos von mir sagen, ob man die Werte ggf. verändern sollte? Oder mal anders gefragt: Was würdest du / ihr einstellen, wenn ihr (nur) diese Infos hättet?
Top

User avatar
Joe User
Project Manager
Project Manager
Posts: 11519
Joined: 2003-02-27 01:00
Location: Hamburg

Re: MySQL Einstellungen insb. für Forum optimieren

Post by Joe User »

Verwende bitte mal die my.cnf aus http://www.rootforum.org/forum/viewtop ... 209#233209 und passe lediglich die Pfade an. Wenn der MySQLd mindestens 48 Stunden gelaufen ist, lässt Du das tuning-primer.sh von http://www.day32.com/MySQL/ auf die Datenbank los. Dieses Script gibt Dir dann relativ gute Informationen zum weiteren Tuning des MySQLd.
Top

mark007q
Posts: 27
Joined: 2007-06-29 21:53

Re: MySQL Einstellungen insb. für Forum optimieren

Post by mark007q »

Joe User wrote:Wenn der MySQLd mindestens 48 Stunden gelaufen ist, lässt Du das tuning-primer.sh von http://www.day32.com/MySQL/ auf die Datenbank los.
Mal eine dumme Frage: Ich habe einen managed server bei all-inkl.de (also keinen direkten Zugriff). Das obige Script endet auf .sh

Kann ich das überhaupt ausführen? Wenn ja, wie - z.B. kopieren und mit FileZilla?
Top

User avatar
Joe User
Project Manager
Project Manager
Posts: 11519
Joined: 2003-02-27 01:00
Location: Hamburg

Re: MySQL Einstellungen insb. für Forum optimieren

Post by Joe User »

Ich gehe mal davon aus, dass Du Zugriff per SSH hast:
Du installierst die angepasste my.cnf aus obigem Link, restartest den MySQLd und nach 48 Stunden führst Du folgende Befehle per SSH aus:

Code: Select all

wget http://www.day32.com/MySQL/tuning-primer.sh
chmod 0755 tuning-primer.sh
./tuning-primer.sh
Danach befolgst Du die Tips des Scripts beziehungsweise postest die Ausgabe hier und Jemand von uns hilft Dir beim weiteren Feintuning.
Top

mark007q
Posts: 27
Joined: 2007-06-29 21:53

Re: MySQL Einstellungen insb. für Forum optimieren

Post by mark007q »

Genau das ist das Problem - kein SSH Zugang und auch kein Zugriff auf die Datei. Ich kann aber den zumindest den support jederzeit anweisen die MySQL Werte für mich zu ändern.

Daher auch meine Frage, ob es nicht (ohne jetzt Feintuning zu betreiben) eine Empfehlung geben könnte für:

- key_buffer_size 134217728
- myisam_sort_buffer_size 8388608
- query_cache_limit 3145728
- query_cache_size 67108864
- sort_buffer_size 8388600
- table_cache 512
- thread_cache_size 30
Top

mark007q
Posts: 27
Joined: 2007-06-29 21:53

Re: MySQL Einstellungen insb. für Forum optimieren

Post by mark007q »

Ich habe mit dem Anbieter gesprochen. Kein Problem, er führt das Script per SSH in 3 Tagen aus und sendet mir die Ergebnisse :)

Macht es eigentlich Sinn hinsichtlich der Performance von MySQL 4.1 auf 5 umzusteigen? Ich meine ist die 5er generell schneller als die 4.1er oder ist das "Plus" einfach nur auf die Funktionsvielfalt beschränkt?
Top

User avatar
Joe User
Project Manager
Project Manager
Posts: 11519
Joined: 2003-02-27 01:00
Location: Hamburg

Re: MySQL Einstellungen insb. für Forum optimieren

Post by Joe User »

mark007q wrote:Macht es eigentlich Sinn hinsichtlich der Performance von MySQL 4.1 auf 5 umzusteigen?
IMHO nicht, der Performancegewinn lag bei mir bei ~2%, also unrelevant.
Top

mark007q
Posts: 27
Joined: 2007-06-29 21:53

Re: MySQL Einstellungen insb. für Forum optimieren

Post by mark007q »

Mich würde ja mal interessieren, wie hier die Einstellungen sind - das Rootforum ist so rasant schnell?!
Top

Roger Wilco
Administrator
Administrator
Posts: 6001
Joined: 2004-05-23 12:53

Re: MySQL Einstellungen insb. für Forum optimieren

Post by Roger Wilco »

mark007q wrote:Mich würde ja mal interessieren, wie hier die Einstellungen sind - das Rootforum ist so rasant schnell?!
Lies die Stickies hier im Forum und http://www.rootforum.org/wiki/howto/ge ... rver/mysql
Top

User avatar
Joe User
Project Manager
Project Manager
Posts: 11519
Joined: 2003-02-27 01:00
Location: Hamburg

Re: MySQL Einstellungen insb. für Forum optimieren

Post by Joe User »

MySQL ist gemäss dem von Roger Wilco genannten Wiki-Eintrag konfiguriert. Desweiteren verwenden wir als Basis nicht das phpBB2-Vanilla, sondern eine an unsere Bedürfnisse angepasste CVS-Version des offiziellen Gentoo-Forums. Letztendlich entsprechen also nur noch ~40% des Codes dem original phpBB2.
Top

mark007q
Posts: 27
Joined: 2007-06-29 21:53

Re: MySQL Einstellungen insb. für Forum optimieren

Post by mark007q »

Ich habe vorab doch noch eine Frage:

Bei mir läuft zwar alles sonst ganz ordentlich jetzt, aber mitunter stockt der Server, wenn ich z.B. ein Forumsthema bei mir aufrufe. Soll heißen es passiert folgendes:

Ich rufe ein Thema auf, es stockt - dauert also z.B. 20 Sekunden bis die Seite da ist (sonst normalerweise 1 Sekunde). Gehe ich aber im Browser vorher auf abbrechen und rufe das Thema direkt danach auf, ist es meist sofort wieder da.

Hat eine von obigen Variablen genau darauf Einfluss?
Top

User avatar
Joe User
Project Manager
Project Manager
Posts: 11519
Joined: 2003-02-27 01:00
Location: Hamburg

Re: MySQL Einstellungen insb. für Forum optimieren

Post by Joe User »

Müsste am Caching liegen, d.h. der Query war beim ersten Aufruf noch nicht im Cache und der Result wurde direkt aus der DB geholt, beim zweiten Aufruf kam der Result dann aus dem Cache. Genaueres wird sich in drei Tagen mit dem Output des Scripts sagen lassen...
Top

User avatar
Joe User
Project Manager
Project Manager
Posts: 11519
Joined: 2003-02-27 01:00
Location: Hamburg

Re: MySQL Einstellungen insb. für Forum optimieren

Post by Joe User »

matzewe01 wrote:-> Ein Thema zu öffnen, ist im Regelfall ein - zwei Selects mit einer ID.
Beim RootForum sind es 13-15 Queries pro Thread und würde ohne Caching und die Indexe auch mehrere Sekunden benötigen ;)
Top

braindead
RSAC
Posts: 257
Joined: 2002-10-22 09:49
Location: vorm Rechner

Re: MySQL Einstellungen insb. für Forum optimieren

Post by braindead »

Ich glaube der folgende Link wird dir weiterhelfen:

Lies mich

Tritt dein Problem bei besonders langen Threads auf?
Top

User avatar
Joe User
Project Manager
Project Manager
Posts: 11519
Joined: 2003-02-27 01:00
Location: Hamburg

Re: MySQL Einstellungen insb. für Forum optimieren

Post by Joe User »

braindead wrote:Ich glaube der folgende Link wird dir weiterhelfen:
ACHTUNG: Viele der dort genannten Hacks müssen an phpBB-2.0.22 angepasst werden, was ohne PHP/SQL und phpBB2 Kenntnisse nicht Möglich ist. Desweiteren muss der vollständige Thread gelesen werden, bevor man anfängt am Code zu pfuschen...
Top

braindead
RSAC
Posts: 257
Joined: 2002-10-22 09:49
Location: vorm Rechner

Re: MySQL Einstellungen insb. für Forum optimieren

Post by braindead »

ACHTUNG: Viele der dort genannten Hacks müssen an phpBB-2.0.22 angepasst werden, was ohne PHP/SQL und phpBB2 Kenntnisse nicht Möglich ist. Desweiteren muss der vollständige Thread gelesen werden, bevor man anfängt am Code zu pfuschen...
Naja, also ich denke mal wenn er ein "großes" Board betreibt sollte man diese Fähigkeiten voraussetzen können. Der Hack mit dem viewtopic.php sollte aber leicht machbar sein und genau auf sein Problem passen. Das Gentooboard ist doch sicherlich auf großen Teils nach Lanzers Anweisung gepatcht oder?
Top

User avatar
Joe User
Project Manager
Project Manager
Posts: 11519
Joined: 2003-02-27 01:00
Location: Hamburg

Re: MySQL Einstellungen insb. für Forum optimieren

Post by Joe User »

braindead wrote:Das Gentooboard ist doch sicherlich auf großen Teils nach Lanzers Anweisung gepatcht oder?
Zum Teil, die Gentoo-Jungs haben noch weitere Optimierungen und Erweiterungen vorgenommen:

Code: Select all

cvs -d :pserver:anonymous@anoncvs.gentoo.org/var/cvsroot co gentoo-projects/forums
Top

mark007q
Posts: 27
Joined: 2007-06-29 21:53

Re: MySQL Einstellungen insb. für Forum optimieren

Post by mark007q »

Irgendwie scheint es so, als ob ich nichts mehr mit Code posten kann ... hoffe dieser Post kommt "durch":

EDIT:

Jetzt sind plötzlich meine Posting Versuche da - seltsam - vielleicht könnte die jemand bis auf einen löschen.
Top

User avatar
Joe User
Project Manager
Project Manager
Posts: 11519
Joined: 2003-02-27 01:00
Location: Hamburg

Re: MySQL Einstellungen insb. für Forum optimieren

Post by Joe User »

Welche Forensoftware ist das genau? Der "Programmierer" gehört IMHO verprügelt...
Top

Roger Wilco
Administrator
Administrator
Posts: 6001
Joined: 2004-05-23 12:53

Re: MySQL Einstellungen insb. für Forum optimieren

Post by Roger Wilco »

Joe User wrote:Welche Forensoftware ist das genau? Der "Programmierer" gehört IMHO verprügelt...
http://www.phpmyforum.de/
Have Fun. ;)
Top

User avatar
Joe User
Project Manager
Project Manager
Posts: 11519
Joined: 2003-02-27 01:00
Location: Hamburg

Re: MySQL Einstellungen insb. für Forum optimieren

Post by Joe User »

Roger Wilco wrote:Have Fun. ;)
Danke, der ist mir nach kurzem Blick in den Source vergangen...
Top