探索系列——神人steve adams之著oracle8i interal service(七)
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
例項鎖(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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 探索系列_神人steve adams之著oracle8i interal service(一)Oracle
- 探索系列_神人steve adams之著oracle8i interal service(二)Oracle
- 探索系列_神人steve adams之著oracle8i interal service(三)Oracle
- 探索系列_神人steve adams之著oracle8i interal service(四)Oracle
- 探索系列——神人steve adams之著oracle8i interal service(五)Oracle
- 探索系列——神人steve adams之著oracle8i interal service(六)Oracle
- 探索系列——神人steve adams之著oracle8i interal service(八)Oracle
- 探索系列——神人steve adams之著oracle8i interal service(九)Oracle
- 探索系列——神人steve adams之著oracle8i interal service(十)Oracle
- 探索系列——神人steve adams之著oracle8i interal service(十一)Oracle
- 探索系列——神人steve adams之著oracle8i interal service(十二)Oracle
- 探索系列——神人steve adams之著oracle8i interal service(十三)Oracle
- 探索系列——神人steve adams之著oracle8i interal service(十四)Oracle
- 探索系列——神人steve adams之著oracle8i interal service(十五)Oracle
- 探索系列——神人steve adams之著oracle8i interal service(十六)Oracle
- 探索系列——神人steve adams之著oracle8i interal service(十七)Oracle
- 探索系列——神人steve adams之著oracle8i interal service(十八)Oracle
- 探索系列——神人steve adams之著oracle8i interal service(十九)Oracle
- 探索系列——神人steve adams之著oracle8i interal service(二十)Oracle
- 探索系列——神人steve adams之著oracle8i interal service(二十一)Oracle
- Steve Adams的《Oracle8i internal services for waits, latches, locks》試譯OracleAI
- script--by Steve Adams
- script--by Steve Adams--hidden_parameters.sqlSQL
- HTB系列之七:BastardAST
- Android探索之Service全面回顧及總結Android
- 第七章:四大元件之Service元件
- 探索C#之系列目錄導航C#
- Akka 系列(七):Actor 持久化之 Akka persistence持久化
- Spring Security系列之授權過程(七)Spring
- Dubbo系列之 (七)網路層那些事(2)
- kubernetes實踐之七:安全機制API Server認證之Service Account TokenAPIServer
- 沒閒著系列 18
- ClickHouse學習系列之七【系統命令介紹】
- 手記系列之七 ----- 分享Linux使用經驗Linux
- 深入Weex系列(七)之Adapter元件原始碼解析APT元件原始碼
- ffmpeg分析系列之七(開啟輸入的流)
- 螞蟻金服 Service Mesh 實踐探索
- 探索es6系列之—-Generator生成器函式函式