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隔离级别。