一位客户通知我,我们为他开发的应用程序的搜索工作不正常。该搜索基于对 MySQL 5.6(支持它的第一个版本)中 InnoDB 表的全文搜索索引的查询。
手动执行查询时,我检查它是否只在应该返回 2 时返回 1 个结果。我尝试使用其他搜索词,但始终省略相同的表行。使用 LIKE 的相同查询效果很好。
当尝试在具有相同操作系统和 MySQL 服务器版本的虚拟化环境中复制问题时,我无法重现它,因为在恢复数据库转储后查询可以正常工作。
在尝试了几个选项后,运行 OPTIMIZE TABLE 是有效的。优化表后,搜索查询运行良好,显示丢失的记录。
为什么会这样?这个问题的解释是什么,如何检测或预防?
答案 0 :(得分:0)
我不太了解你的代码、你的数据库、你的查询,但我只看到两种情况:
永远不会释放的行级锁定:(可能是 mysql 中的错误)https://dev.mysql.com/doc/refman/8.0/en/innodb-locking.html
表损坏:我不确定 OPTIMIZE TABLE 是否正在修复任何内容或仅减少碎片。