如何找到MySQL/PHP中"太多连接"错误的根本原因

Nir*_*Nir 9 php mysql performance

我正在运行一个Web服务,它运行的算法每天为数百万个调用提供服务,并运行一些后台处理.现在每次都看到"太多连接"错误试图连接到MySQL框"几秒钟.然而,这不一定归因于高流量时间或任何我可以把手指放在上面.

我想找到导致它的瓶颈.除了在特定时间发生这种情况之外,服务器在CPU和内存方面没有太多负载,并且有2-3个连接(线程)打开,一切运行顺利.(我使用Zabbix进行监控)

关于如何追踪它的任何创意?

mat*_*tei 6

尝试在发生这种情况时打开一个mysql控制台并发出一个

SHOW PROCESSLIST;
Run Code Online (Sandbox Code Playgroud)查看正在执行的查询.或者,您可以启用日志记录慢查询(在my.cnf中插入此行:

log-slow-queries=/var/log/mysql-log-slow-queries.log
Run Code Online (Sandbox Code Playgroud)

在[mysqld]部分并使用

set-variable=long_query_time=1
定义查询应该采取的最短时间是什么,以便被认为是缓慢的.(记得重新启动mysql以使更改生效)


wim*_*vds 3

您使用什么 MySQL 表类型?MyISAM 还是 InnoDB(或另一种)?MyISAM 将使用表级锁定,因此您可能会遇到这样的情况:运行大量选择,然后对同一个表进行更新并进行大量选择查询。最后的选择查询将必须等到更新完成(而更新又必须等到第一个重选择完成)。

对于 InnoDB,像 innotop 这样的工具可能有助于查找死锁的原因(请参阅http://www.xaprb.com/blog/2006/07/31/how-to-analyze-innodb-mysql-locks/)。

顺便说一句,导致锁定发生的查询应该是未处于锁定状态的查询之一。