【问题标题】:Debug MySQLs "too many connections"调试 MySQL 的“连接太多”
【发布时间】:2009-07-15 02:28:01
【问题描述】:

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

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

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

编辑:

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

【问题讨论】:

    标签: php mysql debugging cron


    【解决方案1】:

    首先,使用 innotop(谷歌)来监控您的连接。它主要针对 InnoDB 统计信息,但可以设置为显示所有连接,包括那些不在事务中的连接。

    否则,以下内容会有所帮助:在您的 Web 应用程序中使用持久连接/连接池。增加您的最大连接数。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

          出发点大概是使用mysqladmin processlist来获取mysql服务器上的进程列表。下一步取决于您的发现。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-12-27
            • 2011-03-05
            • 1970-01-01
            • 1970-01-01
            • 2013-01-13
            • 1970-01-01
            • 2013-11-12
            • 2013-01-31
            相关资源
            最近更新 更多