<form id="tznrh"><form id="tznrh"><th id="tznrh"></th></form></form>



            Oracle數據庫環境中隔離級別為read committed,每個事務都只能看到其他事務已提交的更改和自己未提交的更改。所有關于CR塊的統計都可以通過x$bh視圖查看。read-commited隔離級別下的有兩種可能性:

                語句級別:查詢結果與查詢的開始一致(snap_scn =當前SCN)。

            事務級別:查詢結果與事務開始時一致(snap_scn =事務開始時的當前SCN)。


            CR塊請求流

            ktrget:

            - 初始化CR掃描請求。

            - 調用kcbgtcr獲取最佳緩存區域構建CR緩沖區。

            - 調用ktrgcm應用undo來構建CR緩沖區。

            -  將CR緩沖區返回給請求者。

            kcbgtcr:

            - 如果成功,返回“最佳”候選人(由ktrexf執行)。

            - 掃描哈希桶,以獲取可用于構建CR緩沖區的緩沖區。

            - 如果不成功,請求調用kcbget。

            kcbget:

            - 重新嘗試kcbgtcr的掃描。

            如果找到緩沖區,則立即返回。

            如果沒有,那么如果它正在讀入或存在當前模式緩沖區,則等待它可用后,然后重新掃描緩沖區。

            如果這些失敗,則不能使用任何本地緩存的緩沖區。

            如果上述操作失?。?/span>

            - CR服務重新分配管理CR請求。


            CR塊的請求最多涉及三個實例:請求者實例,鎖定主實例和當前塊所有者實例。

            如果滿足以下條件之一,則授予鎖定:

                資源保持模式為NULL。

                資源保持模式為S,主節點中沒有S鎖的持有者。

            否則,主設備將CR請求轉發給持有者節點。

            如果鎖是全局的,那么Oracle將選擇一個節點來轉發CR請求,如下所示:

                如果鎖主實例中存在過去鏡像(PI),并且PI SCN比snap-scn大,則主節點是為該節點。

                否則,您選擇具有最小SCN的PI鏡像且PI-SCN大于snap-SCN。此PI的所有者節點是系統將CR請求轉發到的節點。用最小SCN的PI的原因是這樣應用的UNDO較少。

            如果根本沒有PI,則選擇當前塊的所屬實例。


            Light Work Rule

            為了避免因為塊清除而產生消耗資源過多的CR塊構建工作,將合適的緩沖區發送給請求者以完成CR構建。Oracle引入了LWR。CR請求節點的LMS進程通過調用kcbgtcr或ktrget以構建CR緩沖區。當LWR規則觸發條件:

            - 請求物理I/O。

            - 找到具有相同類,相同AFN和相同blockID單objectID的的緩沖區,一般是刪除或truncate的對象。

            - 寫進行中。


            Fairness

            Oracle為了在鎖轉換和cr塊構造產生的開銷之間選擇最小消耗資源的方式,引入了fairness機制。當一個節點多次(_fairness_threshold)請求另一個節點具有獨占鎖的buffer的時候。另外一個節點會將buffer上的鎖降級為scur然后把block傳輸到請求節點。之后這個節點再次訪問該buffer的時候直接到本地buffer cache申請即可。LMS(構建CR緩沖區)執行buffer鎖的降級轉換動作,如果:

            - 塊不是UNDO,鎖定保持在X模式

            - 自上次對塊進行更改以來,緩沖區的CR請求過多。如果有超過_fairness_threshold次數的CR請求,LMS會執行此操作。





            沃趣科技,讓客戶用上更好的數據庫技術!
            三分快3