You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MariaDB10.5.11使用索引时报READ UNCOMMITTED事务无法获取更新锁

问题原因

该异常是MariaDB 10.5.11版本引入的查询优化器bug:

  • 10.5.11版本对索引合并的锁处理逻辑做了错误修改,当查询同时存在普通二级索引和空间索引、优化器自动选择rowid filter索引合并策略时(即你给出的执行计划中显示的range|filter、Using rowid filter逻辑,同时用到Pindex和Tindex两个索引做合并过滤),会在READ UNCOMMITTED隔离级别下错误尝试申请更新锁,和READ UNCOMMITTED的无锁读逻辑冲突,抛出1207错误。
  • 强制指定单个索引时,优化器不会触发索引合并逻辑,锁处理逻辑正常,因此不会报错;10.5.10版本不存在这部分错误修改,因此也能正常运行。
解决方法
  • 临时无代码修改方案:关闭rowid filter优化开关,可根据需要选择会话级生效或全局生效:
-- 会话级生效,仅对当前连接有效
SET optimizer_switch = 'rowid_filter=off';
-- 全局生效,重启后失效,需写入配置文件永久生效
SET GLOBAL optimizer_switch = 'rowid_filter=off';

关闭该开关后,优化器不会自动选择索引合并的rowid过滤策略,会直接选择单个索引执行,即可规避bug。

  • 业务代码修改方案:在查询语句中添加USE INDEX强制指定单个索引,避免触发索引合并逻辑,和你测试的写法一致。
  • 永久修复方案:升级MariaDB到10.5.12及以上版本,该bug已在后续小版本中被官方修复,升级后无需修改业务代码即可正常运行。

内容的提问来源于stack exchange,提问作者brbrbr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 05:27:01