【YashanDB 知识库】并发 update 报错 YAS-02208 lock conflict in consistent write
本文内容来自 YashanDB 官网,原文内容请见https://www.yashandb.com/newsinfo/7901521.html?templateId=1718516
问题现象
业务存在并发 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 列,统计语句重启的次数。
版权声明: 本文为 InfoQ 作者【YashanDB】的原创文章。
原文链接:【http://xie.infoq.cn/article/cf14e26616b84617e920ad1b5】。文章转载请联系作者。
评论