暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

白鳝的洞穴 2021-06-17
1293
关于swappiness这个linux的VM参数,我以前在很多文章中都谈过,这个参数可以有效的避免OS突然换页给数据库带来的负面影响。swappiness的取值范围从0-200,只是设定了在OS内存不足时释放内存的优先级。swappiness参数等于释放匿名内存的优先级,200-swappiness等于释放文件缓冲的优先级。缺省值下,swappiness=60会优先释放文件缓冲,如果加大到100,则二者处于相同的优先级,而如果设置为0,则会尽可能释放文件缓冲。
为什么操作系统的缺省参数要优先释放文件缓冲呢?实际上文件缓冲是操作系统读写文件的数据缓冲,如果文件没有被修改,那么这个缓冲就可以直接释放,如果要释放的文件缓冲存储了一个被修改过的脏块,那么就需要把这个脏块回写到文件里,然后才能释放。而如果我们释放的是匿名块,这个匿名块在OS中没有对应的磁盘地址,因此要想以后再次使用这个匿名块,就必须先把这个匿名块写入swap区,然后才能释放。这个操作就是我们所说的换页。从上面的描述我们是不是可以看出,如果我们释放的是一个脏块,那么和匿名块换页的成本是一个数量级的,虽然匿名块往往和程序执行的代码或者堆栈等有关,换页对某个应用程序的影响可能更大一些,不过对于OS来说,差别不是量级的,基本上还是同量级的。

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

通过/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 = 5
vm.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能聊到这么多东西,今天所说比较发散,很多问题也仅仅是点到为止,请大家见谅。如果对这些问题有兴趣,可以到百度上去搜索相关的参数,网上已经有很多大咖对此有十分好的见解了。
文章转载自白鳝的洞穴,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论