繁体   English   中英

PostgreSQL是如何实现REPEATABLE_READ隔离级别的?

[英]How does PostgreSQL implement the REPEATABLE_READ isolation level?

REPEATABLE_READ 事务隔离级别 PostgreSQL 12 可防止脏读、不可重复读和幻读。 与 READ_COMMITTED 隔离级别相比,REPEATABLE_READ 隔离级别可防止不可重复读取和幻读。

我想这是有代价的,否则只会让两者相等。 postgres如何保证不会出现这3种读取现象呢?

READ COMMITTEDREPEATABLE READ使用相同的技术:快照确定事务可以看到表中行的哪个版本。 不同之处在于,使用READ COMMITTED时,快照是在每个语句的开头拍摄的,因此每个新语句都可以看到之前提交的所有内容,而REPEATABLE READ事务对所有语句使用相同的快照。

有两个后果:

  • 如果有的话, REPEATABLE READREAD COMMITTED便宜,因为它需要更少的快照

  • REPEATABLE READ提供比 SQL 标准要求更高的隔离——数据库似乎根本没有改变

您为REPEATABLE READ支付的价格不同:

  • 你冒着序列化错误的风险,这迫使你重复交易

  • REPEATABLE READ事务开始后, VACUUM无法清除标记为死的行

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM