这两天在调优数据库性能的过程中需要降低操作系统文件 Cache 对数据库性能的影响, 故调研了一些降低文件系统缓存大小的方法, 其中一种是通过修改 / proc/sys/vm/dirty_background_ration 以及 / proc/sys/vm/dirty_ratio 两个参数的大小来实现. 看了不少相关博文的介绍, 不过一直弄不清楚这两个参数的区别在哪里, 后来看了下面的一篇英文博客才大致了解了它们的不同.
vm.dirty_background_ratio: 这个参数指定了当文件系统缓存脏页数量达到系统内存百分之多少时 (如 5%) 就会触发 pdflush/flush/kdmflush 等后台回写进程运行, 将一定缓存的脏页异步地刷入外存;
vm.dirty_ratio: 而这个参数则指定了当文件系统缓存脏页数量达到系统内存百分之多少时(如 10%), 系统不得不开始处理缓存脏页(因为此时脏页数量已经比较多, 为了避免数据丢失需要将一定脏页刷入外存); 在此过程中很多应用进程可能会因为系统转而处理文件 IO 而阻塞.
之前一直错误的一位 dirty_ratio 的触发条件不可能达到, 因为每次肯定会先达到 vm.dirty_background_ratio 的条件, 后来才知道自己理解错了. 确实是先达到 vm.dirty_background_ratio 的条件然后触发 flush 进程进行异步的回写操作, 但是这一过程中应用进程仍然可以进行写操作, 如果多个应用进程写入的量大于 flush 进程刷出的量那自然会达到 vm.dirty_ratio 这个参数所设定的坎, 此时操作系统会转入同步地处理脏页的过程, 阻塞应用进程
内核选项调整
- vm.dirty_ratio ≤ 5
- vm.dirty_background_ratio ≤ 10
来源: http://www.bubuko.com/infodetail-2989595.html