[英]How does PostgreSQL implement the REPEATABLE_READ isolation level?
REPEATABLE_READ 事务隔离级别 PostgreSQL 12 可防止脏读、不可重复读和幻读。 与 READ_COMMITTED 隔离级别相比,REPEATABLE_READ 隔离级别可防止不可重复读取和幻读。
我想这是有代价的,否则只会让两者相等。 postgres如何保证不会出现这3种读取现象呢?
READ COMMITTED
和REPEATABLE READ
使用相同的技术:快照确定事务可以看到表中行的哪个版本。 不同之处在于,使用READ COMMITTED
时,快照是在每个语句的开头拍摄的,因此每个新语句都可以看到之前提交的所有内容,而REPEATABLE READ
事务对所有语句使用相同的快照。
有两个后果:
如果有的话, REPEATABLE READ
比READ COMMITTED
便宜,因为它需要更少的快照
REPEATABLE READ
提供比 SQL 标准要求更高的隔离——数据库似乎根本没有改变
您为REPEATABLE READ
支付的价格不同:
你冒着序列化错误的风险,这迫使你重复交易
在REPEATABLE READ
事务开始后, VACUUM
无法清除标记为死的行
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.