讀書筆記-高階owi與oracle效能調整-latch和lock
鎖存器和鎖存在的理由就是保護在同時工作中所使用的Oracle資源.若想解決鎖存器和鎖上發生的效能問題,不僅需要掌握鎖存器和鎖的工作方式,而且對具體資源等級上使用的鎖存器和鎖,也需要有比較詳細的知識.
Oracle為了降低與鎖存器相關工作的負荷,不保障鎖存器獲得次序.
鎖存器所保護的資源就是SGA.訪問SGA的所有程式,在獲得相應管轄的鎖存器後,方可訪問.
特定記憶體區域使用多個子鎖存器.相反,部份記憶體區域為了同步化,只使用一個鎖存器.子鎖存器的使用不只取決於記憶體區域的大小,還主要取決於記憶體結構和演算法 應透過多少鎖存器進行管理.父鎖存器和獨立鎖存器,可以透過v$latch_parent檢視觀察;子鎖存器,則可以透過 v$latch_children檢視觀察.隨著oracle版本的不斷更新,獨產鎖存器變為父,子鎖存器的情況較多,子鎖存器的數量也不斷在更新.鎖自 身也存在於SGA共享池區域的記憶體結構體,透過鎖存器受到保護.
在擁有一個以上鎖存器的狀態下,還想獲得其它鎖存器的程式,就必須獲得比最後一次獲得的鎖存器更高等級的鎖存器.如果因某種原因,要獲得比當前擁有的鎖存器等級低或相同的鎖存器時,會以NO-wait模式獲取,以防止死鎖引起的無限等待.
鎖存器基本上使用Exclusive模式.因此,第一瞬間只能有一個程式擁有鎖存器.但是對特定鎖存器也可以使用共享模式.
willing-to-wait模式下的鎖存器獲得過程中失敗,則迴圈適當的次數,並試圖重新獲取鎖存器,它的迴圈次數與_spin_count(預設值 是2000)引數值相同.最初的鎖存器獲得失敗後不會馬上睡眠,而是自旋(spin),其理由是:第一,因為期待其它的程式在很短時間內釋放鎖存器;第 二,因為如果陷入睡眠狀態,在OS層面上會發生Context switching,這部份的資源消耗比起使用較少的CPU進行自旋更多.
獲得鎖存器後,欲修改共享記憶體的程式,在修改前將要修改的內容記錄到鎖存器恢復區(altch recovery area).如果持有鎖存器的程式結束,則PMON呼叫對各個鎖存器所對應的清除功能.各鎖存器的清除功能是利用鎖存器恢復區所記錄的資訊,將共享記憶體恢 復原狀,此項工作結束後PMON將釋放鎖存器.為獲得鎖存器而等待的程式在嘗試4次失敗後,向PMON發出檢查持有相應鎖存器的程式是否存在的請求.
v$latch欄位說明:
gets:willing-to-wait模式下睡眠之前的鎖存器請求次數.
misses:willing-to-wait模式下睡眠之前的鎖存器的獲得失敗次數.
spin_gets:willing-to-wait模式下睡眠之前的自旋階段的獲得成功次數.
sleeps:willing-to-wait模式下睡眠次數.
immediate_gets:no-wait模式下鎖存器獲得成功次數.
immediate_misses:no-wait模式下鎖存器獲得失敗次數.
wait_time:為獲得鎖存器而等待的時間(ms)
如果在willing-to-wait模式下的misses/gets值和no-wait模式下的immediate_misses/(immediate_gets+
immediate_misses)值在1%以上,也可以判斷髮生了鎖存器爭用.或者用wait_time,當等待時間大於CPU時間一定值時,也可以判斷為發生了鎖存器爭用.透過等待事件的等待時間也可以獲得同樣的資訊.
鎖的名稱和資源名稱是相同的.例如TM鎖保護TM(table)資源.
鎖的模式:
0:none
1:null(N)
2:sub-shared(ss)或row-shared(rs)
3:sub-exclusive(sx)或row-exclusive(rx)
4:shared(s)
5:shared-sub-exclusive(ssx)或shared-row-exclusive(srx)
6:exclusive(x)
Oracle為了降低與鎖存器相關工作的負荷,不保障鎖存器獲得次序.
鎖存器所保護的資源就是SGA.訪問SGA的所有程式,在獲得相應管轄的鎖存器後,方可訪問.
特定記憶體區域使用多個子鎖存器.相反,部份記憶體區域為了同步化,只使用一個鎖存器.子鎖存器的使用不只取決於記憶體區域的大小,還主要取決於記憶體結構和演算法 應透過多少鎖存器進行管理.父鎖存器和獨立鎖存器,可以透過v$latch_parent檢視觀察;子鎖存器,則可以透過 v$latch_children檢視觀察.隨著oracle版本的不斷更新,獨產鎖存器變為父,子鎖存器的情況較多,子鎖存器的數量也不斷在更新.鎖自 身也存在於SGA共享池區域的記憶體結構體,透過鎖存器受到保護.
在擁有一個以上鎖存器的狀態下,還想獲得其它鎖存器的程式,就必須獲得比最後一次獲得的鎖存器更高等級的鎖存器.如果因某種原因,要獲得比當前擁有的鎖存器等級低或相同的鎖存器時,會以NO-wait模式獲取,以防止死鎖引起的無限等待.
鎖存器基本上使用Exclusive模式.因此,第一瞬間只能有一個程式擁有鎖存器.但是對特定鎖存器也可以使用共享模式.
willing-to-wait模式下的鎖存器獲得過程中失敗,則迴圈適當的次數,並試圖重新獲取鎖存器,它的迴圈次數與_spin_count(預設值 是2000)引數值相同.最初的鎖存器獲得失敗後不會馬上睡眠,而是自旋(spin),其理由是:第一,因為期待其它的程式在很短時間內釋放鎖存器;第 二,因為如果陷入睡眠狀態,在OS層面上會發生Context switching,這部份的資源消耗比起使用較少的CPU進行自旋更多.
獲得鎖存器後,欲修改共享記憶體的程式,在修改前將要修改的內容記錄到鎖存器恢復區(altch recovery area).如果持有鎖存器的程式結束,則PMON呼叫對各個鎖存器所對應的清除功能.各鎖存器的清除功能是利用鎖存器恢復區所記錄的資訊,將共享記憶體恢 復原狀,此項工作結束後PMON將釋放鎖存器.為獲得鎖存器而等待的程式在嘗試4次失敗後,向PMON發出檢查持有相應鎖存器的程式是否存在的請求.
v$latch欄位說明:
gets:willing-to-wait模式下睡眠之前的鎖存器請求次數.
misses:willing-to-wait模式下睡眠之前的鎖存器的獲得失敗次數.
spin_gets:willing-to-wait模式下睡眠之前的自旋階段的獲得成功次數.
sleeps:willing-to-wait模式下睡眠次數.
immediate_gets:no-wait模式下鎖存器獲得成功次數.
immediate_misses:no-wait模式下鎖存器獲得失敗次數.
wait_time:為獲得鎖存器而等待的時間(ms)
如果在willing-to-wait模式下的misses/gets值和no-wait模式下的immediate_misses/(immediate_gets+
immediate_misses)值在1%以上,也可以判斷髮生了鎖存器爭用.或者用wait_time,當等待時間大於CPU時間一定值時,也可以判斷為發生了鎖存器爭用.透過等待事件的等待時間也可以獲得同樣的資訊.
鎖的名稱和資源名稱是相同的.例如TM鎖保護TM(table)資源.
鎖的模式:
0:none
1:null(N)
2:sub-shared(ss)或row-shared(rs)
3:sub-exclusive(sx)或row-exclusive(rx)
4:shared(s)
5:shared-sub-exclusive(ssx)或shared-row-exclusive(srx)
6:exclusive(x)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28539951/viewspace-1264946/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 讀書筆記-高階owi與oracle效能調整-io筆記Oracle
- 讀書筆記-高階owi與oracle效能調整-segment筆記Oracle
- 讀書筆記-高階owi與oracle效能調整-transaction筆記Oracle
- 讀書筆記-高階owi與oracle效能調整-oracle internal筆記Oracle
- 讀書筆記-高階owi與oracle效能調整-network筆記Oracle
- 讀書筆記-高階owi與oracle效能調整-share pool筆記Oracle
- 讀書筆記-高階owi與oracle效能調整-cache buffer筆記Oracle
- <轉>oracle效能調整讀書筆記(1)Oracle筆記
- <轉>oracle效能調整讀書筆記(2)Oracle筆記
- <轉>oracle效能調整讀書筆記(3)Oracle筆記
- <轉>oracle效能調整讀書筆記(4)Oracle筆記
- <轉>oracle效能調整讀書筆記(5)Oracle筆記
- Oracle效能調整筆記Oracle筆記
- oracle高階效能調整培訓pptOracle
- oracle效能調整筆記[zt]Oracle筆記
- 【筆記】lock and latch筆記
- OWI效能診斷與調整實踐指南(1~4)
- 效能與RAC 讀書筆記筆記
- swift高階運算子-讀書筆記Swift筆記
- 【效能調整】等待事件(九) latch原理事件
- C#高階程式設計 讀書筆記C#程式設計筆記
- 《整數分解》讀書筆記筆記
- Oracle Latch & LockOracle
- MySQL管理之道_ 效能調優、高可用與監控(第2版)-by 賀春暢-讀書筆記MySql筆記
- oracle高效能sql調整-筆記1 (轉發)OracleSQL筆記
- python高階程式設計讀書筆記(一)Python程式設計筆記
- [書籍] Oracle Database 10g效能調整與優化OracleDatabase優化
- 筆記: Oracle 11g效能調整(11.2)目錄筆記Oracle
- ORACLE LOCK,LATCH,PINOracle
- oracle 效能調整Oracle
- 《CSS重構:樣式表效能調優》讀書筆記CSS筆記
- Objective-C高階程式設計讀書筆記(二)Object程式設計筆記
- Objective-C高階程式設計讀書筆記(一)Object程式設計筆記
- Oracle效能調整之--DML語句效能調整Oracle
- Oracle中latch和lock的區別Oracle
- Objective-C高階程式設計讀書筆記之GCDObject程式設計筆記GC
- Objective-C高階程式設計讀書筆記之blocksObject程式設計筆記BloC
- oracle效能調整(1)Oracle