DM数据库SQL报错之多版本操作冲突过多 或 Too many mvcc conflict
本文于 16 天前发布,最后更新于 10 天前

一、问题描述

MVCC 多版本并发控制是指维持一个数据的多个版本,在保证事务隔离级的情况下,使得读写操作没有冲突,提高了数据库并发读写的性能。
因此可以解决在并发读写数据库时,做到在读操作时不用阻塞写操作,写操作也不用阻塞读操作。
当对一张表批量修改且并发量较大时,可能会报 MVCC 多版本操作冲突过多的错误。多会话同时修改表数据时报错:Too many mvcc conflict。

二、问题解决

修改数据库dm.ini文件中静态参数MVCC_RETRY_TIMESBDTA_SIZE,重启数据库。

参数名称 参数描述及建议 属性
MVCC_RETRY_TIMES 指定发生 MVCC 冲突时的最大重试次数。有效值范围(0~4294967294) 注:MPP 下此参数无效,发生 MVCC 冲突时将直接报错。 静态
BDTA_SIZE BDTA 缓存的记录数。有效值范围(1~10000)。 静态

修改MVCC_RETRY_TIMES参数值为 100,重启数据库。

修改SQL

SP_SET_PARA_VALUE(2, 'MVCC_RETRY_TIMES', 100);
--或者
ALTER SYSTEM SET 'MVCC_RETRY_TIMES' = 100 SPFILE;

参数分析

MVCC_RETRY_TIMES 参数越大,发生 MVCC 冲突时的最大重试次数越多,报错可能性越低。
BDTA_SIZE 参数越大,批量数据处理大小(BDTA 的大小)越大,报错可能性越大。

注意
在实际业务场景中,同一时刻并发执行修改同一条数据会导致此报错,建议分析确认应用中同一时刻不同事务修改同一条数的业务合理性。达梦中控制并发冲突次数的参数为 MVCC_RETRY_TIMES,默认为 5,该参数可从一定程度上缓解冲突的概率。但该错误信息不是并发操作触发锁机制控制锁等待,而是同一时刻不同的事务修改同一条数据导致,故要综合评估业务逻辑的合理性来进行解决。

暂无评论

发送评论 编辑评论


|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇