記憶體洩漏引起的 資料庫效能問題

yingyifeng306發表於2021-05-06

作業系統記憶體洩漏

第一 主機記憶體幾乎耗盡,大量swap被使用。主機、資料庫登入嚴重卡頓。

第二 每次重啟資料庫的十幾分鍾之內很正常,但那之後又很卡

HIS資料庫1月17日6點左右從原先P550伺服器切換至P720,切換完成之後,資料庫版本保持不變即11.2.0.3,,主機作業系統版本從原來的AIX 6.1升級至AIX 7.1(作業系統版本為7100-03-00-0000,沒有安裝SP3補丁)。執行3天之後,即從1月21日開始,資料庫由於作業系統記憶體不足產生大量交換,而導致多次當機。美創科技工程師經過仔細診斷,發現作業系統記憶體不足(P720有64GB記憶體)是由於命中Oracle BUG 10190759和缺失作業系統補丁IV53587引起的。其中Oracle BUG會導致USLA heap size從原來的幾十KB上漲到7MB左右,作業系統補丁IV53587缺失會導致作業系統的記憶體回收機制不能完全執行。詳見Oracle MOS官方文件和IBM官方文件:

11gR2/Aix - Dedicated Server Processes Have Large Usla Heap Segment Compared To Older Versions

Virtual Memory Consumption  Paging under AIX 7.1 ( 文件 ID 1666458.1)

針對Oracle BUG 10190759,工程師打了Oracle ,記憶體過度消耗有一定程度的緩減,但是記憶體使用率依然高達90%左右。隨後,我們建議主機工程師打操作補丁IV53587。由於IV53587包含在AIX 7.1 SP3補丁集中,主機工程師打了SP3補丁集之後,作業系統記憶體大量消耗問題得到徹底解決,觀察3天之後,記憶體使用量維持在50%左右。

 

 

Oracle 單個程式記憶體使用存在洩漏

可以使用svmon -P PID - where PID is an Oracle process id程式跟蹤。

Oracle Release -> (work USLA heap times 4k pages size) 獨佔模式下不同版本程式記憶體使用值

11.2.0.1.0 -> 7M bytes

11.1.0.7.0 -> 60KB

10.2.0.4.0 -> 420KB

Slow system performance for larger footprint of all oracle server process. If physical memory is fully used, the could terminate an Oracle instance via terminating a PMON process.

同樣,vmstat監控命令也顯示,故障期間,主機已經產生了大量交換。記憶體嚴重不足。如下所示:

提取故障時間點的awr報告與正常時間段的進行對比。同樣時間點正常時間段的AWR報告:

同樣時間點故障時間段的AWR報告:

對比兩份awr報告,可以發現故障時間段的latch:shared pool和libaray cache:mutex x等待十分嚴重,結合作業系統資源使用情況,基本可以確定是由於記憶體不足導致資料庫效能急劇下降。

11gR2/Aix - Dedicated Server Processes Have Large Usla Heap Segment Compared To Older Versions (文件 ID )

從oracle官方提示的文件可以看出是由於USLA HEAP的使用異常導致記憶體使用不斷上升。 使用情況,如下所示:

從USLA HEAP的使用情況( )可以判斷程式私有使用量已經接近oracle官方提示的1800 4KB pages 也就是 7MB左右。這是oracle官方公佈的一個bug 10190759。 解決方法如下:

打Oracle Patch:10190759。

打完Bug 10190759補丁之後 ,如下所示:

 

從本次故障分析來看,主要是由於Oracle bug導致程式記憶體使用存在洩漏的。

參考文件

11gR2/Aix - Dedicated Server Processes Have Large Usla Heap Segment Compared To Older Versions (文件 ID 1260095.1)


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23732248/viewspace-2770882/,如需轉載,請註明出處,否則將追究法律責任。

相關文章