2007-03-10

PostgreSQL 清楚的交易鎖與學習監看 Locks

更新:2007-03-09
對應章節:C12.3

內容:
PostgreSQL 提供了豐富的鎖(Lock)模式用於控制對表中的數據的併發存取。
這些模式可以用於在 MVCC 無法給出期望行為的時候。 同樣,大多數 PostgreSQL 命令均會自動附加適當的鎖以保證被引用的表在命令執行的時候不會以一種不相容的方式被刪除或者修改。 (比如,在存在其它併發操作的時候,ALTER TABLE 是不能在同一個表上面執行的。)

種類:
1.互斥鎖定:鎖定期限制其它操作與參照.
2.共享鎖定:鎖定期限制其它操作.

pg_locks:這張系統視表提供了系統目前持有的鎖清單.

使用 pgAdmin III 可以得到更好的顯示介面


另外 pgAdmin III 更提供了很方便的狀態檢視介面
(工具---->伺服器狀態----->鎖清單)



使用必須注意出現:
死結(deadlock)
明確鎖定的使用可能會增加死鎖的可能性, 死鎖是是指兩個(或多個)事務相互持有對方期待的鎖。

事務一企圖在指定行上請求一個行級鎖,但是它得不到:事務二已經持有這樣的鎖了。 所以它等待事務二完成。因此,事務一被事務二阻塞住了,而事務二也被事務一阻塞住了:這就是一個死鎖條件。 PostgreSQL 將偵測這樣的條件並退出其中一個事務

防止死鎖的最好方法通常是保證所有使用一個數據庫的應用都以一致的順序在多個對象上請求鎖定。 在上面的例子裡,如果兩個事務以同樣的順序更新那些行,那麼就不會發生死鎖。 我們也要保證在一個對象上請求的第一個鎖是該對象需要的最高的鎖模式。 如果我們無法提前核實這些問題,那麼我們可以通過在現場重新嘗試因死鎖而退出的事務的方法來處理。

只要沒有檢測到死鎖條件,一個等待表級鎖或者行級鎖的事務將等待衝突鎖的釋放不確定的時間。 這就意味著一個應用持有打開的事務時間太長可不是什麼好事情(比如鎖,等待用戶輸入)。

沒有留言:

網誌存檔

PostgreSQL & Google-Analytics Running...

::Planet PostgreSQL::

PostgreSQL Information Page

PostgreSQL日記(日本 石井達夫先生Blog)

PostgreSQL News

黑喵的家 - 資料庫相關

Google 網上論壇
PostgreSQL 8 DBA 專業指南中文版
書籍內容討論與更多下載區(造訪此群組)
目錄下載: PostgreSQL_8 _DBA_Index_zh_TW.pdf (更新:2007-05-18)

全球訪客分佈圖(Google)

全球訪客分佈圖(Google)