【YashanDB 知识库】并发 update 报错 YAS

【YashanDB 知识库】并发 update 报错 YAS-02208 lock conflict in consistent write

作者:YashanDB

  • 2025-01-14广东
  • 本文字数:582 字 阅读完需:约 2 分钟

问题现象

业务存在并发 update,偶现报错,错误信息 YAS-02208 lock conflict in consistent write

问题的风险及影响

影响业务正确性判断

问题影响的版本

YashanDB 版本:23.2.6.100 列存 LSC

问题发生原因

问题发生的场景:

LSC 分区表,开启行迁移,并发更新,产生报错 YAS-02208 lock conflict in consistent write

业务应用后端会收到该错误。

问题分析:

1、YanshanDB 默认采用的是 inplace update 引擎,即行的 rowId 是不移动的。但一些特殊的场景会导致 rowId 发生变化。而用户在一些特殊的使用场景下会依赖 rowId,此时 rowId 是不能移动的。导致 rowId 发生变化的场景有:

闪回 DML、Shrink Table、跨分区更新

2、在分区更新场景下, 一行数据被从一个分区搬迁到另外一个分区,实际上用户数据仍然存在,在 DML 机制下,会跳过此行处理,导致数据漏更新。崖山通过 row movement 特性支持,开启 row movement 避免 lost update。

3、rowid 变更会比较大可能触发语句重启,在某一个表的 row movement 开启的场景下,在并发更新、删除的操作,其他 session 并发修改了当前 session 的 dml 的条件列,也会触发语句重启。

该问题满足这个条件,是正常现象,相应的数据已经会做修改,返回信息可作为参考提示。

动态视图 v$sql, v$sqlArea 中 restart_statements 列,统计语句重启的次数。