MOT隔离级别
即使MOT完全兼容ACID,openGauss 1.0并非支持所有的隔离级别。下表介绍了各隔离级别,以及MOT支持和不支持的内容。
表 1 隔离级别
隔离级别 | 说明 |
---|
READ UNCOMMITTED | MOT不支持 |
READ COMMITTED | MOT支持 READ COMMITTED(读已提交)隔离级别保证任何正在读取的数据在上一次读取时都已提交。它只是限制读者看到任何中间数据、未提交数据,或脏读。数据被读取后可以自由更改,因此,读已提交隔离级别并不保证事务再次读取时能找到相同的数据。 |
SNAPSHOT | MOT不支持 SNAPSHOT(快照)隔离级别提供与SERIALIZABLE(可序列化)相同的保证,同时支持并发事务修改数据。相反,它迫使每个读者看到自己的世界版本(自己的快照)。不阻止并发更新使得编程非常容易,且可扩展性很强。然而,在许多实现中,这种隔离级别需要更高的服务器资源。 |
REPEATABLE READ | MOT支持 REPEATABLE READ(可重复读)是一个更高的隔离级别,除了READ COMMITTED隔离级别的保证之外,它还保证任何读取的数据都不能更改。如果一个事务再次读取相同的数据,它将找出该数据,不做更改,并且保证它可读取。 乐观模型使得并发事务能更新该事务读取的行。在提交时,该事务将验证REPEATABLE READ隔离级别是否被违反。若违反,则回滚该事务,必须重试。 |
SERIALIZABLE | MOT不支持 SERIALIZABLE(可序列化)隔离提供了更强的保证。除了REPEATABLE READ隔离级别保证的所有内容外,它还保证后续读取不会看到新数据。 它之所以被命名为SERIALIZABLE,是因为隔离非常严格,几乎有点像事务串行运行,而不是并行运行。 |
下表显示了不同隔离级别启用的并发副作用。
表 2 隔离级别启用的并发副作用
隔离级别 | 说明 | 不可重复读 | 幻影 |
---|
READ UNCOMMITTED | 是 | 是 | 是 |
READ COMMITTED | 否 | 是 | 是 |
REPEATABLE READ | 否 | 否 | 是 |
SNAPSHOT | 否 | 否 | 否 |
SERIALIZABLE | 否 | 否 | 否 |
在不久后将发布的版本中,openGauss MOT还将支持SNAPSHOT和SERIALIZABLE隔离级别。