ORACLE(SHAD)进程占用内存过大

背景:发现oracle占用内存过大,根据自己的memory_target配置,最大占用内存设定为20G,sga_max_size和pga_aggregate_target设置也不大,而oracle占用的内存已经远远超过了20G。
环境:windows server 2008 R2,oracle 11.2.0.4。
现象:查询v$process视图发现有个进程ORACLE.EXE(SHAD),占用大量内存。

select PROGRAM,
       PID,
       SPID,
       SERIAL#,
       pga_used_mem / 1024 / 1024 / 1024 USED_MEM_G,
       PGA_MAX_MEM / 1024 / 1024 / 1024 MAX_MEM_G
  from v$process t
 order by pga_used_mem desc;

image.png

SHAD服务器进程有人称之为shadow process,但实际上,这个进程在体系结构中都很少提到。可能是在Oracle Dedicated Server模式下收到客户端请求后,Oracle将为客户端创建的一个新的服务器进程和会话。
image.png

在11gR2版本中,pga_aggregate_target只是一个建议值。在12c的版本已经有了pga_aggregate_limit,解决了pga过大的问题。限制pga的大小
该进程内存过大原因未知,过了一段时间,内存又降下去了。如有大佬告诉我可能的原因,感激不尽

顺藤摸瓜:查询官方文档,了解下在专用服务模式下的pga占用内存的估算算法
假设有5000个客户端在连接数据库,其中每个会话所需的内存为400 KB,每个服务器进程所需的内存为4 MB。那么pga的占用内存大概为

Dedicated Server
Memory used = 5000 X (400 KB + 4 MB) = 22 GB

在实际使用中,也可以查询视图可以设置合理的memory_target:

select value from v$pgastat where name='maximum PGA allocated';
--查询对应的pga最大大小
memory_target = sga_target + max(pga_aggregate_target, maximum PGA allocated)

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容