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 總會提供比鎖更好地性能。