我有一个MySQL 5.1.61数据库运行在两个负载平衡的Apache Web服务器后面,托管一个相当繁忙的(每天100K唯一身份)Wordpress站点.我正在使用Cloudflare,W3TC和Varnish进行缓存.大多数情况下,数据库服务器处理流量非常好."show full processlist"在任何给定时间显示20-40个查询,其中大多数处于睡眠状态.
但是,周期性地(特别是当流量高峰或清除大量注释时),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
Run Code Online (Sandbox Code Playgroud)
有什么建议我可以如何改进MySQL配置,或在重负载下维护数据库稳定性的其他步骤?
就像已经说过的那样,跳出框框思考,并深入研究为什么这些查询很慢或以某种方式挂起。负载平衡是一个古老的问题,但即使对于(据说是)智能系统工程师来说也是一个很好的问题来源,它会导致网络服务器或数据库会话之间出现问题。随着所有缓存和负载平衡的进行,您确定一切都始终按预期端到端连接吗?
| 归档时间: |
|
| 查看次数: |
1156 次 |
| 最近记录: |