在线上db2数据库服务器,使用的linux操作系统(RHEL,centos),当db2数据库运行一段时间之后,操作系统的物理内存就趋近于0,同时系统的cache暴增,但是use却不高,下面是正常使用
free -g
total used free shared buffers cached
Mem: 125 68 57 66 0 66
-/+ buffers/cache: 2 123
Swap: 15 0 15
下面是异常情况
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,方法如下
sync
echo 1 >/proc/sys/vm/drop_caches
在没定位到cache过高原因之前,只能把手动清理cache的方法写成脚本,放到crontab中定时去清理
经过多次排查,终于发现操作系统cache过高的原因,是因为db2数据库备份导致,db2数据库备份时,备份的数据写入文件系统时,先经过文件系统的cache,再从cache写入磁盘中,如果使用direct io,备份数据就不经过cache,会直接写入磁盘,下面要解决
的是怎么让备份去使用direct io。
经过查阅db2官方帮助文档,发现有一个参数DB2_BACKUP_USE_DIO,设置成on之后,可以达到此效果,经过测试,db2备份时,系统cache不再增长,在db2 9.5版本设置此参数需要重启数据库实例,db2 9.5以后版本设置之后,再下一次备份时生效。
喜欢的同学可以关注我的公众号(db_arch)(Mysql数据库运维与架构设计)
本篇文章由一文多发平台ArtiPub自动发布
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。