oracle: 10.2.0.4
OS: HPIA 11.3
pga_aggregate_target为15G,而实际pga的占用已达到26G多,有5个session分别占2G多的pga,这5个session就占了10g多的内存,且基本上都是inactive的.
理论上单个session占用pga的大小为:min(pga_aggregate_target*5% , 50% * _PGA_MAX_SIZE),_PGA_MAX_SIZE为400M,也就是说单个session占pga最大只能是 200M,而实际上超过200M的session有10个之多,更有5个是占用2G的。
SQL> SQL> pga占用内存总量,单位:G
SQL> 2 3 4
PGA_MAX_MEM PGA_USED_MEM PGA_ALLOC_MEM
----------- ------------ -------------
49.69 26.34 29.37
SQL> SQL> 占用pga大于200M的进程
SQL> 2 3 4 5 6 7
pga(M) SID MACHINE USERNAME STATUS SQL_TEXT
---------- ---------- ------------------------- ---------- ---------- ------------------------------------------------------------
2354 5014 crmitf2 CRM INACTIVE BEGIN CEP_MANAGER_LOCAL.GET_DCN_PROCESSOR_ROW(:1,:2,:3) ; EN
D;
2352 6757 crmitf2 CRM INACTIVE
2345 6678 crmitf2 CRM INACTIVE BEGIN CEP_MANAGER_LOCAL.GET_DCN_PROCESSOR_ROW(:1,:2,:3) ; EN
D;
2335 5965 crmitf2 CRM INACTIVE BEGIN CEP_MANAGER_LOCAL.GET_DCN_PROCESSOR_ROW(:1,:2,:3) ; EN
D;
2327 6198 crmitf2 CRM INACTIVE BEGIN CEP_MANAGER_LOCAL.GET_DCN_PROCESSOR_ROW(:1,:2,:3) ; EN
D;
549 6062 crmitf1 INTF INACTIVE BEGIN event.getInteractInfo(:1,:2) ; END;
549 5956 crmitf1 INTF INACTIVE BEGIN event.wss_2_interact_netts(:1,:2,:3) ; END;
548 4991 crmitf1 INTF INACTIVE BEGIN event.getInteractInfo(:1,:2) ; END;
548 4787 crmitf1 INTF INACTIVE BEGIN event.getInteractInfo(:1,:2) ; END;
548 5339 crmitf1 INTF INACTIVE BEGIN event.getInteractInfo(:1,:2) ; END;
10 rows selected.
有以下三个问题:
1、怎么限制单个session占用pga的大小,目前的限制是200M,但没起作用?
2、为什么单个session会占用这么多pga,一般情况下,单个session占用pga就7M至8M,而目前是2G,pga里面存的是啥,从哪可以查询?
3、1个session 占用的pga,什么时候会释放出来?
请熟悉的朋友帮忙解释,谢谢!