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


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

1 Like

写偏斜(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 Like

明白了,十分感谢

1 Like

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

你好,请问为什么我使用了for update后,简单的查询都会成为慢查询,耗时50秒?版本是V4.0.9

可以先按照 troubleshooting 的 慢日志 排查文档定位一下问题。

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。