2009年11月30日 星期一

DB2 locklist 參數

locklist - Maximum storage for lock list configuration parameter

Configuration Type
Database
Parameter Type
Configurable Online
Propagation Class
Immediate
Default [Range]
UNIX®
Automatic [4 - 524 288]
Windows® Database server with local and remote clients
Automatic [4 - 524 288]
Windows 64-bit Database server with local clients
Automatic [4 - 524 288]
Windows 32-bit Database server with local clients
Automatic [4 - 524 288]
Unit of Measure
Pages (4 KB)
When Allocated
When the first application connects to the database
When Freed
When last application disconnects from the database

----------------------------------------------

這個參數設定lock list所使用的記憶體數量。每個資料庫都會有一個lock list,它的功能是放置所有連線到該資料庫的應用程式所持有的lock。Lock是資料庫用來保護con-current存取時,資料完整性的方法。Lock的範圍可以是一個row,也可以是一個表格。除了應用程式外,資料庫本身為了internal user,有時候也會有lock的動作。

當這個數設為Automatic,資料庫的memory tuner會動態地依照workload的需求,調整這個參數的值。因為memory tuner之間會在不同的memory consumer間交易memory資源,因此最少必需有二個以上的memory consumer被enabled。

Locklist值的優化會和maxlocks這個參數一起考慮,因些若取消locklist的自動化調整會同時取消掉maxlocks這個參數的自動化調整。另外,這個參數的自動化調整要運作,前提是 self_tuning_mem這個參數需被設為ON。

在32 bit的平台下,每個lock需要48或96 byte的lock list空間,決定的因子在於

  • 對資料庫物件來說,若這是一個全新的lock(即該物件沒有被其它lock hold住),則需96 byte
  • 若該物件已經有其它的lock了,則只需48byte來記錄這個額外的lock

在64 bit的平台下(HP-UX/PA-RISC除外),每個lock需要64或128 byte,決定的因子在於

  • 對資料庫物件來說,若這是一個全新的lock(即該物件沒有被其它lock hold住),則需128byte
  • 若該物件已經有其它的lock了,則只需64byte來記錄這個額外的lock

對於HP-UX/PA-RISC的64 bit 平台,每個lock的需求則為 80或160 byte

當某個應用程式使用的lock list空間百分比大於maxlocks的設定值,資料庫就會進行lock escalation,把原來的record lock升級成table lock。雖然escalation的動作不會花太久時間,但是lock住整個table會大大降低concurrency,且降低資料庫在存取這些被lock的table的效能。因此,為了控制lock list的使用空間,建議注意下列事項

  • 儘早進行commit,以儘快釋放lock
  • 當做大量update時,在update前使用table lock鎖住整個表格,這樣只會產生一個lock,節省lock list的使用,不過這樣會降低該表格的concurrency。另外,也可以用ALTER TABLE的LOCKSIZE option來控制針對該table,如何進行lock。若使用到 Repeatable Read的isolation level的話,會自動造成 table lock
  • 儘量使用Cusor Stablity isolation level來減少share lock的數目。在不影響應用程式的integrity的前提下,建議使用Uncommited Read而不是Cusor Stability isolation,可進一步減少lock的數目
  • locklist值設為自動,資料庫會自動增加locklist的空間,以避免 lock escalation或 lock滿掉的狀況

一但lock list滿了,效能會因為lock escalation的關係而降低。除此之外,deadlock的狀況也會增加,而造成有些交易會被rolled back。當lock滿了,應用程式會收到 SQLCODE -912的錯誤訊息

建議事項:

如果常因lock escalation而造成效能的降低,建議將locklist參數或maxlocks參數值調大。若要觀察lock escalation的狀況,可以使用 database system monitor來觀察lock_escals這個monitor element。

資料來源:http://publib.boulder.ibm.com/infocenter/db2luw/v9//topic/com.ibm.db2.udb.admin.doc/doc/r0000267.htm?resultof=%22%6c%6f%63%6b%6c%69%73%74%22%20

沒有留言:

張貼留言