探索系列——神人steve adams之著oracle8i interal service(十五)

wisdomone1發表於2010-04-25
fine-grained locking
    沒有透過gc_files_to_locks及gc_rollback_locks分配任何hashed lock的資料檔案和rollback segments,或者沒有顯式提供lock elements,使用
fine-grained locking,除非定義一個替代的預設bucket(bucket 0).在fine-grained locking中,每個資料塊是由一系列未分配的releasable lock elements的一個專有lock
element來保護的.因為任何時間一個資料塊僅僅只會被每個lock element保護,fine-grained locking也叫dba(data block address)資料塊地址locking.fine-grained locking也用於
所有的block classes塊類,而不僅僅是資料塊和rollback segment blocks.這些所謂的次級(次要,二流的)minor塊型別包括:segment header blocks,free list blocks及extent map blocks.

    如果fine-grained locking用於某些資料檔案,假如重要的次級塊類如:segment header block經常會從buffer cache中老化,這些塊的lock elements可以被重用,這會發生於這些塊再次被讀取之前.
這可能導致例項鎖獲取和資源分配的過重成本或負荷.對於這種情況,為了提升例項鎖的持有效能,你應該考慮為這些次級的塊級型別,在每一個獨立的bucket中,保留一些lock elements,這個是透過配置
_gc_class_locks引數.




the lock element free list
    當與fine-grained locking相關的一個block被放入到快取中,會向一個hash table諮詢,為了確定塊的一個lock element是否被保護preserved.這是在kcl name table latch保護進行的.如有必要,
一個lock element會從lock element lru chain的lru(least recently used)末端來分配,這一切是受kcl freelist latch所保護.注意:雖然這個latch的名字,這個latch所保護的一個資料結構就是一個
包含空閒(未用)和在用的lock element的lru chain.這個術語,lock element free list,它只是lock element lru chain末端的一系列自由lock elements (free lock element)的另一個名字.

    在大多數情況下,一直使得free list的lock element可用,這是最好的或最合適的.x$kclfx包括一些free list 統計資訊.特別的是,lwm列包含free list length 自由列表長度的low-water mark(譯為:低水位線標誌).
lock elements會返回到lru chain 的末端mru(most recently used),當它們所保護的buffer被重用時.如果被保護的塊被放入到cache,之後lock element被重用,lock element可以從free list中被回收.


   在超大記憶體資料庫環境下(vlm),擁有更少的lock element比在fine-grained locking環境所對應的cache buffer數量,這樣會更合理.不是說這裡沒有充足的記憶體給lock elements和例項鎖,而是說擁有大量的例項鎖會極大擴充套件
或加大例項鎖重新分配情況下的降低了可用性的時間範圍或週期.在這種情況下,指定的lock elements根據所需要會以lru 次序進行重用.如果一個lock element準備重用時,有一個程式必須等待(has to wait),它會等待一個global
cache freelist wait.這個等待事件的唯一引數就是lock element number.



pcm lock acquisition
    當一個塊被放入快取中,buffer cache lru chain中的一個buffer會被選中進行重用,會話分配一個buffer 控制程式碼和這個buffer一起工作work with.首先它必須從lock element 中的buffer header中取消連結unlink,這個buffer header會儲存被保護的以前的快取的塊, 如要可能的話.
然後,它必須連結buffer header和這個新塊的lock element.這些操作是在基於這個lock element的kcl lock element parent latch保護中進行的.
 
    如果配置了多個lckn程式,lock element array會在這些lckn程式間進行分配或叫分割,每個獨立的一系列的lock element parent latches用於每個分割槽.每個set中latch數量是由_gc_latches來定義的,預設它是cpu count的2倍.

   
    當然,除了僅僅連結一個新塊的buffer和它的lock element的工作外,還有更多的事要作.特別的是,一個正確模式的pcm 例項鎖需要在lock element上獲取.(也就是獲取lock element的pcm instance lock).lckn後臺程式實行這個任務或工作.對於
fine-grained locks,它們也必須release例項鎖和先前這個lock element所持有的資源.


    當一個前臺程式需要獲取或轉化一個特定的lock element的一個pcm instance lock時,它分配一個名叫lock context object鎖上下文物件的結構.這個lock context object被連結到lock element,完全或可以足夠描述或記錄所執行的操作了.
前臺程式然後給lckn程式發一個通知,等待lckn程式完成locking 操作和清理lock context object.
  
     當前臺程式等待lckn程式獲取一個鎖時,它會在global cache lock waits上進行沉睡.這些等待事件(前面)的超時是秒.




              wait parameters(global cache lock waits)


引數                                                         描述
p1                                                           資料塊的檔案編號

p2                                                           檔案中資料塊的塊號

p3                                                            lock element編號,或者次級塊鎖獲取的塊型別





     當一個程式等待一個global cache lock wait,因為一個blocking lock被一個遠端例項持有,具體細節可以檢視gv$dlm_locks.這個資源名字是由鎖型別和兩個鎖標識來構成的.對於pcm instance lock的鎖型別是bl(block lock).第一個標識是hased locking的lock element編號,
對於fine-grained locking是資料塊地址dba.第二個標識就是塊的型別,具體如下:



block class塊型別                                                      class description型別描述

1                                                                       data blocks
2                                                                       sort blocks
3                                                                       deferred rollback segemnt blocks

4                                                                       segment header blocks

5                                                                       deferred rollback segment header blocks

6                                                                       free list blocks
7                                                                       extent map blocks

8                                                                       space management bitmap blocks
9                                                                       space management index blocks

10                                                                      unused

11+2r                                                                   segment header block for rollback segment r

12+2r                                                                   data blocks for rollback segment r
 


   

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

相關文章