1

每隔一段时间,我们就会在 MySQL 中得到一个运行时间特别长的全文查询。该查询将运行很长时间,目前我看到一个运行了 50,000 秒(并且仍在运行)的查询。对查询使用 Kill 或 Kill Query 似乎无济于事。另外,客户端的命令超时时间是30秒,所以客户端已经失败了,离开了,但是服务器一直在运行查询,消耗了相当多的资源。过去,我们必须重新启动 MySQL 服务才能让此类查询停止运行。有没有其他方法可以阻止这些查询。我们正在采取措施确保查询不会首先运行,但它们仍然会每隔一段时间运行一次,这是一个很大的痛苦。主要是因为在查询运行时,我们无法对表执行更新。

一个长时间运行的查询的例子是这样的:

SELECT id,Title From Articles WHERE MATCH(ArticleText) AGAINST('+Nintendo*HD*Wii*' IN BOOLEAN MODE)

由于 * 在搜索字符串的中间以及字符串的末尾,因此运行时间特别长。

4

1 回答 1

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 中得到修复。

于 2010-06-22T23:01:10.997 回答