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

wisdomone1發表於2010-04-19
dlm latches
   例項鎖(instance locks)用於例項內部的鎖及ops例項的通訊.sga每個部分對應的資料結構,就需要instance locks.一系列的latchwks保護這些結構.
oracle8.0中,這些latch的統計資訊可以查詢v$dlm_latch.從oracle8.1開始,dlm(distributed lock manager) latching statistics合併到了v$latch中.


advanced latching control
    一些os支援多處理器(處理)控制的工具(功能)。授權或超級使用者就可以在不同方式下影響它的cpu排程機制.只要可以,oracle可以確定的多處理器控制特徵。
如下特徵影響latching 機制.


preemption control  --搶佔,優先控制
    允許oracle在進行非常重要的效能操作情況下,暫停正常的os process,當它持有一個latch時。這意味著oracle process繼續使用cpu執行直至顯示開啟preemption機制,或者
出現如i/o請求操作的os event,訊號量操作,或頁中斷(page fault).這個程式不能在最後的時間片,被更高最佳化級的程式預先搶佔,在分時優先順序排程情況下.這意味著latch保護的操作
會快速完成,latch contention的風險會大為減少.如果oracle使用preemption control,預設是開啟的,除非使用了_no_preempt引數.



cpu yielding
    oracle程式在spin期間會讓出cpu。如果有另一個更高階且執行著的程式可以使用cpu,這個程式就會被排程執行,於是yielding process就會放在run queue的最末端,但它保持狀態為runnable.
否則,如沒有發現更高階別的程式使用cpu,程式繼續spin等待它的latch.用_spin_yield_cpu_freq引數控制oracle以何種頻率讓出它的cpu(在spinning時),預設值為_spin_count.如開啟cpu yielding,
這裡兩個引數值一樣,效果就是:程式將開始一個新的spin,不會等待(如果沒有其它程式使用cpu時).因此cpu yielding讓oracle processes以更快速度得到latch,不用花費執行著的cpu time(usable cpu time)





affinity control 傾向性控制

    用它可以停止/重啟開啟正常的os affinity 機制(它以低效方式嘗試繫結一個程式到最後一個cpu週期上).如果一個程式如前一樣執行在相同的cpu上,用於執行的一些記憶體地址及值對(緩衝行)可能仍舊在cpu的cache中。這就極大減少了cpu對於記憶體的訪問.
因此執行速度更快.但是,所有的程式下正在對於一個latch進行spinning,執行速度更快就沒有必要。當程式在等待(持有latch)其它程式需要的資源(就是這個持有latch的程式所佔用的latch)時,更早執行比更快執行更有意義.如有可能,oracle
使用affinity control最佳化 以自動化 方式處理latching.偶爾,為oracle程式繫結特定的處理器,並不建議。否則runnable processes將不會遷移到空閒的cpus上。

    oracle使用multi-processing control特徵,提升大型,高併發oracle instance的效能。,對於latching的影響最大。但是,在一些os中這些特徵用不了,或者普通使用者(如oracle使用者)的程式使用不了.在大多情況下,這些顯式授權配置不是持續性的,因此必把它們放在啟動指令碼中,可以檢視mpctl() system control,就知道os是否支援multi-processing control特徵(對於一些普通使用者)



reference


引數                                           描述
_latch_wait_posting                           當所需latch可以用時,程式能否被waken up

_max_exponential_sleep                        嘗試一次get latch,sleeps的次數會成倍加大。根據exponential backoff演算法,最大到這個引數的值。預設是200 centisecond(8i)

_max_sleep_holding_latch                      exponential backoff演算法下最大允許的sleep(當沉睡程式正持有其它的latch)。預設為4 centiseconds

_no_preempt                                   配置為true(預設),oracle將使用os的preemption control機制,如果可能的話,當持有一個latch時,要減少程式沉睡的風險

_spin_count                                   在程式沉睡前(想獲得一個latch)執行多少次spinning.在單一cpu為1,在多處理器下為2000


_spin_yield_cpu_freq                          控制oracle程式以何種頻率提交(讓出)cpu資源(當程式處於spin中).如果發現一個高優先順序的程式,它就被排程。yielding程式被放於run queue的末端(非沉睡).預設是_spin_count






statistics


統計列                        資料來源                           描述
immediate gets                v$latch                          no-wait mode下成功執行latch get request次數

immediate misses              v$latch                          與上相反

gets                          v$latch                          樂觀模式已完成(結束)的得到latch的次數


misses                        v$latch                          gets的個數(限於requested latch正被使用)

simple gets                   gets-misses                      不用等待已完成的gets個數

spin gets                     v$latch                          spinning時得到latch的gets次數,但沒有sleep

sleep gets                    misses-spin gets                 需要一個或多個sleeps的gets個數


spin get rare                 100*spin gets/misses             spinning效力的度量


spin cost                     _spin_count*sleeps/misses        spinning成本的度量


sleeps                       v$latch                           程式等待某個latch的sleep次數

sleep1                       v$latch                           曾經sleep的gets次數

sleep2                       v$latch                           再次sleep的gets次數

sleep3                       v$latch                           三次sleep的gets次數


sleep4                       v$latch                           四次

sleep rate                   100*sleep/gets                    度量latch contention的嚴重程度

sleep impact                 sleep的2次方/sleep gets           從總體效能上評估latch sleeps的相對影響


waiters woken                v$latch                           由於latch wait posting機制,waiter接到多少次通知

waits holding latch          v$latch                           持有latch的程式等待某個事件的次數




waits

事件                                       描述
latch activity                             一個程式多次請求一個latch皆失敗,會執行它,檢查是否latch cleanup有必要.這種等待會發生於the activity test和等待latch cleanup時侯


latch free                                 latch free waits僅僅只是另一個latch的沉睡


wait for dlm latch                         對應於latch free waits,但只是針對dlm latches


wait for influx dlm latch                  latch recovery 所需的dml latch

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

相關文章