我是靠谱客的博主 稳重高山,最近开发中收集的这篇文章主要介绍PostgreSQL Huge Page使用最佳实践,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

对于重度依赖于内存的应用数据库而言,hugepage是经常会被使用的。例如在Oracle中我们一般建议当SGA大于8GB时使用hugepage,而在postgresql中我们也建议当内存较大的时候开启hugepage。
为什么呢?这是因为Linux需要维护虚拟内存地址与物理内存的映射关系,为了提升转换性能,最好这部分能够cache在cpu的cache里面。页越大,映射表就越小。使用huge page可以减少页表大小。

接下来我们来看看pg中hugepage的设置方法。

设置方法:

1、首先我们需要看看数据库使用了多少内存。

获得PID
$ head -1 $PGDATA/postmaster.pid
4170

计算数据库启动用了多少内存,指定进程ID
$ pmap 4170 | awk ‘/rw-s/ && /zero/ {print $2}’
6490428K

2、计算需要使用多少hugepage
查看hugepage页大小
grep ^Hugepagesize /proc/meminfo
Hugepagesize: 2048 kB

计算需要多少hugepage(或者直接使用shared_buffer/hugepage页大小)
6490428 / 2048 = 3169.15

一般建议设置大于内存数,因为这里我们取整为:3170

3、分配hugepage
vi /etc/sysctl.conf
vm.nr_hugepages = 3170
sysctl -p

4、设置数据库参数
huge_pages = on # 或者try
shared_buffers = 64GB # 使用64G内存

5、重启数据库并查看hugepage使用情况
cat /proc/meminfo |grep -i huge

AnonHugePages: 6144 kB
HugePages_Total: 3170 ## 设置的HUGE PAGE
HugePages_Free: 3170 ## 这个是当前剩余的,但是实际上真正可用的并没有这么多,因为被PG锁定了3170个大页
HugePages_Rsvd: 3170 ## 启动PG时申请的HUGE PAGE
HugePages_Surp: 0
Hugepagesize: 2048 kB ## 当前大页2M

注意事项:

1、当配置参数huge_pages设置为on时,若PG启动时需要注册的共享内存大于操作系统提供的Huge Page大小时,数据库将无法启动。推荐将huge_pages参数设置为try,在此种场景下,PostMaster将会改为申请普通内存。
2、如果连接数较少时,使用HUGE PAGE性能不如不使用。因此我们可以尽量使用连接池,减少连接数,提升性能。

最后

以上就是稳重高山为你收集整理的PostgreSQL Huge Page使用最佳实践的全部内容,希望文章能够帮你解决PostgreSQL Huge Page使用最佳实践所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部