oracle进程内存不足1046552,ora-04030 进程内存不足解决方案
方案一:
ORA-04030:在嘗試分配...字節 (hash-join subh,kllcqas:kllsltba) 時進程內存不足。 ORA-04030:out of process memory when trying to allocate string bytes ORA-04030的出現原因及解決方法: ORA-04030出現的基本都是過多的使用memory造成的 Oracle process使用的內存數量是有一定限制的: A. 對于32 BIT系統,有SGA 1.7G限制 B. 某些OS系統本身也有一些內存參數限制 運行 ulimit 看看 C. OS系統本身物理內存+Swap的限制 現在我們應該檢查DB使用的SGA + PGA是否超過上面的限制。 SGA 包括 db_cache,shared_pool,large_pool,java_pool session的PGA包括sort_area_size/Hash_area_size/*_area_size 或者 pga_aggregate_target 還有執行的CODE以及一些data也會占用空間。 然后再根據情況降低里面的某些值了,比如db_cache,sort_area_size等等。 假如是OS系統的某Limited造成的,大家可以考慮放開限制man ulimit來觀察如何放開限制……
另外值得注意的是max_sga_size和sga_target的設置:
max_sga_size指的是可動態分配的最大值﹐而sga_target是當前已分配的最大sga。
max_sga_size是不可以動態修改的﹐而sga_target是可動態修改﹐直到max_sga_size的值(前提是你設定的max_sga_size>sga_target的情況)
如果在實例啟動時﹐max_sga_size < sga_target或max_sga_size沒設定﹐則啟動后max_sga_size的值會等于sga_target的值,這時如果內存占用超過sga_target,也可能會出現ORA-04030的錯誤。
方案二:
生產庫遷移到2節點的AIX oracle 10g RAC 上后,應用系統查詢出現ORA-04030錯誤。
排除oracle內部參數的問題sga,pga等 。修改aix 的資源限制后,錯誤依舊。
/home/oracle$ulimit -a
time(seconds)??????? unlimited
file(blocks)???????? unlimited
data(kbytes)???????? unlimited
stack(kbytes)??????? unlimited
memory(kbytes)?????? unlimited
coredump(blocks)???? unlimited
nofiles(descriptors) unlimited
經過兩天的排查終于找到錯誤的原因:修改操作系統參數后,沒有重啟系統。重啟AIX后問題解決。
網上一篇關于AIX資源限制的文章幫助我解決了這個問題。
AIX 用戶使用的系統資源限制包括兩個概念 --- 硬限制(hard limits) 和軟限制(soft limits)。
hard limits自AIX 4.1版本開始引入。hard limits 應由AIX系統管理員設置,只有security組的成員可以將此值增大,
用戶本身可以減小此限定值,但是其更改將隨著該用戶從系統退出而失效。使用下列命令可以查看hard limits的限定值:
ulimit -Ha
soft limits 是AIX核心使用的限制進程對系統資源的使用的上限值。此值可由任何人更改,但不能超出
hard limits值。這里要注意的是只有security組的成員可使更改永久生效,普通用戶的更改在其退出系統
后將失效。使用以下命令可以查看soft limits的設置:
下面為系統的soft limits的默認值:
3.2
4.1-4.3
===============
=================
fsize = 2097151
fsize = 2097151
core = 2048
core = 2048
cpu = 3600
cpu = -1
data = 131072
data = 262144
rss = 65536
rss = 65536
stack = 8192
stack = 65536
nofiles = 2000*
nofiles=2000 *
* 該值(nofiles)只能在AIX 4.3.1 或以后的版本中更改。
上述定義作為默認值存放在文件 /etc/security/limits 中,在新用戶被加進系統后生效。直接更改此文件中的定義值
需要將系統重新啟動以便使更改生效。將相應值該為"-1" 表示不受 soft limits的限制(unlimited)。
下面我們將就各字段逐一進行介紹:
fsize 用戶創建的文件大小限制。此定義值(512字節為單位)為該用戶可以生成的最大文件的大小。
core 生成的core文件大小的限制(512字節為單位)。
cpu 用戶進程可用cpu的限定值(以秒為單位)。普通用戶只能將此值減小,root可以將此值增大。這里要注意的
是進程使用CPU的時間取決于AIX Kernel(核心程序)進程調度算法,該值在此僅做參考。
data 進程數據段大小的限定值(以字節為單位)。
stack 進程堆棧段大小的限定值(以字節為單位)。
rss 進程常駐內存段的限定值(以字節為單位)。AIX核心并不參考此限定。
nofiles 進程中打開文件的最大數量。此限定在AIX 4.3.1之前的版本中固定為2000。在AIX 4.3.1及其之后的版本中
可將此值增大至32767。
下面介紹三種修改上述限定值的方法:
1. 編輯文件/etc/security/limits,直接修改各定義值。此更改在系統重新啟動后生效。
2. 使用命令ulimit修改默認值。例如:
ulimit -f value
ulimit -c
ulimit -t
ulimit -d
ulimit -s
ulimit -m
ulimit -n
將修改fsize, core, cpu,data, stack, rss和nofiles的soft limit值。
3. 使用命令chuser修改某用戶的限定值。例如:
chuser fsize=
chuser core=
chuser cpu=
chuser data=
chuser limit=
chuser rss=
chuser nofiles=
將用戶“username”的soft limits改為值“value”。
chuser hard_fsize=
chuser hard_core=
chuser hard_cpu=
chuser hard_data=
chuser hard_limit=
chuser hard_rss=
chuser hard_nofiles=
將用戶“username”的hard limits改為值“value”。
方案三:
查看>10M的session:
SELECT NAME, VALUE / 1024 / 1024, s.SID, s.serial#, spid
FROM v$session s, v$sesstat st, v$statname sn, v$process p
WHERE st.SID = s.SID
AND st.statistic# = sn.statistic#
AND sn.NAME LIKE 'session pga memory'
AND p.addr = s.paddr
AND VALUE > 10 * 1024 * 1024;
問題:
Thu Nov 06 09:56:41 2008
Errors in file e:\oracle\admin\nisczy\udump\nisczy_ora_2484.trc:
ORA-04030: 在嘗試分配 8512 字節 (pga heap,ksm stack) 時進程內存不足
ORA-04030: 在嘗試分配 8512 字節 (pga heap,ksm stack) 時進程內存不足
ORA-04030: 在嘗試分配 8204 字節 (koh-kghu call ,pl/sql vc2) 時進程內存不足
Thu Nov 06 09:56:43 2008
Errors in file e:\oracle\admin\nisczy\udump\nisczy_ora_2484.trc:
ORA-00603: ORACLE server session terminated by fatal error
ORA-04030: out of process memory when trying to allocate 8512 bytes (pga heap,ksm stack)
ORA-04030: out of process memory when trying to allocate 8512 bytes (pga heap,ksm stack)
ORA-04030: out of process memory when trying to allocate 8204 bytes (koh-kghu call ,pl/sql vc2)
解決:
SQL> conn /as sysdba
已連接。
SQL> alter session set sort_area_size = 104857600;
會話已更改。
SQL> show parameter sort;
sort_area_size?????????????????????? integer
104857600
SQL> conn gistar/res#pwd
已連接。
總結
以上是生活随笔為你收集整理的oracle进程内存不足1046552,ora-04030 进程内存不足解决方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 轻松百万的节奏!华为2022年全员分红吸
- 下一篇: 好消息!国内油价明晚迎来调整 或每升下调