InnoDB全文搜索死锁

问题描述 投票:0回答:1

我有一个中等容量的应用程序,每秒执行大约40次插入。所有插入均采用以下格式:

UPDATE item SET values=... WHERE row_id='18273-3749d-8743'

此外,没有项目可同时更新多次。看起来很简单,如果我们忽略其他所有内容,就永远不会出现僵局。但是,如果我对此进行了正确的故障排除,则我有一个fulltext字段似乎获得了一个伪表级锁,而不是行级锁。这是它在SHOW ENGINE INNODB STATUS上给出的错误:

LATEST DEADLOCK DETECTED
...
RECORD LOCKS space ... index FTS_DOC_ID_INDEX of table

因此,如果我正确地解释了这一点,则似乎FTS_DOC_ID_INDEX正在执行某种“行级以上锁”更新搜索索引。请问这是怎么回事?如果是这样,解决此问题的正确方法是什么?例如,我无法减少对应用程序的写入次数,是否可以在FTS字段上进行“安全更新”(?)?还是我需要编写update以便删除fts字段并将它们分别排队(这似乎很麻烦)。解决这个问题的最佳方法是什么?

mysql full-text-search innodb
1个回答
0
投票

((看到SELECT等后,我可能会得到一个更好的答案,但这是开始建议。)

每当可能出现死锁时,都应在代码中提供从死锁中恢复的能力。也就是说,在执行UPDATE之后检查死锁,然后重新执行一次更新。

© www.soinside.com 2019 - 2024. All rights reserved.