我们每隔一段时间就会在MySQL中获得一个特别长时间运行的全文查询。查询将运行很长时间,目前我看到一个运行了50,000秒(并且仍在继续)。在查询上使用Kill或Kill Query似乎什么都不做。此外,客户端上的命令Timeout是30秒,因此客户端已经失败并且已经离开,但是服务器只是继续运行查询,耗费了大量资源。在过去,我们不得不重新启动MySQL服务以使这些查询停止运行。有没有其他方法可以阻止这些查询。我们正在采取措施确保查询不会在第一时间运行,但它们仍会偶尔运行,这是一个很大的痛苦。主要是因为在查询运行时,我们无法对表执行更新。
长时间运行查询的一个例子就是:
SELECT id,Title From Articles WHERE MATCH(ArticleText) AGAINST('+Nintendo*HD*Wii*' IN BOOLEAN MODE)
由于搜索字符串中间的*以及字符串的结尾,因此运行时间特别长。
答案 0 :(得分:0)
您使用的是哪个版本的MySQL?您可以通过升级来解决此问题。
另外,样本查询是真的吗?我希望搜索字符串类似于'+ Nintendo * + HD * + Wii *'而不是'+ Nintendo HD Wii *。
我在5.0中从未遇到过这种类型的问题,但在早期版本的MySQL 5.1中,我发现了几个与搜索字符串中某些内容相关的非常类似的问题,导致全文查询挂起并且无法终止。
这是我在5.1.42中看到的,在5.1.45中已修复: http://bugs.mysql.com/bug.php?id=50556 这被标记为: http://bugs.mysql.com/bug.php?id=50351
我报告了当搜索字符串包含冒号时,全文查询挂起的另一个问题。该问题存在于5.1.31中,并在5.1.37中得到修复。