簡體   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