我们使用 InnoDB 表作为 Web 应用程序的后端,在大约两年前一切都很好,直到几周前我们不得不重新启动 MySQL。(我们没有禁用反向 DNS 查找,即使我们并没有真正使用它们,但是我们的托管系统突然停止响应这些请求。它们现在已被禁用。)不幸的是,配置文件已更改,我们没有t 有其原始状态的副本以供比较。
在解决了最重要的问题之后,我们遇到了一个真正的难题:在高负载下,数据库查询开始花费比平时更长的时间。在这种情况下,我们的七个 apache 服务器有数百个打开的连接。运行 SHOW PROCESSLIST 显示这些连接中有一半或更多处于“发送数据”状态,时间通常为几百秒。他们几乎所有的查询都是 SELECT,类似的查询往往会聚集在一起。事实上,列表中最低的一组往往是完全相同的查询(我希望它在查询缓存中),返回 1104 行,每行两个整数。其他常见的违规行为是包含数百个单整数行、几个单整数行,甚至是单个 COUNT(*) 结果的列表。
我们尝试在其中一个期间关闭 Web 服务器,但问题在重新启动后一分钟内再次出现。但是,完全重新启动 mysqld 解决了问题,直到第二天。问题可能是什么,我们如何验证和/或修复它?