mysql - Wordpress 负载过重时 MySQL 周期性锁定

标签 mysql wordpress

我有一个 MySQL 5.1.61 数据库运行在两个负载平衡的 Apache 网络服务器后面,托管着一个相当繁忙的(每天 10 万个唯一身份)Wordpress 站点。我正在使用 Cloudflare、W3TC 和 Varnish 进行缓存。大多数时候,数据库服务器可以很好地处理流量。 “show full processlist”在任何给定时间显示 20-40 个查询,其中大部分处于 sleep 状态。

但是,MySQL 会周期性地停止响应(特别是在流量高峰或大量评论被清除时)。我会发现有 1000-1500 个查询在运行,许多“发送数据”等。似乎没有特定的查询使数据库不堪重负(它们都是标准的 Wordpress 查询),但似乎同时的请求量导致所有查询挂断。我(通常)仍然能够登录、运行“显示完整进程列表”或其他查询,但是已经存在的 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

有什么建议可以改进 MySQL 配置或其他步骤以在重负载下保持数据库稳定性吗?

最佳答案

就像已经说过的那样,跳出框框思考并找出这些查询缓慢或挂起的原因。一个古老的问题,但即使对于(据说;)智能系统工程师来说也是一个很好的问题来源,负载平衡会导致跨网络服务器或数据库 session 的问题。随着所有缓存和负载平衡的进行,您确定一切始终按预期进行端到端连接吗?

关于mysql - Wordpress 负载过重时 MySQL 周期性锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13640127/

相关文章:

php - Wordpress 高亮显示当前页面链接

html - 使 WP "Edge"主题全宽

php - 如何创建 SQL 触发器以根据新插入行中的值插入新行?

php - 了解 WordPress Hook 的调用方式

c++ - 任何人都知道我如何修复此 C++ 以尝试将从 MySQL 数据库返回的行打印到文本文件 (.txt)

php - Mysql 和 PHP 字符串比较 - Unicode 规范化?

mysql - 删除 SELECT Mysql 结果中的重复项,如果任何列 1 = 列 2 那么它是重复项

mysql - 在表中插入多列时出现查询错误

Java SSH MySQL 连接

jQuery while 循环过早停止