读隔离
Last updated
Last updated
在数据库本地事务隔离级别读取已提交(Read Committed)或以上的基础上,Seata(AT模式)的默认全局隔离级别是读取未提交(Read Uncommitted)。如果应用在特定场景下,必需要求全局的读取已提交,目前Seata的方式是通过SELECTFORUPDATE语句的代理。
SELECT FOR UPDATE语句的执行会申请全局锁,如果全局锁被其他事务持有,则释放本地锁(回滚SELECT FOR UPDATE语句的本地执行)并重试。这个过程中,查询是被block住的,直到全局锁拿到,即读取的相关数据是已提交的,才返回。
出于总体性能上的考虑,Seata目前的方案并没有对所有SELECT语句都进行代理,仅针对FOR UPDATE的SELECT语句。