DB2内存使用过高问题分析

db2版本号为V9.7。

先说问题,如图:

最近发现DB2数据库占用内存达到10个G,前一段时间是7.2个G,在之前是4个多G。到底是什么占用了这么大的内存?以下是本人排查问题的步骤。

1、使用db2top对内存进行监控

 

发现数据库缓存池占用内存很高

2、查看数据库连接数

使用db2 list application进行查看,发现只有115个连接,并发并不高。

3、会不会是某个连接占用大量内存

停掉所有应用,对数据库进行重启。重启后先不要启动应用发现内存依旧占用这么高。说明跟前台应用没有关系,同时也排除了内存泄露问题

4、查看数据库配置文件

db2 get db cfg for <dbname> show detail

发现db2的内存都是自动管理的。

5、使用db2pd -db <dbname> -buff命令对缓冲池进行查看

可以看到IBMDEFAULTBP缓冲池数量非常的大,但是该缓冲池是自动管理的。

综上所述,内存占用高原因分析:db2的内存是自动管理的,包括缓冲池。自动管理会按需分配内存,但是为什么内存只增长不释放呢,个人感觉是因为空闲内存较多。当空闲内存较少时,db2会对内存进行释放。

 

但是我数据库的数据一共才4.8G,没有必要配置这么大的缓冲池。那么如何手动调整呢?

执行db2 alter bufferpool IBMDEFAULTBP immediate size 100000(根据实际情况调整)命令

可以看到手工调整后缓冲池的数量变成了自己设置的数量,automatic变成了false;在用db2top查看会发现缓冲池内存值也相应发生了变化。

如何设置成自动调整呢?执行db2 alter bufferpool IBMDEFAULTBP immediate size 100000 automatic即可。

备注:在db2的内存中缓冲池内存的修改是即时生效的,不用重启数据库。

posted @ 2018-12-18 15:46  Little-Coder  阅读(4447)  评论(0编辑  收藏  举报