PG 鎖

參考:https://postgres.fun/20100921154343.html

表級鎖類型

表級鎖類型分爲八種,以下對各種表級鎖類型進行簡單介紹下, 鎖的衝突模式可以參考3.1的圖一:表級鎖衝突模式。

  • ACCESS SHARE
    “ACCESS SHARE”鎖模式只與“ACCESS EXCLUSIVE” 鎖模式衝突;查詢命令(Select command)將會在它查詢的表上獲取”Access Shared” 鎖,一般地,任何一個對錶上的只讀查詢操作都將獲取這種類型的鎖。

  • ROW SHARE
    “Row Share” 鎖模式與”Exclusive’和”Access Exclusive”鎖模式衝突;”Select for update”和”Select for share”命令將獲得這種類型鎖,並且所有被引用但沒有 FOR UPDATE 的表上會加上”Access shared locks”鎖。

  • ROW EXCLUSIVE
    “Row exclusive” 與 “Share,Shared roexclusive,Exclusive,Access exclusive”模式衝突;“Update,Delete,Insert”命令會在目標表上獲得這種類型的鎖,並且在其它被引用的表上加上”Access shared”鎖,一般地,更改表數據的命令都將在這張表上獲得”Row exclusive”鎖。

  • SHARE UPDATE EXCLUSIVE
    ”Share update exclusive,Share,Share row ,exclusive,exclusive,Access exclusive”模式衝突,這種模式保護一張表不被併發的模式更改和VACUUM;“Vacuum(without full), Analyze ”和 “Create index concurrently”命令會獲得這種類型鎖。

  • SHARE
    與“Row exclusive,Shared update exclusive,Share row exclusive ,Exclusive,Access exclusive”鎖模式衝突,這種模式保護一張表數據不被併發的更改;“Create index”命令會獲得這種鎖模式。

  • SHARE ROW EXCLUSIVE
    與“Row exclusive,Share update exclusive,Shared,Shared row exclusive,Exclusive,Access Exclusive”鎖模式衝突;任何Postgresql 命令不會自動獲得這種鎖。

  • EXCLUSIVE
    與” ROW SHARE, ROW EXCLUSIVE, SHARE UPDATE EXCLUSIVE, SHARE, SHARE ROW EXCLUSIVE, EXCLUSIVE, ACCESS EXCLUSIVE”模式衝突,這種索模式僅能與Access Share 模式併發,換句話說,只有讀操作可以和持有”EXCLUSIVE”鎖的事務並行;任何Postgresql 命令不會自動獲得這種類型的鎖;

  • ACCESS EXCLUSIVE
    與所有模式鎖衝突(ACCESS SHARE, ROW SHARE, ROW EXCLUSIVE, SHARE UPDATE EXCLUSIVE, SHARE, SHARE ROW EXCLUSIVE, EXCLUSIVE, and ACCESS EXCLUSIVE),這種模式保證了當前只有一個事務訪問這張表; “ALTER TABLE, DROP TABLE, TRUNCATE, REINDEX, CLUSTER, VACUUM FULL” 命令會獲得這種類型鎖,在Lock table 命令中,如果沒有申明其它模式,它也是缺省模式。

表級鎖衝突模式

在這裏插入圖片描述

備註:上圖是 PostgreSQL 表級鎖的各種衝突模式對照表,紅色的‘X’表示衝突項, 在章節四中會對其中典型的鎖模式進行模似演示。

實驗

參考:https://postgres.fun/20100921154343.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章