本篇深入各種鎖的結構與用法:WAL 用的輕量鎖、關聯層級的重量鎖,以及列層級鎖。
本篇涵蓋#
- 關聯層級鎖——鎖的一般原理(粒度、模式、長短期之分)、重量鎖的內部結構、交易 ID 上的鎖、關聯的八種鎖定模式與其相容性矩陣,以及公平等待佇列的行為。
- 列層級鎖——列鎖如何以元組標頭本身實作而不佔用共享記憶體、四種列鎖模式、多重交易(multitransaction)、等待佇列、無等待與逾時鎖定,以及死結的偵測與避免。
- 其他鎖——非關聯物件鎖、關聯延伸鎖、頁面鎖、諮詢鎖(advisory lock),以及可序列化隔離所用的謂詞鎖。
- 記憶體結構上的鎖——自旋鎖、輕量鎖(LWLock)與其他等待事件,以及如何取樣分析等待。
貫穿本篇的判準是粒度與模式相容性:粒度越細、相容模式越多,並行執行的機會就越大——但鎖的數量與維護成本也隨之上升。PostgreSQL 針對不同資源選用不同重量的鎖,正是這個取捨的具體結果。