在线上db2数据库服务器,使用的linux操做系统(RHEL,centos),当db2数据库运行一段时间以后,操做系统的物理内存就趋近于0,同时系统的cache暴增,可是use却不高,下面是正常使用linux
free -g
total used free shared buffers cached
Mem: 125 68 57 66 0 66
-/+ buffers/cache: 2 123
Swap: 15 0 15
复制代码
下面是异常状况git
free -g
total used free shared buffers cached
Mem: 125 68 0 66 0 123
-/+ buffers/cache: 2 123 []()
Swap: 15 0 15
复制代码
此时可用物理内存过少,db2数据库总体性能降低,影响业务使用,为解决线上,采用临时解决办法,手动去释放cache,方法以下github
sync
echo 1 >/proc/sys/vm/drop_caches
复制代码
在没定位到cache太高缘由以前,只能把手动清理cache的方法写成脚本,放到crontab中定时去清理 通过屡次排查,终于发现操做系统cache太高的缘由,是由于db2数据库备份致使,db2数据库备份时,备份的数据写入文件系统时,先通过文件系统的cache,再从cache写入磁盘中,若是使用direct io,备份数据就不通过cache,会直接写入磁盘,下面要解决 的是怎么让备份去使用direct io。sql
通过查阅db2官方帮助文档,发现有一个参数DB2_BACKUP_USE_DIO,设置成on以后,能够达到此效果,通过测试,db2备份时,系统cache再也不增加,在db2 9.5版本设置此参数须要重启数据库实例,db2 9.5之后版本设置以后,再下一次备份时生效。数据库
本篇文章由一文多发平台ArtiPub自动发布centos