我正在尝试调试生产服务器上的错误。有时MySQL放弃了,我的网络应用程序无法连接到数据库(我收到“太多连接”错误)。服务器每天有几千个访问者,当晚我运行一些cron作业,有时会做一些繁重的mysql工作(循环50 000行,插入和删除重复等)
如何调试此问题?我应该阅读哪些日志文件?我如何找到“邪恶”剧本?奇怪的是,如果我重新启动MySQL服务器,它将再次开始工作。
编辑:
答案 0 :(得分:2)
首先,使用innotop(Google for it)来监控您的连接。它主要面向InnoDB统计数据,但它可以设置为显示所有连接,包括那些不在事务中的连接。
否则,以下内容非常有用:在Web应用程序中使用持久性连接/连接池。增加最大连接数。
答案 1 :(得分:2)
它不一定是长时间运行的SQL查询。
如果在页面开头打开连接,则在PHP脚本终止之前不会发布 - 即使没有运行查询。
您应该在页面中添加一些统计信息,以找出最慢的,以及最受欢迎的。如果可能的话,尽早关闭连接会有所帮助。
答案 2 :(得分:2)
尝试使用持久连接(mysql_pconnect
),它将有助于减少因不断打开和关闭MySQL连接而导致的服务器负载。
答案 3 :(得分:0)
起点可能是使用mysqladmin processlist
来获取mysql服务器上的进程列表。下一步取决于你找到的东西。