丁香的智慧 多谢你的分析。我现在的情况是服务器内存有点紧张,交换空间分了16G,每天使用率都在增长,我不得不定时(比如两周)重启一下数据库释放内存。
最近几天在用以下SQL监控v$process视图中PGA内存分配最高的两个进程。
select * from (SELECT addr,spid,PROGRAM , trunc(PGA_USED_MEM/(1024*1024),2) "Pga_Used_Mb", trunc(PGA_ALLOC_MEM/(1024*1024),2) "Pga_Alloc_Mb", trunc(PGA_MAX_MEM/(1024*1024),2) "Pga_Max_Mb"
FROM V$PROCESS where program=\'oracle@localhost (TNS V1-V3)\' order by "Pga_Alloc_Mb" desc)
where rownum <= 3
2010-7-29 15:05
Addr Spid Program P_Used_Mb Pga_Alloc_Mb Pga_Max_Mb
07000000674661C8 688218 oracle@localhost (TNS V1-V3) 1175.6 1177.9 1177.96
0700000067463C60 663652 oracle@localhost (TNS V1-V3) 1139.56 1142.56 1142.56
2010-7-30 14:00
Addr Spid Program Pga_Used_Mb Pga_Alloc_Mb Pga_Max_Mb
07000000674661C8 688218 oracle@localhost (TNS V1-V3) 1238.56 1241.15 1241.15
0700000067463C60 663652 oracle@localhost (TNS V1-V3) 1194.5 1197.31 1197.31
2010-8-4
Addr Spid Program Pga_Used_Mb Pga_Alloc_Mb Pga_Max_Mb
07000000674661C8 688218 oracle@localhost (TNS V1-V3) 1526.54 1529.52 1529.52
0700000067463C60 663652 oracle@localhost (TNS V1-V3) 1457.45 1461.81 1461.81
这2个进程对应的操作系统进程为:
# ps -ef | grep -E '688218|663652'
oracle 663652 1 15 Jul 12 - 427:04 oraclemqdb (LOCAL=NO)
oracle 688218 1 0 Jul 12 - 320:49 oraclemqdb (LOCAL=NO)
由于v$process中这两条记录对应的Addr、 Spid都没变,而且操作系统ps命令显示的连接持续时间为427:04 、320:49 。我推断即使消息发送完毕,这2个连接一直没有类似退出出或中断的动作。而且v$process视图中对应的PGA_USED_MEM、PGA_ALLOC_MEM 每天都持续增长,照理来说MQ消息发送完毕后内存都应该释放了。有没有可能是编程的时候没有释放链接?
开发的人全离职了,只能自己瞎摸索了。。诶
[本帖最后由 amao506 于 2010-8-4 10:34 编辑]