首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何查找MySQL/PHP中“连接太多”错误的根本原因

如何查找MySQL/PHP中“连接太多”错误的根本原因
EN

Stack Overflow用户
提问于 2010-04-15 17:33:10
回答 5查看 11.2K关注 0票数 9

我正在运行一个web服务,它运行每天服务数百万次调用的算法,还运行一些后台处理。每隔几秒钟,我就会在尝试连接到MySQL机器时看到“连接太多”的错误。然而,这并不一定是由于高流量时间或任何我能确定的原因。

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

如何追踪它有什么创造性的想法吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-04-26 17:27:58

您使用的MySQL表类型是什么?MyISAM还是InnoDB (或另一个)?MyISAM将使用表级锁定,因此您可能会遇到这样一种场景:运行繁重的select操作,然后对同一个表执行update操作,并执行大量select查询。然后,最后一个select查询将必须等待,直到更新完成(而更新又必须等待,直到first - heavy select完成)。

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

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

票数 3
EN

Stack Overflow用户

发布于 2010-04-28 20:36:00

SHOW OPEN TABLES命令将显示MySQL中所有表的锁定状态。如果您的一个或多个查询导致了连接死锁,那么结合使用SHOW PROCESSLIST和打开的表应该可以缩小范围,找出是哪个查询阻止了工作。

票数 3
EN

Stack Overflow用户

发布于 2011-04-26 05:16:30

这是个老话题。然而,我只是遇到了这个问题,这是因为我有一个mysqldump脚本,每天安排3次。在这些时候,如果我的web应用程序也获得了相当多的使用量,那么所有的web应用程序查询都只是在mysqldump锁定数据库中的所有表的同时,将自己一个接一个地排成队列。最好的选择是在单独的机器上设置一个复制从属服务器,并从从属服务器而不是生产服务器获取备份。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2644132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档