PostgreSQL hugepage 支持

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介: PostgreSQL启动大页支持很简单,只需要配置几个东西。例子:.1. postgresql.conf huge_pages = on shared_buffers = 8GB # 使用8G内存 .2. 操作系统配置grub.conf,加入如下,重启系统 numa=o

PostgreSQL启动大页支持很简单,只需要配置几个东西。
例子:
.1. postgresql.conf

huge_pages = on  
shared_buffers = 8GB  # 使用8G内存  

.2. 操作系统
配置grub.conf,加入如下,重启系统

numa=off  
transparent_hugepage=never  


在/etc/rc.local中加入下面的几行,然后重启操作系统:

if test -f /sys/kernel/mm/transparent_hugepage/enabled; then  
   echo never > /sys/kernel/mm/transparent_hugepage/enabled  
fi  
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then  
   echo never > /sys/kernel/mm/transparent_hugepage/defrag  
fi  

.3. 配置大页数量

cat /proc/meminfo |grep -i huge  
AnonHugePages:         0 kB  
HugePages_Total:       0  
HugePages_Free:        0  
HugePages_Rsvd:        0  
HugePages_Surp:        0  
Hugepagesize:       2048 kB  

每页2MB,一共需要8GB,所以配置为4096

vi /etc/sysctl.conf  
vm.nr_hugepages = 4096  

启动数据库,如果发现报这个错误,

huge TLB pages not supported on this platform  

说明系统编译时,检测到OS不支持大页,那么怎么解决呢?

src/backend/port/sysv_shmem.c  
src/backend/port/pg_shmem.c  
/*  
 * Creates an anonymous mmap()ed shared memory segment.  
 *  
 * Pass the requested size in *size.  This function will modify *size to the  
 * actual size of the allocation, if it ends up allocating a segment that is  
 * larger than requested.  
 */  
#ifndef EXEC_BACKEND  
static void *  
CreateAnonymousSegment(Size *size)  
{  
        Size            allocsize = *size;  
        void       *ptr = MAP_FAILED;  
        int                     mmap_errno = 0;  
  
#ifndef MAP_HUGETLB  
        if (huge_pages == HUGE_PAGES_ON)  
                ereport(ERROR,  
                                (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),  
                                 errmsg("huge TLB pages not supported on this platform")));  
#else  
......  

实际上MAP_HUGETLB是在系统的/usr/include/sys/mman.h 中定义的,如果没有定义,PG就不支持大页。

#include <bits/mman.h>  

在文件 /usr/include/bits/mman.h 中加入以下行,重新编译PostgreSQL即可。

vi /usr/include/bits/mman.h

#define MAP_HUGETLB    0x40000         /* Create huge page mapping.  */  

重新编译PostgreSQL后,重启数据库。

[参考]
.1. http://www.postgresql.org/message-id/flat/54B9C41D.10109@jcvi.org#54B9C41D.10109@jcvi.org
.2. http://terryebase.com/?p=161

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
定位技术 Windows 关系型数据库
PostgreSQL GUI pgadmin4 v3.3 支持 gis geometry 数据编辑、显示
标签 PostgreSQL , pgadmin , gis , 编辑 背景 pgadmin 4 v3.3 开始支持geometry 类型的展示。 https://www.postgresql.org/ftp/pgadmin/pgadmin4/v3.3/windows/ 如果geometry使用的是SRID 4326 (WGS 84 lon/lat)坐标系,则pgadmin会自动从OpenStreetMap 加载图层,作为背景。
2035 0
|
关系型数据库 PostgreSQL 索引
PostgreSQL 11 新特性解读:分区表支持创建主键、外键、索引
PostgreSQL 10 版本虽然支持创建范围分区表和列表分区表,但创建过程依然比较繁琐,需要手工定义子表索引、主键,详见 PostgreSQL10:重量级新特性-支持分区表,PostgreSQL 11 版本得到增强,在父表上创建索引、主键、外键后,子表上将自动创建,本文演示这三种场景。
6910 0
|
关系型数据库 数据库 PostgreSQL
PostgreSQL 11 新特性解读 : Initdb/Pg_resetwal支持修改WAL文件大小
PostgreSQL 11 版本的一个重要调整是支持 initdb 和 pg_resetwal 修改 WAL 文件大小,而 11 版本之前只能在编译安装 PostgreSQL 时设置 WAL 文件大小。
8896 0
|
存储 SQL Oracle
AnalyticDB PostgreSQL 7.0 支持存储过程(CREATE PROCEDURE)特性
AnalyticDB PostgreSQL 7.0 新增了存储过程功能的支持,让用户在使用ADB PG时能够更方便高效地开发业务,并能够更好地兼容Oracle等传统数仓的业务。
474 1
AnalyticDB PostgreSQL 7.0 支持存储过程(CREATE PROCEDURE)特性
|
存储 SQL Oracle
10 PostgreSQL 表级复制-物化视图篇, 支持异地,异构如 Oracle 到 pg 的物化视图|学习笔记
快速学习10 PostgreSQL 表级复制-物化视图篇,支持异地,异构如 Oracle 到 pg 的物化视图
514 0
10 PostgreSQL 表级复制-物化视图篇, 支持异地,异构如 Oracle 到 pg 的物化视图|学习笔记
|
SQL 弹性计算 关系型数据库
PostgreSQL 12 preview - CTE 增强,支持用户语法层控制 materialized 优化
标签 PostgreSQL , CTE , materialized , not materialized , push down 背景 PostgreSQL with 语法,能跑非常复杂的SQL逻辑,包括递归,多语句物化计算等。 在12以前的版本中,WITH中的每一个CTE(common table express),都是直接进行物化的,也就是说外层的条件不会推到CTE(物化节点)里
951 0
|
SQL 并行计算 关系型数据库
Citus 分布式 PostgreSQL 集群 - SQL Reference(SQL支持和变通方案)
Citus 分布式 PostgreSQL 集群 - SQL Reference(SQL支持和变通方案)
178 0
|
弹性计算 关系型数据库 数据库
PostgreSQL 如何让心跳永远不死,支持半同步自动同步、异步升降级 - udf 心跳
标签 PostgreSQL , 同步 , 半同步 , 流复制 , 心跳 , 自动降级 , 自动升级 , dblink , 异步调用 背景 在心跳时,通过自定义UDF,实现心跳永远不被堵塞,并且支持更加当前的配置自动的进行同步、异步模式的升降级。实现半同步的功能。 UDF输入 1、优先模式(同步、异步) 2、同步等待超时时间 当优先为同步模式时,假设当前为同步配置,如果备库异常导致
1908 0
|
关系型数据库 数据库 PostgreSQL
PostgreSQL 如何让心跳永远不死,支持半同步自动同步、异步升降级 - udf 心跳
PostgreSQL 如何让心跳永远不死,支持半同步自动同步、异步升降级 - udf 心跳
1146 0

相关产品

  • 云原生数据库 PolarDB
  • 云数据库 RDS PostgreSQL 版
  • 下一篇
    无影云桌面