ORA-04030
Table of Contents
1. 問題描述
現場運維人員反饋, 在測試環境,初始化數據時遇到如下錯誤:
ORA-12801: error signaled in parallel query server P046 ORA-04030:out of process memory when trying to allocate 268435480 bytes (QERHJ hash-joi,HT buckets)
可以看到 當時進程想要申請 256M pga 用于hash join,但是失敗了。 從日志中查看相關SQL:
select /*+ full(a)parallel(a,5)*/ ....
SQL 啟用了并行,那么也就是,當時這個會話申請1G的PGA.
2. 問題分析
2.1. 查看內存分配
SQL> show parameter sga NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ lock_sga boolean FALSE pre_page_sga boolean FALSE sga_max_size big integer 50304M sga_target SQL> show parameter pga NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ pga_aggregate_target big integer 16G
可以看到 SGA 50G, PGA 16G. 內存分配沒有什么問題。
2.2. 查看MOS
PLSQL Procedure Causing ORA-04030: (pga heap,control file i/o buffer) And ORA-04030: (koh-kghu sessi,pmuccst: adt/record) or ORA-04030: (koh-kghucall ,pmucalm coll) Errors (Doc ID 1325100.1)
3. 解決方案
兩種解決方案,任選其一即可。建議修改系統參數。
3.1. 方案1:修改操作系統頁面計數
##檢查max_map_count當前值 more /proc/sys/vm/max_map_count ##關閉數據庫實例 ##修改max_map_count sysctl -w vm.max_map_count=200000 或者 cat <>/etc/sysctl.conf vm.max_map_count=200000 EOF ##生效 sysctl -p ##重啟主機 reboot ##啟動數據庫實例
- 注意
- 重啟服務器后,先檢查確認參數是否生效。
3.2. 方案2:修改數據庫參數
3.2.1. Oracle 11204版本之前
##設置spfile參數,重啟生效 alter system set "_use_realfree_heap"=TRUE scope=spfile; alter system set "_realfree_heap_pagesize_hint"=200000 scope=spfile;
3.2.2. Oracle 12.1版本之后
##設置spfile參數,重啟實例生效 alter system set "_use_realfree_heap"=TRUE scope=spfile; alter system set "_realfree_heap_pagesize"=200000 scope=spfile;
4. 解決實驗
我選擇第二個方案。 操作步驟上簡單點兒。 經現場運維測試, 之前報錯的步驟已經通過。到此問題解決。
===================
天行健,君子以自強不息
地勢坤,君子以厚德載物
===================

浙公網安備 33010602011771號