MySQL – 识别永无止境的服务器崩溃查询

我的服务器不断从MySQL造成的OOM错误崩溃。 我相信在这个网站上有一个查询是错误的,太长,导致这个问题。 我的服务器和MySQL日志显示,在峰值和问题发生之前,压力很小。 我真的很想确定这个有问题的查询并修复查询。 我觉得像调整一个好的生产服务器,以生存一个错误的查询,我想要删除任何方式,MySQL是一个奇怪的方式去解决它。

我有慢查询日志设置,但这个问题查询从来没有出现在日志中,我相信,因为查询永远不会完成,服务器首先崩溃。 我如何logging或识别这个有问题的查询?

供参考本网站还有其他疑问引起了这个问题,我确定了他们并修复它们。 它们通常是因为像“BETWEEN :: startTime AND :: endTime”这样的子句而发生的,并且由于错误,:: startTime被设置为0,使得时间跨度变得巨大。

我一直build议使用EXPLAIN,据我所知,问题是我不知道什么查询“解释”:)。

任何build议如何我可以识别这个查询将不胜感激。 谢谢!

我有一个野生的build议给你。

我在DBA StackExchange中写了一篇文章,用于轮询stream程列表,并告诉您在所选的任何时间间隔内20个性能最差的查询 。 这比慢查询日志更好,因为慢查询日志将只logging完成的查询。 我的方法将捕获当前正在运行的查询。

基于这个YouTubevideo,我在去年年中实施了这一段时间。

为了补充其他答案,我会指向Percona Toolkit ,这是我的MySQL性能分析工具1。 请看看pt-query-digest

我在Percona工具包中创build了pt-stalk工具,以帮助诊断在您不看时发生的问题。 它不仅会帮助你捕捉有问题的查询,还会为你收集足够的信息来确定查询是否是问题 – 如果不是的话,还有什么可能。