PGA 泄漏及游标是否超过最大值的检查

1、先查看某一终端(应用程序所在的终端)的会话数。如果使用的游标没有很好的关闭,则数量会比较多。
select * from v$session where terminal='GMCC-OV0WYAR5VJ';
 
2、SELECT * FROM V$PROCESS A INNER JOIN V$SESSION B ON A.ADDR = B.PADDR WHERE B.terminal='GMCC-OV0WYAR5VJ';
3、SELECT A.* FROM V$OPEN_CURSOR A INNER JOIN V$SESSION B ON A.SID = B.SID WHERE B.terminal = 'GMCC-OV0WYAR5VJ' and a.sql_text like '%select A.car_id%';
 
如果程序只开了一个长连接,则下面的查询就只有一条记录,如果程序没有很好地关闭游标,则下面的查询会有多条记录。

SELECT B.*, A.PROGRAM FROM V$SESSION A
JOIN
(
SELECT B.SID,SUM(B.value) AS VALUE,C.name FROM
v$sesstat B, v$sysstat C
WHERE   B.statistic#=C.statistic#
and C.name in ('session pga memory')
GROUP BY  B.SID,C.name ) b
ON A.SID=B.SID
WHERE A.PROGRAM IN ('**.exe')
order by name
 
下面的查询用于查看每一个应用程序占用的PGA内存的大小,以判断哪一个程序占用的PGA有异常。通过以下查询的数值有时候随时间的推移会有所变大,但只要不太离谱就可以,如果一个应用程序一天增长几百M,并且还没有停下的意思,那就有可能有问题了,特别是在windows 32位系统中,最后内存不够用是要报04030的错误的。如果你真的碰到这种情况,并且也找不到问题,那你就定时自动重启你的应用吧,毕竟谁也不保证是不是ORACLE的BUG。
SELECT trunc(sum(b.value)/1024/1024,2), A.PROGRAM FROM V$SESSION A
JOIN
(
SELECT B.SID,SUM(B.value) AS VALUE,C.name FROM
v$sesstat B, v$sysstat C
WHERE   B.statistic#=C.statistic#
and C.name in ('session pga memory')--,'session uga memory')
GROUP BY  B.SID,C.name ) b
ON A.SID=B.SID
group by a.program
--WHERE A.PROGRAM IN ('DB44_Basic_Basic11083002.exe','CarsStatus.exe', 'w3wp.exe')
order by name
查询PGA的分配使用情况(这样求出来就是M了,当然有一些数值的单位不是字节,那就直接用select name,value from v$pgastat;来查看情况是否正常):
   select name,value/1024/1024 from v$pgastat;

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23065269/viewspace-713642/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/23065269/viewspace-713642/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值