如何在我们的生产数据库增长时测试查询是否需要更长的时间?

时间:2016-12-13 11:49:35

标签: php mysql testing database-performance query-performance

我想进行测试(阅读:任何可以发送邮件的内容),当我们的查询执行时间超过 2秒时,它会向我发送一封电子邮件。 如果重要的话我们正在使用带有CircleCi和PhPUnit的cakePhp。我们还有三个数据库,第一个是生产,第二个是开发,第三个是test_database。

解决这个问题的最佳方法是什么?有没有可以测试它的应用程序?

1 个答案:

答案 0 :(得分:1)

您可能希望在MySQL服务器上启用慢速查询日志(read this)。

此方法将生成误报报告:将显示大量超出慢查询阈值的一次性查询。但它会提醒您在查询您知道可能存在的问题以及您不知道可能出现问题的情况下都会变慢。这是后一类最痛苦的。

有一些方法可以从慢速查询日志生成电子邮件和优雅报告;您最喜欢的搜索引擎会找到这些工具。但要注意电子邮件;他们就像那个经常喊“狼”的谚语男孩。

您最好的选择是每天或每两天使用mysqldumpslow一次,并查找性能下降的查询。

更复杂的方法是计算出峰值加载时间。例如,在许多业务应用程序中,每个工作日的10:00-12:00是峰值加载时间。然后在这些窗口中监视慢速查询。

如果你想要真的复杂,你应该尝试只监控每个不同查询的最慢十分位数 - 其运行时间最长的10%。为什么?平均查询时间,甚至中值查询时间都具有欺骗性。它是异常值 - 查询运行的时间非常慢 -

一个。惹恼你的用户。 湾揭示各种系统瓶颈。

处理具有最慢十分位数的查询的索引和调优是保持系统正常运行的好方法。

但要小心:我几乎可以保证你的老板和你的产品经理不会理解这种方法。在他们开始看到结果之前,你必须经常解释它。