oracle latch_自譯文_(1)

wisdomone1發表於2010-04-02
latch學習

低階的機制,用於序列級訪問控制對於比如cache buffer header等記憶體結構

1,僅僅是一種簡單的記憶體結構
2,通常大小在100-200b
3,被封裝成一個個小型的狀態物件結構
4,固定在固定sga(父latch)或者共享池中
5,它是透過硬體原子cas(比較與交換)的指令來實現,比如在intel平臺是lock CMPXCHG
6,從oracle8後開始共享
    用於一些高階ops特性
    比如,當檢查buffer chain時,用於cache buffers chains latch的獲取



什麼是latch 競爭
我想得到一個latch,但此時已經有人在使用或佔用它了
 以上情況可分兩種分支:
    如果gets(請求)是採用非等待模式,返回給呼叫者失敗資訊
    如果gets(請求)採用樂意等待模式,繼續嘗試gets

多次嘗試gets,這種情況就叫spinning


仍舊得不到latch,就沉睡一些時間
 在latch 世界中,10ms是一個相當長的時間
 _max_exponential_sleep
 _max_sleep_holding_latch


可能被釋放latch的程式所喚醒
   不用於所有的latch,因為它需要latch waiter列表的掃描
   透過使用_latch_wait_posting引數來控制


v$session_event

v$session_wait

v$latch/v$latch_misses

v$latchholder


latch troubleshoting

1, 確認哪些會話有問題
2,找到會話等待最多的latch是什麼
3,識別出競爭中相關的子latch
4,確認kernel碼層次等待latch獲取是已經完成了嗎
    statspack,awr or v$latch_misses
    x$ksuprlat or x$ksupr if problem with some sessions




kgx=kernel generic mutex

自oracle10.2引入
   從物理上像latch(一塊或一片記憶體)
      更加輕量級
      更小

能內嵌到其它結構中(KGL HD)

客戶端可以定義很靈活的spin/yield/wait策略

不計算gets,spingets,yields,僅僅只統計出來waits


kgx mutexes不是os mutexes啊,切記喲


library cache的mutexes
用於保護v$sqlstats buckets
   oradebug dump cursor_stats 1

用於pinning library cache cursors和父級檢驗(查)
   假如_kks_use_mutex_pin=true(預設從10.2.0.2)
   oradebug dump librarycache level 10

在11g中mutexes用於代替library cache latches
   11g中有131072 mutexes代替67之多的library cache latches

在11g中知名(已知)的mutex 型別:
   cursor parent
   cursor pin
   cursor stat
   library cache
   hash table


v$session_wait
         mutex睡眠次數很好表示出.p1,p2,p3的值表示在處於競爭狀態的library cache 物件的hash value是什麼,持有mutex的會話是哪個?
         v$event_name和v$session_wait的text列有p1,p2,p3含義的描述
  有如下一些等待事件:
     cursor:mutex S
     cursor:mutex X
     library cache:mutex S
     library cache:mutex X


v$mutex_sleep
   顯示等待時間,以及對於各種型別的mutex和位置的睡眠次數
v$mutex_sleep_history
   顯示最近每個mutex睡眠的發生情況
   根據每個可迴圈使用的buffer,會有更加詳細的內容


systemstate dumps
   10



   
   
 

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

相關文章