调试MySQL“太多连接”

时间:2009-07-14 16:44:44

标签: php mysql debugging cron

我正在尝试调试生产服务器上的错误。有时MySQL放弃了,我的网络应用程序无法连接到数据库(我收到“太多连接”错误)。服务器每天有几千个访问者,当晚我运行一些cron作业,有时会做一些繁重的mysql工作(循环50 000行,插入和删除重复等)

  • 服务器在同一台机器上运行apache和mysql
  • MySQL有一个非常标准的配置(最大连接)
  • 网络应用使用PHP

如何调试此问题?我应该阅读哪些日志文件?我如何找到“邪恶”剧本?奇怪的是,如果我重新启动MySQL服务器,它将再次开始工作。

编辑:

  • 不同的应用程序/脚本在其数据库中使用不同的连接器(主要是mysqli但Zend_Db)

4 个答案:

答案 0 :(得分:2)

首先,使用innotop(Google for it)来监控您的连接。它主要面向InnoDB统计数据,但它可以设置为显示所有连接,包括那些不在事务中的连接。

否则,以下内容非常有用:在Web应用程序中使用持久性连接/连接池。增加最大连接数。

答案 1 :(得分:2)

它不一定是长时间运行的SQL查询。

如果在页面开头打开连接,则在PHP脚本终止之前不会发布 - 即使没有运行查询。

您应该在页面中添加一些统计信息,以找出最慢的,以及最受欢迎的。如果可能的话,尽早关闭连接会有所帮助。

答案 2 :(得分:2)

尝试使用持久连接(mysql_pconnect),它将有助于减少因不断打开和关闭MySQL连接而导致的服务器负载。

答案 3 :(得分:0)

起点可能是使用mysqladmin processlist来获取mysql服务器上的进程列表。下一步取决于你找到的东西。