从swappiness说起,谈谈PG的OS参数优化

从swappiness说起,谈谈PG的OS参数优化

我们来看buddyinfo中的信息,可以看出,这个服务器的numa有两个节点,其中dma/dma32位于节点0,节点0中的Normal区包含了除掉DMA/DMA32以外的所有内存。

从swappiness说起,谈谈PG的OS参数优化

通过/proc/zoneinfo我们可以看到更为详细的信息,其中nr_inactive_file和nr_inactive_anon是可以快速被释放的内存。Oracle数据库采用的策略是以DB CACHE作为主缓冲,并不依赖于文件系统缓冲,因此在Oracle数据库中设置swappiness为0是没有任何异议的。而对于PG等开源数据库,数据库性能与文件系统缓冲的性能有直接的关系,因此设置swappiness 为0只是能在物理内存不足时尽可能避免PG代码执行相关的匿名块被换页,让PG运行的更为平稳一些。因此在PG数据库中,仅仅设置SWAPPINESS为0还不足以直接提升PG数据库的性能。当物理内存使用达到高水位之后,被迫换页时,造成的系统性能抖动是更大的麻烦。不过不管怎么说,设置swappiness为0,总比直接关闭SWAPP要好的多,一旦真的出现极端情况,换页还是可以拯救系统。

要想让PG等
依赖文件系统缓冲的数据库系统运行的更好,除了
调整swappiness之外,还有很多需要调整的OS参数。下面我们就一些比较重要的OS配置做一下简单的说明。
首先是NUMA,在PG中使用NUMA是一个双刃剑,不过总的来说,在硬件与OS层面关闭NUMA,全局分配内存对PG更为友好,因此我们还是建议在一般情况下,在OS层面和BIOS层面都关闭NUMA。

其次是vm.dirty*参数的设置,对于写IO不是很大的数据库系统,这个参数可能对性能的影响不明显,对于内存中还是会出现一些换页,写IO十分多的系统,设置
vm.dirty_background_ratio = 5vm.dirty_ratio = 10对于稳定PG数据库的性能还是有帮助的。这两个参数与swappiness=0一起设置,才能达到较好的效果。第三,因为PG使用的是文件系统,因此noatime mount参数对于读写十分频繁的数据库系统来说还是需要设置的。这个Mount参数会确定是否在元数据中记录文件访问的时间。第四,存储设备的参数,比如磁盘的预读缓冲大小、磁盘的scheduler等参数,对于不同负载的应用系统来说,调整为非缺省值,在某些场合下是会有作用的。不过对于一般负载的系统,保持使用缺省值,其性能风险并不大。对于经常做全表数据扫描的ODS应用或者数据分析/数据仓库应用来说,加大预读缓冲的大小会对IO性能优化有较好的效果。而对于scheduler,缺省的cfq是一个平衡的策略,对于大多数场景来说不功不过,deadline适用于对IO延时要求比较高的OLTP需求。而对于SSD设备来说,由于其不存在传统磁盘的物理结构,在SSD盘的控制器上会自动优化IO,因此设置为noop是最佳的选择。

PG数据库与OS相关的调整相当多,篇幅有限,今天就聊这么多吧,没想到从一个swappiness能聊到这么多东西,今天所说比较发散,很多问题也仅仅是点到为止,请大家见谅。如果对这些问题有兴趣,可以到百度上去搜索相关的参数,网上已经有很多大咖对此有十分好的见解了。

从swappiness说起,谈谈PG的OS参数优化》来自互联网,仅为收藏学习,如侵权请联系删除。本文URL:http://www.bookhoes.com/436.html