共計(jì) 2068 個(gè)字符,預(yù)計(jì)需要花費(fèi) 6 分鐘才能閱讀完成。
本篇內(nèi)容主要講解“Oracle DRM 原理是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓丸趣 TV 小編來帶大家學(xué)習(xí)“Oracle DRM 原理是什么”吧!
Buffer: 對(duì)于 RAC 數(shù)據(jù)庫,當(dāng)一個(gè)數(shù)據(jù)塊被讀入到 buffer cache 后,我們就稱其為 buffer , cache fusion 會(huì)將這個(gè) buffer 作為 resource 來管理。
Master:在 RAC 數(shù)據(jù)庫的世界里,每一個(gè) resource 都會(huì)有一個(gè) master 實(shí)例,這個(gè) master 實(shí)例會(huì)在 shared pool 中(例如:gcs resource 和 ges resource 部分)分配一些空間來存放和這個(gè)資源相關(guān)的信息
例如:哪一個(gè)實(shí)例擁有了這個(gè) buffer 的最新版本,哪一個(gè)實(shí)例擁有了這個(gè) buffer 的什么級(jí)別的 lock 等等。并且,負(fù)責(zé)維護(hù)和這個(gè)資源的狀態(tài)。
接下來,我們對(duì) RAC 環(huán)境中,訪問一個(gè) buffer 的過程進(jìn)行簡單的描述。我們以一個(gè) 4 節(jié)點(diǎn)的 RAC 數(shù)據(jù)庫為例。
注意,我們只會(huì)列出比較典型的一種情況,不會(huì)把所有可能的情況都一一列出,而且只是把步驟進(jìn)行了簡單的介紹。
步驟 1:實(shí)例 3 需要以 X(exclusive) 方式訪問 buffer1, 向 master 實(shí)例(1)發(fā)出了請(qǐng)求。
步驟 2:master 實(shí)例(1)發(fā)現(xiàn)實(shí)例 2 以 X 方式持有 buffer1,之后通知實(shí)例 2 釋放 X lock,并把 buffer1 發(fā)送給實(shí)例 3。
步驟 3: 實(shí)例 2 釋放 X lock,并把最新版本的 buffer1 發(fā)送給實(shí)例 3。
步驟 4:實(shí)例 3 獲得 buffer1, 并通知 master 實(shí)例(1)更新資源 buffer1 的最新狀態(tài)。
從上面的步驟,我們不難看出,在 RAC 數(shù)據(jù)庫中,當(dāng)我們?cè)L問一個(gè) buffer 的時(shí)候,最多會(huì)有 3 個(gè)實(shí)例參與其中
master 實(shí)例,holder(持有者)實(shí)例 和 requestor(申請(qǐng)者) 實(shí)例。2 種數(shù)據(jù)傳輸會(huì)出現(xiàn),message: 用于和 lock 相關(guān)的信息傳輸,data:用于傳輸 buffer
同時(shí),根據(jù)上面的步驟我們也自然會(huì)想到,如果 master 和 requestor 在同一個(gè)實(shí)例上
那么就可以減少實(shí)例之間 message 的傳輸并且訪問的代碼路徑(code path)會(huì)更短,從而提高性能
但是每個(gè) buffer 在被讀取到 buffer cache 時(shí),master 節(jié)點(diǎn)的選擇是隨機(jī)的。
基于這種考慮,oracle 從 10g 開始,推出了一個(gè)新特性 DRM(Dynamic Resource management)
DRM 的主要功能是,根據(jù)一段時(shí)間內(nèi)(默認(rèn) 10 分鐘)
每個(gè)實(shí)例,對(duì)某一個(gè)數(shù)據(jù)庫對(duì)象的 (10gR1 以數(shù)據(jù)文件為單位) 的訪問次數(shù)和方式,來決定數(shù)據(jù)庫對(duì)象對(duì)應(yīng)的 buffer 應(yīng)該被 mastering 到哪一個(gè)實(shí)例。
在指定時(shí)間內(nèi),如果某一個(gè)實(shí)例訪問某個(gè)數(shù)據(jù)庫對(duì)象次數(shù)高于其他實(shí)例一定倍數(shù)(默認(rèn) 50 倍),則 oracle 會(huì)把這個(gè)對(duì)象所有的 buffer 的 master 信息
轉(zhuǎn)移到對(duì)應(yīng)實(shí)例(注意:不是轉(zhuǎn)移 buffer), 轉(zhuǎn)移的過程是漸進(jìn)式的。
當(dāng) oracle 決定將一個(gè) buffer 的 master 實(shí)例確定到本地實(shí)例后,會(huì)對(duì)這個(gè) buffer 上加上 affinity lock,來實(shí)現(xiàn)快速的訪問
這也是我們經(jīng)常提到的 object affinity 的由來
接下來,我們對(duì) DRM 的基本步驟進(jìn)行介紹。
1. Oracle 停止所有在需要進(jìn)行 remastering 的 buffer 上的操作。注意:DRM 是漸進(jìn)的,也就是說以 windows 為單位,每次對(duì)一部分的 buffer 進(jìn)行 remastering 操作
2. Lmon 通知所有實(shí)例,準(zhǔn)備進(jìn)行 remastering
3. 在舊的 master 實(shí)例清除對(duì)應(yīng) buffer 的 master 信息
4. 將 master 信息傳遞給新的 master 實(shí)例
5. 在新的 master 實(shí)例構(gòu)建資源的最新狀態(tài)
6. 結(jié)束,并釋放所有之前所有步驟占用的資源
然后,我們對(duì) DRM 相關(guān)的一些參數(shù)進(jìn)行簡單的介紹。
_gc_policy_time:單位為分鐘,控制 DRM 統(tǒng)計(jì)實(shí)例訪問 buffer 次數(shù)的時(shí)間間隔,默認(rèn)為是 10 分鐘
_gc_affinity_ratio:控制進(jìn)行 remastering 所需要達(dá)到的最小比例(閥值),默認(rèn)為 50
也就是說,如果某個(gè)實(shí)例在 10 分鐘(_gc_policy_time)之內(nèi),訪問某個(gè)數(shù)據(jù)庫對(duì)象的次數(shù)大于其他所有實(shí)例 50 倍時(shí) (注意:是 50 倍,而不是 50 次)
對(duì)該數(shù)據(jù)庫對(duì)象的 buffer 進(jìn)行 remastering
注意:請(qǐng)不要輕易修改以上參數(shù)的值,除非有技術(shù)支持
最后,如果您遇到了和 DRM 相關(guān)的問題,建議您查看以下的信息。
1. Lmon,lmd,lms 和 diag 進(jìn)程的 trace file,來確認(rèn)問題出現(xiàn)在 DRM 的哪一步和 lms,lmon,lmd 進(jìn)程的狀態(tài)。
2. AWR 和 ASH report,確認(rèn)那些等待事件持續(xù)了很長時(shí)間,以及 lmon,lms 和 lmd 的狀態(tài)。
3. 參照 note 1492990.1 獲取 DMR 診斷腳本輸出。
到此,相信大家對(duì)“Oracle DRM 原理是什么”有了更深的了解,不妨來實(shí)際操作一番吧!這里是丸趣 TV 網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!