snapshot vs RR
RR隔离级别属于正式规定的四种隔离级别中的一种,SS属于一种衍生的隔离级别。
两者均通过MVCC实现快照读,读不上锁,写上锁。
两者的区别是在出现冲突写的情况时:
- RR只会阻塞冲突写,待一方事务结束(commit或rollback),等待的事务继续执行。
- SS会阻塞冲突写,持有锁的事务COMMIT提交后,等待的事务必须回滚。
SS隔离级别更高。
准备数据
|
|
针对mysql、pg、cockroachdb进行行为测试。
测试用例
step | trx1 | trx2 |
---|---|---|
1 | begin; | begin; |
2 | update t1 set c1=100 where c1 =1 | |
3 | update t1 set c1=200 where c1 =1 | |
4 | commit; | |
5 | commit; | |
6 | select * from t1 |
测试结果
所有的trx2:step3都会被阻塞。
mysql和pg行为一致,最后c1的值为200.
cockroachdb会回滚trx2,最后为100
|
|
测试脚本
cockroachdb
|
|
mysql
|
|
pg
|
|