MySQL全文查询锁表

标签 mysql locking full-text-indexing

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

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

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

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

最佳答案

您使用的是什么版本的 MySQL?您或许可以通过升级来解决此问题。

此外,该示例查询是真实的吗?我希望搜索字符串类似于“+Nintendo* +HD* +Wii*”,而不是“+NintendoHDWii*。

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

关于MySQL全文查询锁表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3094031/

相关文章:

c# - c# 100个应用同时写入日志时如何实现同步

sql - 全文 key 太长

Postgresql ILIKE 与 TSEARCH

mysql - Loopback mysql和facebook登录理解

php 配置文件,公共(public)函数 connect() 错误

C++ 和 Windows - 如何覆盖正在运行的程序的 exe 文件?

c# - 多线程应用程序中的单例类,锁定建议

mongodb - 排除 MongoDB 文本索引中的某些文本字段

java - Spring Boot JPA 使用 Hibernate 在 TABLE 中插入大写名称

Python SQLAlchemy ON DUPLICATE KEY UPDATE 具有多条记录