Chapter 9. 並發控制

Table of Contents
9.1. 介紹
9.2. 事務隔離
9.2.1. 讀已提交隔離級別
9.2.2. 可串行化隔離級別
9.3. 明確鎖定
9.3.1. 表級鎖
9.3.2. 行級鎖
9.3.3. 死鎖
9.4. 應用層的資料完整性檢查
9.5. 鎖和索引

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

9.1. 介紹

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

多版本和鎖定模型的主要區別是在MVCC裡, 對檢索(讀)資料的鎖要求與寫資料的鎖要求不衝突, 所以讀不會阻塞寫,而寫也從不阻塞讀。

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