这些参数在 /proc/sys/vm 目录下
Oracle和MySQL都有脏读(dirty read),write back 等概念,Linux也一样有。具体如下
一. /proc/sys/vm/dirty_background_ratio
该参数是在尝试一个write back 操作之前所持有的脏内存比例。在Linux内核中
,pdflush内核线程池负责VM的回写操作。并周期性同步文件系统给的元数据。若
超出了这个后台回写百分比,则pdflush守护进程异步处理回写操作。
在CentOS5.5下,这个参数是
10
二. /proc/sys/vm/dirty_expire_centisecs
该参数是数据可以保持为dirty状态的最大厘秒数。这个时间段通过查询所有在内存中缓存了脏页面的文件的时间戳来确定。该参数表示一个上限值,确保最终可以将数据写入到磁盘子系统。厘秒表示
1/100s的时间单位
在CentOS5.5下,这个参数是
2999
三. /proc/sys/vm/dirty_ratio
该参数是过量脏内存的比例。当一个任务(或者某一个进程)在脏内存过多的环境中执行文件写操作时,如果(关于这个进程的)脏内存页面占用总内存的百分比高于dirty_ratio这个值,那么系统就执行脏
内存页面的写出操作,直至脏内存页面的百分比低于系统规定的阈值。I/O操作具有很高的延迟。所以这个参数很重要。
在CentOS5.5中,这个参数是
40
四. /proc/sys/vm/dirty_writeback_centisecs
该参数是 pdflush 内核线程执行回写操作之间的时间间隔(厘秒为单位)。也就是pdflush 内核线程执行的频率。该参数的设置应该小于dirty_expire_centisecs,但也不能太小,太小I/O太频繁,反而
使系统性能下降。具体可能需要在生产环境上测试。据说1:6 (dirty_expire_centisecs : dirty_writeback_centisecs )的比例比较好。
在CentOS5.5中,这个参数是
499
五.总结
1.通过这四个参数,可以控制脏数据在内存中占用多大比例写入磁盘文件系统;
2.脏数据在内存中最多可以存在多长时间,超过这个时间就写入磁盘;
3.单个任务在内存中的脏数据所占内存比例多大则写入磁盘;
4.pdflush内核线程执行的频率。
六.注意
1. 区分 dirty_background_ratio 与 dirty_ratio 的不同 。
2. 数据库系统 ORACLE 和 MySQL的性能调优很多都是基于OS层面的。即使数据库进行调优,具体参数还得受限于OS。因为RDBMS 安装在 OS上。
七.通过下面命令查看这四个参数
find /proc/sys/vm -name dirty* -print | while read name; do echo $name ;cat ${name}; done
例如:
[root@localhost Desktop]# find /proc/sys/vm -name dirty* -print | while read name; do echo $name ;cat ${name}; done
/proc/sys/vm/dirty_expire_centisecs
2999
/proc/sys/vm/dirty_writeback_centisecs
499
/proc/sys/vm/dirty_ratio
40
/proc/sys/vm/dirty_background_ratio
10
[root@localhost Desktop]#
八.调整方法
1.(法一) vi /etc/sysctl.conf
然后修改即可比如
vm.dirty_ratio = 30
sysctl -p 生效(重启有效)
2.(法二) echo 30 > /proc/sys/vm/dirty_ratio
echo 30 > /proc/sys/vm/dirty_ratio
这种方法重启无效