周期性的MySQLlocking,当WordPress负荷很重

(不知道这是一个ServerFault的问题或StackOverflow,所以请原谅交叉post)

我有一个MySQL 5.1.61数据库,运行在两个负载均衡的Apache Web服务器后面,负责托pipe相当繁忙的(每天100K个唯一身份)Wordpress站点。 我正在用Cloudflare,W3TC和Varnishcaching。 大多数情况下,数据库服务器处理stream量非常好。 “显示完整进程列表”在任何给定的时间显示20-40个查询,大部分处于睡眠状态。

但是,定期地(特别是当stream量高峰或大量的注释被清除的时候),MySQL停止响应。 我会发现1000-1500个查询正在运行,许多“发送数据”等。没有特别的查询似乎是在紧张的数据库(他们都是标准的Wordpress查询),但似乎是同时的请求量导致所有查询挂断。 我(通常)仍然能够login,运行“显示完整进程列表”,或其他查询,但已经在那里的1000多个查询只是坐。 唯一的解决办法似乎是重新启动MySQL(有时通过kill -9,如果我无法连接猛烈)。

所有的表都是innodb,服务器有8个核心,24GB的内存,大量的磁盘空间,以下是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 

任何build议如何我可以改善MySQL的configuration,或其他步骤来维持重负载下的数据库稳定性?

我看到三(3)个缺乏表演的赠品

MySQL版本

你正在使用MySQL 5.1.61。 大多数人不会安装从MySQL 5.1.38开始的MySQL 5.1附带的InnoDB插件。 InnoDB Plugin具有新的增强function,可以使InnoDB执行多核参与。

build议:安装InnoDB插件或升级到MySQL 5.5

InnoDB设置

这是你的(从问题)

 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 innodb_log_file_size = 256M 

如果您安装了InnoDB插件或升级到MySQL 5.5,则必须调整InnoDB以激活多核增强function。

这是我的build议:

 innodb_thread_concurrency = 0 (default in MySQL 5.5) innodb_read_io_threads = 64 innodb_write_io_threads = 64 innodb_io_capacity = 5000 

请阅读Mar 16, 2012我的DBA StackExchange文章 ,详细讨论这个。

高速caching

你的innodb_buffer_pool_size可能太小了。 尝试使其更大。 事实上, 我在Apr 22, 2011Apr 22, 2011在WordPress StackExchange上写了一篇关于调整缓冲池大小的文章 。