Chapter 12. 並發控制

Table of Contents
12.1. 介紹
12.2. 事務隔離
12.2.1. 讀已提交隔離級別
12.2.2. 可串行化隔離級別
12.3. 明確鎖定
12.3.1. 表級鎖
12.3.2. 行級鎖
12.3.3. 死鎖
12.4. 應用層的數據完整性檢查
12.5. 鎖和索引

本章描述 PostgreSQL 數據庫系統在兩個或者更多會話試圖同時訪問同樣的數據的時候表現出來的樣子。 在那種並發訪問的情況下的目標是為所有會話提供高效的訪問,同時還要維護嚴格的數據完整性。 每個數據庫應用的開發人員都應該熟悉本章討論的話題。

12.1. 介紹

與其他使用鎖來進行並行控制的數據庫系統不同, PostgreSQL 利用多版本模型來維護數據的一致性。 (多版本並發控制,Multiversion Concurrency Control, MVCC)。 這就意味著當檢索數據庫時,每個事務都看到一個數據的一段時間前的快照 ( 一個數據庫版本), 而不管正在處理的數據當前的狀態。這樣,如果對每個數據庫會話進行事務隔離, 就可以避免一個事務看到因為其它並行的事務更新同一行數據而導致的不連貫的數據。

使用MVCC多版本並發控制比鎖定模型的主要優點是在MVCC裡, 對檢索(讀)數據的鎖要求與寫數據的鎖要求不衝突, 所以讀不會阻塞寫,而寫也從不阻塞讀。

PostgreSQL 裡也有表和行級別的鎖定設施, 用于給那些無法輕鬆接受 MVCC 行為的應用。 不過,恰當地使用 MVCC 總會提供比鎖更好地性能。