数据库服务器的内存使用率随着时间增加攀升,不明原因

查看数: 7902 | 评论数: 15 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2010-11-30 17:08

正文摘要:

      我这的生产系统有个现象,不知如何解决。请高手指点! 环境说明: 数据库:10.2.0.4 RAC 操作系统:aix 5.3 应用:每天定时的调度相同的工作流,业务量没有明显的增加 服务器上只装有数 ...

回复

vipfbi123 发表于 2012-9-15 13:42:27
顶顶顶顶顶顶顶顶顶顶
oraunix 发表于 2010-12-9 11:09:16
如果你感觉系统命令不是很熟悉,你可以看一下v$pgastat、v$systat来看一下uga等使用情况。
mostxj 发表于 2010-12-6 14:33:22
我的这个系统是运行定时的工作流,每天的session数量基本上是固定的。session数量没有明显增加。
另外,我用ps -ef |grep ora|wc -l 可以看到300个左右的进程,不知道用什么方法可以定位出哪个进程发生了内存泄露。
还有个疑问,pga_aggregate_target 是 3062M,理论上讲,PGA的使用总量不应该超过这个值。SGA target和pga_aggregate_target之和,是不是理论上应该是oracle server应该使用的内存上限?我的服务器上只有oracle运行。这样理论上,我oracle的内存使用率应该在
40%左右,加上server的内存的使用,应该不超过60%.对这点,还是很疑惑。
mostxj 发表于 2010-12-6 14:13:15
昨天发的问题,不知啥原因丢了
mostxj 发表于 2010-12-4 22:47:55
我用以下命令
ps -ef|grep ora|wc -l
查出我的系统里有大概300个和oracle有关的进程,如何甄别是哪个进程发生了内存泄露呢?
我理解的内存泄露的概念是,某个进程在运行的过程中使用了1m内存,在进程结束后,只还给了操作系统0.8m的内存,这样0.2m的内存就被无端占用,其他进程也无法再使用这0.2m的内存了,这样就造成了内存泄露。
pga_aggregate_target 的值是限定了oracle session 总的pga使用量,理论上将不应该超过这个上限的。
mostxj 发表于 2010-12-4 22:32:28
谢谢老师的分析。我的系统每天基本上是运行固定次数的工作流,session数量没有明显的增加。我再研究研究动态监控的办法。
另外想请教老师个问题,理论上讲,sga_target和pga_aggregate_target之和是不是应该是oracle可以使用的最大内存数?如果是这样的话,我的这个oracle sever理论上不应该超过40%内存使用率,主机本身如果不运行其他应用,整个服务器的内存使用率理论上将不应该超过60%.
另外,内存泄露是否是oracle所导致,是否为系统的bug?
oraunix 发表于 2010-11-30 18:21:04
内存的使用情况基本上是和进程的使用情况同步的,因此重点关注下面的几点:
1、用户session数的增加
2、pga的使用情况
3、使用topas+pmap,找出占用内存比较大的server process的情况
oraunix 发表于 2010-11-30 18:18:41
随着时间的推进,你的内存使用会逐渐增加,那么最常见的情况就是内存泄漏。
你需要关注一下pga的使用情况,具体的命令,论坛里面有。
对于单个进程的内存使用情况,你可以使用pmap命令来看,论坛里面有详细的说明。
你的内存的增长,主要是pga内存的增长。
oraunix 发表于 2010-11-30 18:14:44
oracle重启以后,内存使用率下降很正常。
因为重新启动以后,PGA不会在短时间上升。
而且SGA开始也不会占用那么多。
意见
反馈