私は、MySQL 5.1.61 データベースを、負荷分散された 2 つの Apache Web サーバーの背後で実行しており、かなり忙しい (1 日あたり 100K ユニーク) Wordpress サイトをホストしています。Cloudflare、W3TC、および Varnish でキャッシングしています。ほとんどの場合、データベース サーバーはトラフィックを適切に処理します。「show full processlist」は、常に 20 ~ 40 のクエリを表示し、ほとんどがスリープ状態になっています。
ただし、定期的に (特にトラフィックが急増した場合や多数のコメントが消去された場合)、MySQL は応答を停止します。実行中の 1000 ~ 1500 のクエリ、多くの「データ送信」などを見つけることができます。特定のクエリがデータベースに負荷をかけているようには見えません (それらはすべて標準の Wordpress クエリです)。電話を切る。私は(通常)ログインして「完全なプロセスリストを表示」やその他のクエリを実行できますが、すでにそこにある1000以上のクエリはそのままです。唯一の解決策は、mysql を再起動することのようです (接続できない場合は kill -9 を介して激しく)。
すべてのテーブルは innodb で、サーバーには 8 コア、24 GB の RAM、十分なディスク容量があり、以下は my.cnf です。
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
port=3306
skip-external-locking
skip-name-resolve
user=mysql
query_cache_type=1
query_cache_limit=16M
wait_timeout = 300
query_cache_size=128M
key_buffer_size=400M
thread_cache_size=50
table_cache=8192
skip-name-resolve
max_heap_table_size = 256M
tmp_table_size = 256M
innodb_file_per_table
innodb_buffer_pool_size = 5G
innodb_log_file_size=1G
#innodb_commit_concurrency = 32
#innodb_thread_concurrency = 32
innodb_flush_log_at_trx_commit = 0
thread_concurrency = 8
join_buffer_size = 256k
innodb_log_file_size = 256M
#innodb_concurrency_tickets = 220
thread_stack = 256K
max_allowed_packet=512M
max_connections=2500
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1
#2012-11-03
#attempting a ram disk for tmp tables
tmpdir = /db/tmpfs01
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
MySQL 構成を潜在的に改善する方法や、高負荷下でデータベースの安定性を維持するためのその他の手順について何か提案はありますか?