postgresql資料庫鎖介紹

datapeng發表於2015-04-17
postgresql鎖介紹
1 ACCESS SHARE
"ACCESS SHARE"鎖模式只與"ACCESS EXCLUSIVE" 鎖模式衝突;
查詢命令(Select command)將會在它查詢的表上獲取"Access Shared" 鎖,一般地,任何一個對錶上的只讀查詢操作都將獲取這種型別的鎖。
2 ROW SHARE
 "Row Share" 鎖模式與"Exclusive’和"Access Exclusive"鎖模式衝突;
"Select for update"和"Select for share"命令將獲得這種型別鎖,並且所有被引用但沒有 FOR UPDATE 的表上會加上"Access shared locks"鎖。
3 ROW EXCLUSIVE
 "Row exclusive" 與 "Share,Shared roexclusive,Exclusive,Access exclusive"模式衝突;
"Update,Delete,Insert"命令會在目標表上獲得這種型別的鎖,並且在其它被引用的表上加上"Access shared"鎖,一般地,更改表資料的命令都將在這張表上獲得"Row exclusive"鎖。
4 SHARE UPDATE EXCLUSIVE
"Share update exclusive,Share,Share row ,exclusive,exclusive,Access exclusive"模式衝突,這種模式保護一張表不被併發的模式更改和VACUUM;
 "Vacuum(without full), Analyze "和 "Create index concurrently"命令會獲得這種型別鎖。 
5 SHARE
與"Row exclusive,Shared update exclusive,Share row exclusive ,Exclusive,Access exclusive"鎖模式衝突,這種模式保護一張表資料不被併發的更改;
"Create index"命令會獲得這種鎖模式。
6 SHARE ROW EXCLUSIVE
與"Row exclusive,Share update exclusive,Shared,Shared row exclusive,Exclusive,Access Exclusive"鎖模式衝突;
任何Postgresql 命令不會自動獲得這種鎖。
7 EXCLUSIVE
與" ROW SHARE, ROW EXCLUSIVE, SHARE UPDATE EXCLUSIVE, SHARE, SHARE ROW EXCLUSIVE, EXCLUSIVE, ACCESS EXCLUSIVE"模式衝突,這種索模式僅能與Access Share 模式併發,換句話說,只有讀操作可以和持有"EXCLUSIVE"鎖的事務並行;
任何Postgresql 命令不會自動獲得這種型別的鎖;
8 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 命令中,如果沒有申明其它模式,它也是預設模式。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29371470/viewspace-1582910/,如需轉載,請註明出處,否則將追究法律責任。

相關文章