我正在调试 MySQL 服务器中的慢查询问题。查询通常在 100-400 毫秒内完成,但有时会飙升到 10 或 100 秒。
查询是由我无法控制的应用程序生成的,并且有多个数据库(每个客户一个)。慢查询似乎是随机出现的,当记录慢查询时,RAM、磁盘或 CPU 都没有加载。当我手动运行查询时,它们运行良好(以毫秒为单位),这让我怀疑与其他读写查询结合使用的锁定问题。查询本身很糟糕(无法在 WHERE 或 ORDER BY 子句中使用索引),但最大的表相对较小(最多 200.000 行),并且几乎没有 JOIN。当我分析查询时,大部分时间都花在对结果进行排序上(在查询运行良好的情况下)。
我无法在测试环境中重现极度缓慢的情况,我现在最好的想法是停止生产 MySQL 服务器,创建数据库副本,启用完整的查询日志记录并再次启动服务器。这样我应该能够重放负载并重现问题。但是一般的查询日志似乎只记录查询,而不是查询的目标数据库。我还有其他 MySQL 记录/重播选项吗?