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。
沒有留言:
張貼留言