一次增加記憶體引發的血案 (由pre_page_sga引發的)
把我在itpub上的文章抄過來..警示自己.
http://www.itpub.net/thread-1318170-1-1.html
昨天對一台伺服器增加記憶體 順帶插一塊HBA卡,裝HBA卡的驅動...win 2003 64bit ,ora 版本10.2.0.4.0 ,機器IBM 3850 M2 7233
原本8G,加完後16G,
把sga_max_size ,sga_target改好,啟動資料庫,把應用也啟動,
接着奇異的事就來了~ 随着前台的應用的增長 反應速度越來越慢, 并且速度是慢在連接配接資料庫的那一會兒
(我們是短連接配接,斷開式連接配接,無共享池,專用模式)
....接着應用的壓力達到正常水準後,資料庫基本沒法使用了..
這時 tnsping ,傳回至基本在500~1000ms左 右,慢得離譜,正常值應該在10~100ms.
(但是在應用伺服器上ping 資料庫伺服器, -t -l 60000的包,傳回時間<15ms )
我手工SQLplus連接配接資料庫,連接配接的那一會确實非常慢,5~10秒不等, 連上了後面查詢資料速度不慢,均正常.
這點可以從AWR報告裡看出.
接着折騰了1小時,還臨時換了個2萬元的交換機過來...(這裡折騰了一會, ping 大包,傳回時間已經可以<1ms,但是無奈tnsping仍然很慢).
診斷無果,最後把記憶體,HBA卡拔了...結果就恢複正常了..
大夥有無遇過類似這樣的事..?
後來想起,我當時應該弄個trace的,诶,過于着急,當時是生産機,對停機時間有嚴格要求...
QUOTE:原帖由 lfree 于 2010-6-25 15:51 發表
應許是你根本沒有加到記憶體,使用swap做記憶體。
這一點 我還是能确認的,因為我改了sga_max_size, 和target, 并且啟起來了(原本sga是4G左右,改後是9G), 也相應把虛拟記憶體加到8G了,
最後,即使我把sga_max_size, 和target 調整回原來的4G, 問題仍然是存在的,我用了pre_sga,由于是windows無法用lock sga
但是如果想确認 DB是否一直在用虛拟記憶體, 當時如果能記起用perfmon來看就好了
T.T 無奈時間緊迫...
第二次編輯的分割線
枯榮長老 21:29:59
On a sensibly configured system you would not expect paging to be
a problem. There have been several performance problems in the
past related to setting this parameter to TRUE. If you experience
delays connecting to Oracle and this parameter is set to TRUE
then it may be worth checking performance with it set to FALSE.
This is more likely to be a problem with large SGAs.
枯榮長老 21:31:15
PRE_PAGE_SGA can increase the process startup duration, because every process that starts must access every page in the SGA. The cost of this strategy is fixed; however, you might simply determine that 20,000 pages must be touched every time a process starts. This approach can be useful with some applications, but not with all applications. Overhead can be significant if your system frequently creates and destroys processes by, for example, continually logging on and logging off.
pre_page_sga 為true時, 每個程序建立的時候都會去touch一遍sga裡的page, 當sga越大的時候,這個touch所消耗的時間就越長,
特别是在斷開式連接配接,短連接配接的Application上, 将會消耗很多資源.
枯榮長老的提示一針見血, 之後 set pre_page_size =false 後, 就恢複正常了, tnsping 的傳回值在10~20ms之間.
之前之是以沒有問題,估計是因為4G的SGA 配合上 pre_page_sga=true 再加上我們應用上的并發壓力, 并沒有突破這個性能slow的臨界點(我猜測并發如果再大一些的話,應該也會突破這個點),其實隐患一直都存在了,這個pre_page_sga=true就一直用到最近, 結果那天一加記憶體 ,變成了9G的SGA, 估計touch 4G的SGA和9G的SGA差别很大 ,問題就立馬暴露出來了.
本問題結束,希望以後類似的血案不再發生....
去年急忙上系統時,臨時啃了啃文檔,調了些參數就上線了 ,由于當時是第一次接觸oracle ,對參數了解不夠充分 埋下了隐患..
檢討 檢討, 還是需要多看文檔,多總結 ..