[英]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.