ITPub博客

首页 > Linux操作系统 > Linux操作系统 > PGA 泄漏及游标是否超过最大值的检查

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

原创 Linux操作系统 作者:windtalker_cs 时间:2011-12-20 17:55:58 0 删除 编辑
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/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2010-02-24

  • 博文量
    49
  • 访问量
    184864