logo资料库

一个Oracle server process进程会消耗多少内存.pdf

第1页 / 共2页
第2页 / 共2页
资料共2页,全文预览结束
成就无边界服务 一个 Oracle server process 进程会消耗多少内存? 作者 新炬网络专家杨志洪 在做服务器配置规划,涉及到内存的时候,都会考虑下操作系统 自身的内存、SGA、PGA、所有连接到数据库进程消耗的内存、其他 应用进程消耗的内存。 这中间,不太好估算的是 server process 消耗内存的估算。从我 们在电信、金融这样一些相对比较大的系统使用来看,HPUX 下(11g) 每个 server process 进程大概在 10M~12M 之间,HPUX 下大概在 10M~20M 之间。有些进程如果只是连接,没有产生过任何查询或者 DML 的话,消耗的内存可能低于 5M。 也因此,一旦应用上线后,遇到内存“不够”,某些个别程序遇到 问题时,运维就会被 challenge,这些应用以前都是好好的,为什么 不行了? 有个新的例子是这样的,一个批处理的进程,消耗了 50G 内存, 居然都没有跑完。 过程代码是这样(仅更改了敏感内容): SQL> DECLARE 2 3 TYPE TP_RRRIDTP_RRRIDTP_RRRID IS TABLE OF VARCHAR2(50) INDEX BY BINARY_INTEGER; 4 TYPE TYPE_XC_CODE IS TABLE OF ACTUARY.TBL_TRAD.XC_CODE%TYPE INDEX BY BINARY_INTEGER; 5 VV_RRRID TP_RRRIDTP_RRRIDTP_RRRID; 6 V_XC_CODE TYPE_XC_CODE; 7 8 BEGIN 9 10 11 12 SELECT A.ROWID,B.XC_CODE BULK COLLECT INTO VV_RRRID,V_XC_CODE 1 www.shsnc.cn
成就无边界服务 13 FROM ZBCS.TBL_UL A, 14 ZBCS.CLASSCODE_SUM B 15 WHERE A.XZCODE = B.XZCODE 16 AND A.GSCODE = ‘SHH’ 17 ; 18 19 FORALL I IN VV_RRRID.FIRST..VV_RRRID.LAST 20 21 UPDATE ZBCS.TBL_UL 22 SET XC_CODE = V_XC_CODE(I) 23 WHERE ROWID = VV_RRRID(I); 24 COMMIT; 25 26 DBMS_OUTPUT.PUT_LINE(TO_CHAR(SYSDATE,’YYYY-MM-DD HH24:MI:SS’)); 27 28 END; 29 / DECLARE * ERROR at line 1: ORA-04030: out of process memory when trying to allocate 1917720 bytes (PLS non-lib hp,DARWIN) ORA-06512: at line 19 这个表本身虽然不算太大,半个月的时间增长近 2000 万,其中 一个分区接近一半的记录。在查询小分区的时候语句没有问题,但是 查询最大这个分区数据的时候就 ORA-04030。 当然,改进的方法不难,在 fech 的时候加以 limit 限制(5000 或者 10000 都可以)即可。 一个 oracle 连接进程到底消耗多少内存呢?当然实际的只能从 V$process 去查了。上面的通用粗糙算法大体也没有问题。 2 www.shsnc.cn
分享到:
收藏