Oracle RAC CacheFusion 系列十五:Oracle RAC CRServer Part Two

沃趣科技發表於2019-10-14

一致性讀請求  

ktrget請求呼叫流程,呼叫kcbgtcr獲取最佳快取區域用以構建CR緩衝區,然後呼叫ktrgcm應用undo構建可用的CR快取。kcbgtcr計算掃描hash桶,呼叫ktrexf查詢最佳快取區。如果在快取區域在本地則結束,如果不在本地則呼叫kcbzib獲得快取區域。kcbzib請求呼叫kcbzgb獲得一個buffer並且設定buffer的狀態為Reading。

ktrgcm統計資訊遞增條件:

如果應用UNDO並且CLEANOUT,則“cleanouts and rollbacks - consistent read”計數增加。

如果應用UNDO但是沒有執行CLEANOUT,則“rollbacks -consistent read”計數增加。

如果沒有應用UNDO但執行CLEANOUT,則“cleanouts- consistentread”計數增加。

如果沒有應用UNDO並且也沒有執行CLEANOUT,則“no work - consistentread”計數增加。

注:這裡的cleanout指的是Oracle延遲塊清除。

Oracle RAC CacheFusion 系列十五:Oracle RAC CRServer Part Two


Oracle RAC CacheFusion 系列十五:Oracle RAC CRServer Part Two


注:如果LE轉換期間發生超時,則設定KCBBHFCR標誌位。如果DLM轉換成功,則LE模式> =請求模式。 

Oracle根據LE持有模式與CR請求模式的相容性關係決定呼叫kclcls是否需要開啟LE(第一次使用)或進行轉換LE,即lock open,lock convert。

Oracle通過acquiring !=0或者releasing !=0來判斷LE是否處於事務中。

Oracle RAC CacheFusion 系列十五:Oracle RAC CRServer Part Two


在kclscrs流程中,它根據三個判斷來確定接下來執行的請求動作(lock open,lock convert,predecessor read)。

從下面流程圖中我們知道只有當buffer上存在全域性的鎖,鎖元素為open狀態並且快取中沒有任何PI,那麼這個時候系統就會呼叫kjbpredread進行predecessor read(LWR)進行當前塊的請求動作記錄等待事件“global cache current blocks xxxx”。lock open,lock convert均為一致性塊構造的過程所以記錄的等待為“global cache CRblocks xxxx”。

Oracle RAC CacheFusion 系列十五:Oracle RAC CRServer Part Two

Oracle RAC CacheFusion 系列十五:Oracle RAC CRServer Part Two

  請求訊息傳遞  

1.前臺程式申請LE。

2.設定LE請求標識0x2。

3.前臺程式向master節點的lms程式提交請求資訊。

4.前臺程式開始等待“global cache CR request”。

5.master節點的LMS程式通知請求節點LMS程式已完成鎖授權。

6.LMS申請取消標識0x2。

7.本地LMS程式通知前臺程式,前臺程式結束等待。

  請求塊傳遞  

1.前臺程式申請LE。

2.設定LE請求標識0x2。

3.前臺程式向master節點的lms程式提交請求資訊。

4.前臺程式開始等待“global cache CR request”。

5.master節點LMS申請請求建立CR塊。

6.master節點LMS程式直接將CR塊傳遞給請求例項的前臺程式。

Oracle RAC CacheFusion 系列十五:Oracle RAC CRServer Part Two


如果輕量級工作規則LWR在CR塊正在構建時觸發,則X$KCLCRST.LIGHTn會遞增,觸發條件:

找到具有相同AFN和BLOCKNUM的緩衝區,但緩衝區中的object-id與請求者提交的object-id不同(在一致讀取<is>開始之後和結束之前,物件被truncate或drop)。

等待WRITE COMPLETE。

等緩衝區處於READING狀態。

請求空閒緩衝區。

等待“free buffer wait”。

從磁碟到緩衝區快取的讀取塊。

等待REDO空間。

等待ITL。

如果找到具有“modification starte”位的塊,則X$KCLCRST.LIGHT1遞增; 如果緩衝區處於例項RECOVERY狀態,則X$KCLCRST.LIGHT2遞增。

Oracle RAC CacheFusion 系列十五:Oracle RAC CRServer Part Two

  kclgcr  

將CR緩衝區傳送給請求者後,將更新以下統計資訊:

“global cache cr block build time”,記錄在ktrget或kcbgtcr中花費時間。

“global cache cr block log flush time”,記錄在LOG FLUSH階段花費時間。

“global cache cr block send time”,記錄CR塊傳送花費的時間。

注意:每次緩衝區修改時都會重置LE.FAIRNESS_COUNTER。


Oracle RAC CacheFusion 系列十五:Oracle RAC CRServer Part Two

Oracle RAC CacheFusion 系列十五:Oracle RAC CRServer Part Two

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

相關文章