天天看點

細緻入微:Oracle RAC DRM引起性能問題案例一則

細緻入微:Oracle RAC DRM引起性能問題案例一則

熊軍(老熊)

雲和恩墨西區總經理

oracle aced,acoug核心會員

編輯手記:今天在『雲和恩墨大講堂』微信群,有朋友問到drm問題,這讓我想起老熊之前的一篇文章案例,雖然是關于oracle 10g的,但是其思路和分析過程值得學習借鑒,收錄在這裡,供大家學習參考。

客戶一套運作在oracle 10.2.0.5 rac上的系統,間歇性地出現性能問題。其性能現象為前台反映性能緩慢,從系統上看cpu使用率大幅增加,load增加。這種性能問題通常在出現幾分鐘後自動恢複正常。

從awr中的top 5等待來看:

細緻入微:Oracle RAC DRM引起性能問題案例一則

可以看到,top 5中,有3個是latch相關的等待,而另外2個則是跟rac相關的等待。

如果再檢視更細的等待資料,可以發現其他問題:

細緻入微:Oracle RAC DRM引起性能問題案例一則

從上面的資料還可以看到,除了top 5等待,還有:

"gcs drm freeze in enter server mode“以及"gc remaster"

這2種比較少見的等待事件,從其名稱來看,明顯與drm有關。那麼這2種等待事件與top 5的事件有沒有什麼關聯?。

mos文檔:

"bug 6960699 - "latch: cache buffers chains" contention/ora-481/kjfcdrmrfg: sync timeout/ oeri[kjbldrmrpst:!master] [id 6960699.8]”

提及,drm的确可能會引起大量的"latch: cache buffers chains"、"latch: object queue header operation"等待,雖然文檔沒有提及,但不排除會引起”latch: cache buffers lru chain“這樣的等待。

為了進一步證明性能問題與drm相關,使用tail -f指令監控lmd背景程序的trace檔案。

在trace檔案中顯示開始進行drm時,查詢v$session視圖,發現大量的 "latch: cache buffers chains" 、"latch: object queue header operation"等待事件,同時有"gcs drm freeze in enter server mode“和"gc remaster"等待事件,同時系統負載升高,前台反映性能下降。

而在drm完成之後,這些等待消失,系統性能恢複到正常。

看起來,隻需要關閉drm就能避免這個問題。怎麼樣來關閉/禁止drm呢?很多mos文檔提到的方法是設定2個隐含參數:

_gc_affinity_time=0   _gc_undo_affinity=false  

不幸的是,這2個參數是靜态參數,也就是說必須要重新開機執行個體才能生效。

實際上可以設定另外2個動态的隐含參數,來達到這個目的。按下面的值設定這2個參數之後,不能完全算是禁止/關閉了drm,而是從”事實上“關閉了drm。

_gc_affinity_limit=250   _gc_affinity_minimum=10485760  

甚至可以将以上2個參數值設定得更大。這2個參數是立即生效的,在所有的節點上設定這2個參數之後,系統不再進行drm,經常一段時間的觀察,本文描述的性能問題也不再出現。

下面是關閉drm之後的等待事件資料:

細緻入微:Oracle RAC DRM引起性能問題案例一則

那麼什麼是drm?drm對系統來說有什麼好處?下面的文檔已經描述得比較清楚,有興趣的朋友可以參考:

mos文檔:drm - dynamic resource management [id 390483.1]

drm簡單來說就是oracle根據資料塊的通路來動态調整管理資料塊的主節點,這項技術在引入之初引發了一系列的性能問題。