Seata 隔离级别问题

Seata的隔离级别问题

Seata的默认的全局隔离级别是读未提交

它通过生成before image时,select语句后加FOR UPDATE 行锁来避免本地事务的并发问题。这里只是存在第一阶段,第一阶段提交之后行锁就会释放。

TC端的全局锁来保证全局事务 一阶段 二阶段之间的隔离性问题

需要注意的是,如果我们使用了全局事务相关的数据表,那么对该数据表的操作都需要有校验全局锁的过程。我们不能在开一个口子让某个接口能直接修改该数据表。如果这样那么就很容易出现全局回滚失败的异常。



我们可以通过使用@GlobalLock 读隔离 @GloblaTransactional 写隔离 来避免脏读和脏写问题。

@GlobalLock 注解的作用是我们在执行sql 本地提交之前,ConnectionProxy对象都会去TC进行查询校验全局锁;

@GloblaTransactional 注解的作用是开启一个全局事务,并把XID一直往下游服务传递,XID会保存在RootContext对象中,在执行sql 本地提交之前,ConnectionProxy对象会去判断RootContext对象中存不存在XID,如果有那么就会去往TC端进行全局锁insert操作。



官方 常见问题解决方案

怎么使用Seata框架,来保证事务的隔离性?

A: 因 seata 一阶段本地事务已提交,为防止其他事务脏读脏写需要加强隔离。

  1. 脏读 select 语句加 for update,代

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值