tidb事物隔离级别是SNAPSHOT ISOLATION,请问“write skew”和全序问题有做过解决吗?

tidb事物隔离级别是SNAPSHOT ISOLATION,请问“write skew”和全序问题有做过结局吗?

1赞

写偏斜(write skew)异常,是指两个事务 (T1与T2) 并发写一个数据集 (例如包含 V1 与 V2) 不相交的数据项(例如 T1 修改 V1, T2 修改 V2),最后并发提交事务。如果事物是串行执行,这种“异常”不会发生。

例如银行转账业务,即 A 有两个银行账号 V1 和 V2,初始值都是 100,同时有两个并发事务 T1 和 T2,T1 变更 V1 账号,转出 100(转账之前V1 和 V2账号都是余额 100),同时 T2 变更 V2 账号,转出 100(转账之前V1 和 V2 账号都是余额 100),两个事务 T1 和 T2 都成功 commit 后,T1 与 T2 事务的结果是 V1 和 V2账号余额都是 0。

从上文描述可以看到,写偏斜其实是与业务有关的,因为两个并发事务同时修改两个不同的数据,从技术角度来看,这是没有问题的,所以所谓的写偏斜并不是问题,如果需要用技术手段保证业务的“正确性”,可以使用 for update 语句,来保证遇到并发情况下,仅有一个事务能成功,另一个失败。

1赞

明白了,十分感谢

1赞

不客气呢,觉得回答有用的话可以将其标记为“解决方案”,这样别人也可以清楚看到这个问题的答案噢~