Oracle RAC CacheFusion 系列十五:Oracle RAC CRServer Part Two
一致性讀請求
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延遲塊清除。
注:如果LE轉換期間發生超時,則設定KCBBHFCR標誌位。如果DLM轉換成功,則LE模式> =請求模式。
Oracle根據LE持有模式與CR請求模式的相容性關係決定呼叫kclcls是否需要開啟LE(第一次使用)或進行轉換LE,即lock open,lock convert。
Oracle通過acquiring !=0或者releasing !=0來判斷LE是否處於事務中。
在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”。
請求訊息傳遞
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塊傳遞給請求例項的前臺程式。
如果輕量級工作規則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遞增。
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。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28218939/viewspace-2659840/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle RAC Cache Fusion 系列十四:Oracle RAC CR Server Part OneOracleServer
- Oracle RAC Cache Fusion 系列十:Oracle RAC Enqueues And Lock Part 1OracleENQ
- Oracle RAC Cache Fusion 系列十七:Oracle RAC DRMOracle
- Oracle RAC Cache Fusion系列十八:Oracle RAC Statisticsand Wait EventsOracleAI
- Oracle RAC Cache Fusion 系列九:Oracle RAC 分散式資源管理(二)Oracle分散式
- Oracle RAC Cache Fusion 系列八:Oracle RAC 分散式資源管理(一)Oracle分散式
- oracle RACOracle
- Oracle 11.2 DataGuard RAC To RAC搭建Oracle
- ORACLE RAC clusterwareOracle
- 【RAC】Oracle RAC如何修改心跳網路Oracle
- Oracle RAC Wait EventsOracleAI
- oracle rac 增加磁碟Oracle
- Oracle RAC Cache Fusion 系列一:基礎概念Oracle
- 【RAC】Oracle rac 如何修改公網及vipOracle
- Oracle RAC+DG搭建Oracle
- Oracle RAC更新補丁Oracle
- Oracle RAC新增節點Oracle
- 4.2.1.12 規劃 Oracle RACOracle
- Oracle RAC自啟動Oracle
- Networker備份oracle racOracle
- Oracle:RAC 程式簡介Oracle
- G003-ORACLE-INS-RAC-01 ORACLE 19C RAC Ins ON OEL 7.8Oracle
- 【BUILD_ORACLE】Oracle 19c RAC搭建(六)建立RAC資料庫UIOracle資料庫
- Oracle RAC一鍵部署004(RAC引數校驗)Oracle
- 【RAC】Oracle RAC上線測試場景介紹Oracle
- Oracle RAC序列效能測試Oracle
- oracle RAC手動配置互信Oracle
- Oracle RAC Cache Fusion 系列十三:PCM資源訪問Oracle
- Oracle:Oracle RAC 11.2.0.4 升級為 19cOracle
- 【RAC】Oracle rac修改IP地址及埠號命令參考Oracle
- oracle rac 核心引數詳解Oracle
- Oracle RAC修改public, VIP, SCAN IPOracle
- Oracle 12.2 RAC on Linux Best Practice DocumentationOracleLinux
- Centos7.2_Oracle12.1.0.2_RAC_installCentOSOracle
- oracle rac 11.2.0.3 升級到11.2.0.4Oracle
- Oracle RAC一鍵部署大綱Oracle
- Oracle RAC簡介與要點Oracle
- about oracle10g rac(轉)Oracle