ORACLE鎖存器(LATCH)
我的讀書筆記:轉載請註明
鎖存器:
什麼是鎖存器: 鎖存器是存在於ORACLE中用於保證一些記憶體結構一致性的輕量級鎖,為什麼說是輕量級的,應該是鎖存器一般等待的時間較短為了保證不發生死鎖,
什麼是鎖存器: 鎖存器是存在於ORACLE中用於保證一些記憶體結構一致性的輕量級鎖,為什麼說是輕量級的,應該是鎖存器一般等待的時間較短為了保證不發生死鎖,
鎖存器的級別:鎖存器分為0-13 14種模式,在willing-to-wait模式下只能獲得更改等級的鎖存器,如果想獲得同等級或者更低 級別的鎖存器,就必須使用no-wait模式進行獲取。如果想檢視鎖存器的等級可以參考v$latch,v$latch_children的LEVEL#欄位。
鎖存器型別:鎖存器型別包括willing-to-wait和no-wait模式
willing-to-wait模式:這個模式就是要一直等待直到獲得鎖存器為止,在初次獲得latch失敗的情況下,latch會進入spin,直到達到_spin_count的值。
(這個引數參考如下:
_spin_count:willing-to-wait 模式的鎖存器在獲得鎖存器失敗的情況下進行迴圈獲取的次數,如果超過了這個次數就進行睡眠,只有1個CPU的機器上不存在自旋 也就是這個引數為1)
如果在spin過程中任然不能得到latch,這個時候就進入sleep,表現在v$session_wait中就是latch:***
進入了睡眠過後等待喚醒也有2中方式,
鎖存器型別:鎖存器型別包括willing-to-wait和no-wait模式
willing-to-wait模式:這個模式就是要一直等待直到獲得鎖存器為止,在初次獲得latch失敗的情況下,latch會進入spin,直到達到_spin_count的值。
(這個引數參考如下:
_spin_count:willing-to-wait 模式的鎖存器在獲得鎖存器失敗的情況下進行迴圈獲取的次數,如果超過了這個次數就進行睡眠,只有1個CPU的機器上不存在自旋 也就是這個引數為1)
如果在spin過程中任然不能得到latch,這個時候就進入sleep,表現在v$session_wait中就是latch:***
進入了睡眠過後等待喚醒也有2中方式,
1、可以在進入超時後喚醒重新進行獲取,如果不能得到任然經理spin,如果還不能再進行睡眠,超時的演算法以1/100秒為單位初次隨眠是1、1、2、2、4、4、8、8、16、16最多為2秒,為神馬引入這樣的機制,因為spin也是相當耗費CPU的,所以引入這樣的機制,避免過多的cpu資源浪費。
2、另外一種方法就是透過鎖存器列表,使用這樣的方式鎖存器很少,比如shared pool,library cache,這種機制說的是使用一個列表來維護等待的程式,如果latch釋放,然後列表中的程式進行競爭獲得latch,列表本生也不是LRU原則,是競爭原則。
no-wait模式:如果程式項獲得比當前latch更低或者相同級別的latch就必須用這樣的方式,這種方式是為了避免死鎖,這樣的模式不存在spin和sleep,能獲取就獲取如果不能獲取,就透過willing-to-wait模式重新按順序獲取,比如我當前LATCH為level 1,3 如果某個程式項獲取2 level 的latch,就透過no-wait模式,如果是失敗就透過2,3的順序重新獲取。
no-wait模式:如果程式項獲得比當前latch更低或者相同級別的latch就必須用這樣的方式,這種方式是為了避免死鎖,這樣的模式不存在spin和sleep,能獲取就獲取如果不能獲取,就透過willing-to-wait模式重新按順序獲取,比如我當前LATCH為level 1,3 如果某個程式項獲取2 level 的latch,就透過no-wait模式,如果是失敗就透過2,3的順序重新獲取。
相關檢視:
透過v$latch,v$latch_children檢視的欄位可以看出
gets 是willing-to-wait模式下需求的次數
misses 是willing-to-wait模式下到睡眠之前獲取失敗的次數
spin_gets 是willing-to-wait模式下透過spin成功獲得latch的次數
sleeps 是willing-to-wait模式睡眠的次數
immediate_gets 就是no_wait模式下獲得鎖存器成功的次數
immediate_misses 就是no_wait模式下獲得鎖存器失敗的次數
wait_time 以毫秒為單位的等待時間
透過v$latch,v$latch_children檢視的欄位可以看出
gets 是willing-to-wait模式下需求的次數
misses 是willing-to-wait模式下到睡眠之前獲取失敗的次數
spin_gets 是willing-to-wait模式下透過spin成功獲得latch的次數
sleeps 是willing-to-wait模式睡眠的次數
immediate_gets 就是no_wait模式下獲得鎖存器成功的次數
immediate_misses 就是no_wait模式下獲得鎖存器失敗的次數
wait_time 以毫秒為單位的等待時間
如果有誤請大蝦指出。thx
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7728585/viewspace-723160/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle Latch及latch衝突Oracle
- 全面解析9i以後Oracle Latch閂鎖原理Oracle
- Oracle Latch & LockOracle
- 【鎖】Latch、lock、 pin的區別
- Oracle KSL Latch 管理層 與 Latch管理Oracle
- ORACLE LOCK,LATCH,PINOracle
- Oracle Latch 說明Oracle
- [Oracle Script] check latchOracle
- oracle latch優化Oracle優化
- oracle 11g latch之v$latch系列二Oracle
- oracle 11g latch之v$latch系列三Oracle
- [Oracle Script] latch holderOracle
- Oracle中的redo copy latchOracle
- FPGA注意事項——鎖存器的產生FPGA
- Systematic Latch Contention Troubleshooting in OracleOracle
- Oracle效能優化--Latch介紹Oracle優化
- 深入理解Oracle中的latchOracle
- oracle latch_自譯文_(1)Oracle
- oracle latch_自譯文_(2)Oracle
- oracle latch_自譯文_(3)Oracle
- (轉):學習Oracle動態效能表-(11)-v$latch$ v$latch_childrenOracle
- 如何檢測被鎖住的Oracle儲存過程Oracle儲存過程
- ORACLE等待事件latch: cache buffers chainsOracle事件AI
- Oracle中latch和lock的區別Oracle
- oracle 11g latch之系列一Oracle
- 【鎖】Oracle鎖系列Oracle
- 基於oracle11g生成systemstate dump檔案分析持鎖會話有等待鎖會話及閂latch之系列三Oracle會話
- oracle 11g latch之v$latch和systemstate dump檔案之系列四Oracle
- oracle一次卡頓案例(六)-latch freeOracle
- oracle鎖Oracle
- Oracle觸發器死鎖問題解決Oracle觸發器
- oracle儲存過程和觸發器Oracle儲存過程觸發器
- oracle的TM鎖、TX鎖Oracle
- oracle 查詢鎖 && 解鎖Oracle
- Oracle查詢鎖、解鎖Oracle
- 【BUFFER】Oracle buffer cache之 latch 學習記錄Oracle
- oracle常見異常等待——latch處理思路Oracle
- ORACLE Active dataguard 一個latch: row cache objects BUGOracleObject