TDSQL Boundless 隔离级别

数据库事务隔离级别是控制并发事务之间相互影响程度的机制,核心目标是在保证数据一致性的前提下兼顾并发性能。SQL 标准定义了四种级别,每种级别解决了不同的数据异常问题。

相关产品
TDSQL Boundless 产品页,含版本规格、价格与购买入口。

一、数据异常类型说明

·脏读:一个事务读取了另一个未提交事务修改的数据。

·不可重复读:同一事务内多次读取同一数据,结果不一致(数据被其他已提交事务修改)。

·幻读:同一事务内多次按相同条件查询,返回的记录集不一致(有其他已提交事务插入或删除数据)。

二、隔离级别对比表

隔离级别 脏读 不可重复读 幻读 适用场景
读未提交(Read Uncommitted) 可能 可能 可能 基本不推荐使用
读已提交(Read Committed) 不可能 可能 可能 读写分离、实时性要求高
可重复读(Repeatable Read) 不可能 不可能 可能(但 MySQL InnoDB 和 TDSQL Boundless 已很大程度上解决) 默认级别,复杂业务逻辑
可串行化(Serializable) 不可能 不可能 不可能 最高一致性要求

三、TDSQL Boundless 的隔离级别行为分析

TDSQL Boundless 仅支持读已提交(Read Committed)和可重复读(Repeatable Read)两种隔离级别。默认隔离级别为可重复读级别。

四、Repeatable Read 级别

TDSQL Boundless 完全支持 Repeatable Read 隔离级别,其行为与 MySQL 高度相似。更准确地说,TDSQL Boundless 支持的是快照隔离级别,该级别不会出现幻读异常,但是依然可能出现写偏斜异常。

快照获取方式:事务首次读取时会创建一致性视图(快照),后续的读操作都会基于这个快照,从而保证在本事务内读到的数据是一致的。

五、Read Committed 级别

TDSQL Boundless 也支持 Read Committed 级别,但其实现方式与 MySQL 有显著不同。

·快照获取方式:TDSQL Boundless 在该级别下,每条查询语句都会重新获取最新的已提交数据快照。也就是说,单条语句内的读操作是在同一个快照下的,但是多个语句的读操作是在不同快照下的。

·关键的锁行为差异:TDSQL Boundless 在 Read Committed 级别下的一些悲观锁行为与 Repeatable Read 级别类似,而不同于 MySQL 的 Read Committed。

·在 MySQL 的 Read Committed 下:对于 SELECT … FOR UPDATE这样的当前读,通常只对查询匹配的现有记录加锁,不会加间隙锁(Gap Lock),以减少锁冲突。

·在 TDSQL Boundless 的 Read Committed 下:为了保证分布式环境下的严格一致性,它仍然会使用范围锁。这意味着,即使是在 Read Committed 级别,一个执行范围查询并加锁的事务,仍然可能阻止其他事务向该范围内插入数据,这一点与其 Repeatable Read 级别的行为相似。

赞 (0)
上一篇 4天前
下一篇 4天前