PLSQL Procedure 引起 ORA-04030 (文件 ID 1626254.1)
PLSQL Procedure 引起 ORA-04030: (pga heap,control file i/o buffer) 和 ORA-04030: (koh-kghu sessi,pmuccst: adt/record) 或 ORA-04030: (koh-kghucall ,pmucalm coll) 的錯誤 (文件 ID 1626254.1)
適用於:
Oracle Database - Enterprise Edition - 版本 11.2.0.1 和更高版本本文件所含資訊適用於所有平臺
症狀
您執行了一個 PL/SQL package 或者 procedure,當程式使用了 4GB 的記憶體時總是會遇到 ORA-4030 異常。
_PGA_MAX_SIZE 和 PGA_AGGREGATE_TARGET 已經設定到一個大於 4GB 的值了,但是當 4GB
記憶體被使用時相同的錯誤仍然持續報出。
錯誤看起來類似於:
ORA-04030: out of process memory when trying to allocate 82456 bytes (pga heap,control file i/o buffer)
ORA-04030: out of process memory when trying to allocate 16328 bytes (koh-kghu sessi,pmuccst: adt/record)
ORA-04030: out of process memory when trying to allocate 16328 bytes (koh-kghu sessi,pmuccst: adt/record)
- 或者 -
ORA-06500: PL/SQL: storage error
ORA-04030: out of process memory when trying to allocate 16328 bytes (koh-kghucall ,pmucalm coll)
ORA-06512: at line ...
ORA-04030: out of process memory when trying to allocate 16328 bytes (koh-kghucall ,pmucalm coll)
ORA-06512: at line ...
更改
升級資料庫到 11.2.0.1 或更高的版本.
原因
透過 trace 檔案也能夠確認程式被限制在 4GB 的大小。
=======================================
TOP 10 MEMORY USES FOR THIS PROCESS
---------------------------------------
100% 4057 MB, 260558 chunks: "pmuccst: adt/record " PL/SQL
koh-kghu sessi ds=0x2aec85f2b810 dsprt=0x2aec85b66ac0
0% 1091 KB, 22 chunks: "free memory "
top call heap ds=0xa2c2a60 dsprt=(nil)
0% 546 KB, 102 chunks: "free memory "
callheap ds=0xa2c1c18 dsprt=0xa2c2a60
0% 425 KB, 39 chunks: "permanent memory " SQL
sort subheap ds=0x2aec861809c8 dsprt=0x2aec85f5f738
0% 263 KB, 3 chunks: "static frame of inst " PL/SQL
koh-kghu sessi ds=0x2aec85fd2088 dsprt=0x2aec85b66ac0
0% 191 KB, 21 chunks: "permanent memory "
pga heap ds=0xa2bd460 dsprt=(nil)
0% 137 KB, 3 chunks: "recursive addr reg file " PL/SQL
koh-kghu sessi ds=0x2aec85fd2088 dsprt=0x2aec85b66ac0
0% 83 KB, 8 chunks: "permanent memory " SQL
kxs-heap-w ds=0x2aec85fbf068 dsprt=0x2aec85b66ac0
0% 79 KB, 18 chunks: "permanent memory "
session heap ds=0x2aec85b66ac0 dsprt=0xa2c2c80
0% 62 KB, 32 chunks: "free memory "
session heap ds=0x2aec85b66ac0 dsprt=0xa2c2c80
=======================================
PRIVATE MEMORY SUMMARY FOR THIS PROCESS
---------------------------------------
******************************************************
PRIVATE HEAP SUMMARY DUMP
4074 MB total: <----- 在這我們看到了程式遇到了 4GB 的限制
4072 MB commented, 192 KB permanent
1131 KB free (768 KB in empty extents),
4071 MB, 1 heap: "session heap "
------------------------------------------------------
Summary of subheaps at depth 1
4070 MB total:
4069 MB commented, 95 KB permanent
639 KB free (569 KB in empty extents),
4068 MB, 20 heaps: "koh-kghu sessi " 4 KB free held
------------------------------------------------------
Summary of subheaps at depth 2
4059 MB total:
4058 MB commented, 150 KB permanent
100 KB free (56 KB in empty extents),
4057 MB, 260558 chunks: "pmuccst: adt/record "
=========================================
在 trace 檔案中更深層的資訊,我們看到 process map 遇到了 65536 行的限制
----- Process Map Dump -----
00400000-0954f000 r-xp 00000000 fd:09 3131376 /e00/oracle/prod/v11.2.0/bin/oracle <-Line 1
0974e000-0a2be000 rwxp 0914e000 fd:09 3131376 /e00/oracle/prod/v11.2.0/bin/oracle
0a2be000-0a304000 rwxp 0a2be000 00:00 0
0c8c9000-0c950000 rwxp 0c8c9000 00:00 0 [heap]
60000000-60001000 r-xs 00000000 00:13 9374560 /dev/shm/ora_DSSP_11698195_0
60001000-70000000 rwxs 00001000 00:13 9374560 /dev/shm/ora_DSSP_11698195_0
70000000-80000000 rwxs 00000000 00:13 9374561 /dev/shm/ora_DSSP_11698195_1
80000000-90000000 rwxs 00000000 00:13 9374565 /dev/shm/ora_DSSP_11730964_0
90000000-a0000000 rwxs 00000000 00:13 9374566 /dev/shm/ora_DSSP_11730964_1
a0000000-b0000000 rwxs 00000000 00:13 9374569 /dev/shm/ora_DSSP_11763733_0
b00
2aed84a4f000-2aed86e5f000 rwxp febe2000 00:11 29160 /dev/zero
7fffea3ca000-7fffea418000 rwxp 7ffffffb1000 00:00 0 [stack]
ffffffffff600000-ffffffffffe00000 ---p 00000000 00:00 0 [vdso] <---在 map dump 的結尾(Process Map Dump 的行號是 65537)
******************* End of process map dump ***********
TOP 10 MEMORY USES FOR THIS PROCESS
---------------------------------------
100% 4057 MB, 260558 chunks: "pmuccst: adt/record " PL/SQL
koh-kghu sessi ds=0x2aec85f2b810 dsprt=0x2aec85b66ac0
0% 1091 KB, 22 chunks: "free memory "
top call heap ds=0xa2c2a60 dsprt=(nil)
0% 546 KB, 102 chunks: "free memory "
callheap ds=0xa2c1c18 dsprt=0xa2c2a60
0% 425 KB, 39 chunks: "permanent memory " SQL
sort subheap ds=0x2aec861809c8 dsprt=0x2aec85f5f738
0% 263 KB, 3 chunks: "static frame of inst " PL/SQL
koh-kghu sessi ds=0x2aec85fd2088 dsprt=0x2aec85b66ac0
0% 191 KB, 21 chunks: "permanent memory "
pga heap ds=0xa2bd460 dsprt=(nil)
0% 137 KB, 3 chunks: "recursive addr reg file " PL/SQL
koh-kghu sessi ds=0x2aec85fd2088 dsprt=0x2aec85b66ac0
0% 83 KB, 8 chunks: "permanent memory " SQL
kxs-heap-w ds=0x2aec85fbf068 dsprt=0x2aec85b66ac0
0% 79 KB, 18 chunks: "permanent memory "
session heap ds=0x2aec85b66ac0 dsprt=0xa2c2c80
0% 62 KB, 32 chunks: "free memory "
session heap ds=0x2aec85b66ac0 dsprt=0xa2c2c80
=======================================
PRIVATE MEMORY SUMMARY FOR THIS PROCESS
---------------------------------------
******************************************************
PRIVATE HEAP SUMMARY DUMP
4074 MB total: <----- 在這我們看到了程式遇到了 4GB 的限制
4072 MB commented, 192 KB permanent
1131 KB free (768 KB in empty extents),
4071 MB, 1 heap: "session heap "
------------------------------------------------------
Summary of subheaps at depth 1
4070 MB total:
4069 MB commented, 95 KB permanent
639 KB free (569 KB in empty extents),
4068 MB, 20 heaps: "koh-kghu sessi " 4 KB free held
------------------------------------------------------
Summary of subheaps at depth 2
4059 MB total:
4058 MB commented, 150 KB permanent
100 KB free (56 KB in empty extents),
4057 MB, 260558 chunks: "pmuccst: adt/record "
=========================================
在 trace 檔案中更深層的資訊,我們看到 process map 遇到了 65536 行的限制
----- Process Map Dump -----
00400000-0954f000 r-xp 00000000 fd:09 3131376 /e00/oracle/prod/v11.2.0/bin/oracle <-Line 1
0974e000-0a2be000 rwxp 0914e000 fd:09 3131376 /e00/oracle/prod/v11.2.0/bin/oracle
0a2be000-0a304000 rwxp 0a2be000 00:00 0
0c8c9000-0c950000 rwxp 0c8c9000 00:00 0 [heap]
60000000-60001000 r-xs 00000000 00:13 9374560 /dev/shm/ora_DSSP_11698195_0
60001000-70000000 rwxs 00001000 00:13 9374560 /dev/shm/ora_DSSP_11698195_0
70000000-80000000 rwxs 00000000 00:13 9374561 /dev/shm/ora_DSSP_11698195_1
80000000-90000000 rwxs 00000000 00:13 9374565 /dev/shm/ora_DSSP_11730964_0
90000000-a0000000 rwxs 00000000 00:13 9374566 /dev/shm/ora_DSSP_11730964_1
a0000000-b0000000 rwxs 00000000 00:13 9374569 /dev/shm/ora_DSSP_11763733_0
b00
2aed84a4f000-2aed86e5f000 rwxp febe2000 00:11 29160 /dev/zero
7fffea3ca000-7fffea418000 rwxp 7ffffffb1000 00:00 0 [stack]
ffffffffff600000-ffffffffffe00000 ---p 00000000 00:00 0 [vdso] <---在 map dump 的結尾(Process Map Dump 的行號是 65537)
******************* End of process map dump ***********
從 OS 角度來看,這些錯誤的出現通常是因為 map 條目耗盡造成的。
每個程式僅僅有 65536 個 memory map 條目。
在 trace 中記憶體的分配或者錯誤可能包括(但不僅限於):
- "pmucalm coll"
- "pmuccst: adt/re" or "pmuccst: adt/record"
- "pl/sql vc2"
- "permanent memory " SQL
- "kkqgAllocEle.n "
解決方案
在 OS 或者在資料庫層面來改變上限:
-
在 OS 層面來改變頁數:
more /proc/sys/vm/max_map_count
sysctl -w vm.max_map_count=200000 (例子)
-
在資料庫的初始化引數檔案中設定下面的引數,來調整 realfree heap pagesize。然後重啟資料庫。
_use_realfree_heap=TRUE
_realfree_heap_pagesize_hint = 262144
預設 realfree allocator pagesize 是 64KB(65536),這樣 64K 的條目能接納 4GB 的記憶體。使用 256kB (262144),限制將會增大到 16GB。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31393455/viewspace-2129530/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- PLSQL Procedure 引起 ORA-04030SQL
- PLSQL 呼叫 返回 遊標(Cursor)PROCEDURESQL
- plsql中的procedure和function程式設計SQLFunction程式設計
- oracle procedure plsql 動態sql之動態傳遞表OracleSQL
- 使用PLSQL Developer 來檢視官方文件SQLDeveloper
- oracle plsql package_body_procedure_構建語法_sp_儲存過程OracleSQLPackage儲存過程
- java uid及plsql呼叫JavaUISQL
- 解決“The remote certificate is invalid according to the validation procedure”問題REM
- Procedure PqStat to monitor Current PX Queries (Doc ID 240762.1)
- Procedure加密加密
- 儲存過程plsql_stored procedure_為業務系統所有業務表生成主鍵pk方式儲存過程SQL
- BULK COLLECT FAILS WITH ORA-04030AI
- Oracle Wrap ProcedureOracle
- alter package/procedurePackage
- 觸發器trigger中呼叫包package(包中含:儲存過程procedure及函式function)_plsql觸發器Package儲存過程函式FunctionSQL
- cursor_顯式遊標_與rhel5的效能關係_plsql_儲存過程_sp_procedureSQL儲存過程
- Oracle告警日誌ora-04030Oracle
- aix 6.1 ORA-04030 問題AI
- 使用apidoc文件神器,快速生成api文件API
- MySQL中使用procedureMySql
- 怎樣加密procedure加密
- sql primary key procedureSQL
- ORA-04030處理一例
- 【開發篇plsql】plsql遊標SQL
- MPAndroidChart文件翻譯Android
- .net core中Grpc使用報錯:The remote certificate is invalid according to the validation procedure.RPCREM
- Android中Handler引起的記憶體洩露Android記憶體洩露
- Android 中 Handler 引起的記憶體洩露Android記憶體洩露
- 轉newkid關於plsql精華帖子附自測SQL
- Procedure to create Distribution model
- DELETE_TABLE_STATS Proceduredelete
- Image Noise Reduction Develop Proceduredev
- Procedure for Setting Partner FunctionsFunction
- How to rename an Oracle stored procedureOracle
- EXECUTE IMMEDIATE dynamic sql in procedureSQL
- 分頁procedure (SQL Server)SQLServer
- oracle 中呼叫 store procedureOracle
- Oracle stored procedure to send emailOracleAI