mysql选择查询中的响应时间不一致

时间:2012-10-29 06:40:02

标签: mysql database

我们有很多MySQL选择查询以满足某些报告需求。大多数都很复杂,它们通常包括1.五到六个连接语句2.在select子句中有三到四个内部查询。

所有索引都在生产环境中正确到位。我们已经多次检查了解释查询语法并且它们没问题。

有些查询在响应时间方面表现得非常奇怪。相同的查询有时返回少于500毫秒(显示所有索引工作正常),并且当我们在1分钟左右后运行它时 - 它给出了具有高响应时间的结果(从5-6秒到30秒不等) 。)一段时间(大约一次20次......)它会给出一个超时错误。

这可能是由于服务器负载 - 但是高差异是如此频繁,以至于我们认为还有其他东西要设置来解决它。

有人可以告诉我一些方向吗?

谢谢,

萨米特

1 个答案:

答案 0 :(得分:3)

这种行为通常是由堆栈中的瓶颈引起的。

它就像建筑物内的旋转门 - 门一次可以处理1个人,每个人需要3秒钟;只要人们每3秒钟没有达到超过1人的速度,你就不知道这是一个瓶颈。如果人们在短时间内以更快的速度到达,队列会稍微增长但会很快消失。如果人们每2.5秒以1小时的速度到达一小时,则队列变得难以管理,并且可能需要比1小时更长的时间才能消失。

您的数据库系统由一个带旋转门的长走廊组成 - 大多数门可以并行运行,但它们都是有限的。

(很抱歉垃圾比喻,但我觉得用真实世界的图像来展示这些东西很有帮助)。

如果查询在性能配置文件中显示出高度的差异,我会查看系统性能监视器(Linux中的顶部,Windows中的Perfmon)并尝试将缓慢的性能与系统的行为联系起来。如果您在查询速度减慢时看到CPU利用率突然飙升,那么这可能是您的瓶颈;如果你看到磁盘吞吐量突然飙升,你可能会看到它。

一旦你有关于瓶颈的假设,你可以看看解决它们的方法 - 抛出问题的硬件通常是最便宜的。