【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】
【遇到的问题】
【复现路径】做过哪些操作出现的问题
【问题现象及影响】
https://docs.pingcap.com/zh/tidb/stable/transaction-isolation-levels#tidb-事务隔离级别
TiDB支持乐观事务模型、悲观事务模型、SI、REPEATABLE READ、READ COMMITTED,实际使用中该如何选择?
【附件】
请提供各个组件的 version 信息,如 cdc/tikv,可通过执行 cdc version/tikv-server --version 获取。
这个我觉得根据业务场景和需求, 4种隔离级别中 一般都是 读已提交吧
Oracle是只有RC,MySQL的默认隔离级别是RR,但是RDS-MySQL是RC,看业务,RC级别会比较轻量些
xfworld
(魔幻之翼)
4
大部分会选择悲观,然后 READ COMMITTED 就差不多够用了
张雨齐0720
(Zhangjig)
5
金融场景都是悲观锁,RC+ select for update
建议RC,TIDB在RR隔离级别下为了保证不产生幻读,会存在读写冲突,代价比较大
2 个赞
一般的开发,默认就好,隔离级别高了容易锁表导致一些业务不能正常进行
人如其名
(人如其名)
11
可以参考这两篇,快照读隔离级别主要解决幻读问题,解决幻读问题就需要等待其它事务prewrite时的锁,如果其它事务时大事务,那么就可能较大的锁冲突,这是快照读的问题,好处就是只是在事务开始时候获取时间戳。RC隔离级别则不会发生这种读写冲突,但是事务中的每一个语句都要获取时间戳,成本在时间戳上。不过综合考虑还是悲观锁+RC隔离级别可能效果会更好。
快照读的实现用途和原理可以参考下面两篇文章:
zhanggame1
(Ti D Ber G I13ecx U)
16
默认是SI + 悲观事务吧,si实际上就是RR,但是rr感觉并不如rc靠谱
Anna
(Ti D Ber Yz R Jp Sz D)
19
Oracle是只有RC,MySQL的默认隔离级别是RR,但是RDS-MySQL是RC,看业务,RC级别会比较轻量些