讀書筆記-高階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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ORACLE LOCK,LATCH,PINOracle
- swift高階運算子-讀書筆記Swift筆記
- python高階程式設計讀書筆記(一)Python程式設計筆記
- C#高階程式設計 讀書筆記C#程式設計筆記
- MySQL 8.0 Reference Manual(讀書筆記66節--locking read 與lock)MySql筆記
- 《讀書與做人》讀書筆記筆記
- 《CSS重構:樣式表效能調優》讀書筆記CSS筆記
- 高效能JavaScript 重排與重繪 讀書筆記JavaScript筆記
- 《高效能JavaScript》讀書筆記JavaScript筆記
- 程式碼整潔之道--讀書筆記(7)筆記
- 程式碼整潔之道--讀書筆記(1)筆記
- 程式碼整潔之道--讀書筆記(2)筆記
- 程式碼整潔之道--讀書筆記(13)筆記
- 程式碼整潔之道--讀書筆記(14)筆記
- 程式碼整潔之道--讀書筆記(12)筆記
- 程式碼整潔之道--讀書筆記(10)筆記
- 程式碼整潔之道--讀書筆記(6)筆記
- 程式碼整潔之道--讀書筆記(5)筆記
- 程式碼整潔之道--讀書筆記(9)筆記
- 程式碼整潔之道--讀書筆記(4)筆記
- 程式碼整潔之道--讀書筆記(3)筆記
- 程式碼整潔之道--讀書筆記(11)筆記
- 讀書筆記-程式碼整潔之道(一)筆記
- 調整Caps Lock和Shift大小寫控制
- Redis基礎、高階特性與效能調優Redis
- Redis 基礎、高階特性與效能調優Redis
- 《高效能JavaScript》讀書筆記①載入和執行JavaScript筆記
- ORACLE OWI介紹Oracle
- oracle學習筆記(十一) 高階查詢Oracle筆記
- 【前端效能優化】高效能JavaScript讀書筆記前端優化JavaScript筆記
- JavaScript 高階程式設計 第三章 讀書筆記(1)JavaScript程式設計筆記
- 讀書筆記之《深入理解Java虛擬機器:JVM高階特性與最佳實踐》筆記Java虛擬機JVM
- 黑客與畫家讀書筆記黑客筆記
- 《C缺陷與陷阱》讀書筆記筆記
- 《JavaScript 高階程式設計》精讀筆記JavaScript程式設計筆記
- 《JavaScript 高階程式設計》 讀書筆記--從原型鏈複習繼承JavaScript程式設計筆記原型繼承
- MySQL 8.0 Reference Manual(讀書筆記74節--Spin Lock Polling & Purge Configuration)MySql筆記
- 讀書筆記筆記
- [swift進階]的讀書筆記寫完啦~Swift筆記