PostgreSQL11在Windows平台上开启large pages(即:HugePage)
从pg11开始在windows平台上支持large pages(即:HugePage)
- 测试环境:
Windows 10 1909 18363.1198
PostgreSQL 11.10,从edb公司官网下载的,介质名称为“postgresql-11.10-1-windows-x64.exe”
虚拟机环境,分配给虚拟机8G物理内存
- 开启large pages的步骤
0.安装PostgreSQL 11.10
1.关闭windows uac
控制面板--系统和安全--更改用户账户控制设置--改为'从不通知',点击确定。
2.在windows组策略编辑器,赋予运行PostgreSQL的操作系统用户'锁定内存页'的权力(Lock Pages in Memory)
计算机配置\Windows 设置\安全设置\本地策略\用户权利分配\下的“锁定内存页”这个策略。
3.将windows服务中的postgresql-x64-11这个服务改为手动启动。
4.重新启动OS
5.设置postgresql.conf的配置参数huge_pages=on
6.设置postgresql.conf的配置参数shared_buffers=2048MB
7.以管理员身份打开cmd窗口,执行pg_ctl start -D e:\postgresql\11\data启动PostgreSQL
8.验证是否启用
E:\PostgreSQL\11\bin>psql -d postgres -U postgres -p 5432 用户 postgres 的口令: psql (11.10) 输入 'help' 来获取帮助信息. postgres=# show huge_pages; huge_pages ------------ on (1 行记录) postgres=# show shared_buffers; shared_buffers ---------------- 2GB (1 行记录) postgres=# select version(); version ------------------------------------------------------------- PostgreSQL 11.10, compiled by Visual C++ build 1914, 64-bit (1 行记录)
- 注意事项:
1.根据PostgreSQL.org官方文档https://www.postgresql.org/docs/11/runtime-config-resource.html#GUC-HUGE-PAGES,
当启用large pages时,不能用Windows服务中的PostgreSQL服务启动postgresql,经过我测试,
在这种情况下,用Windows服务中的PostgreSQL服务是启动不了postgresql的,Windows事件查看器中的报错为:
2020-12-08 12:20:48.285 HKT [3136] 致命错误: 无法在内存中启用锁定页用户权限 2020-12-08 12:20:48.285 HKT [3136] 提示: 为运行PostgreSQL的Windows用户帐户分配内存中的锁定页用户权限.
2.在该虚拟机8G内存之前,我分配的是2G内存,然后以管理员身份在cmd中pg_ctl 启动 PostgreSQL(配置参数为shared_buffers=128MB,huge_pages=on)有下面的报错,估计是物理内存小的原因:
E:\PostgreSQL\11\bin>pg_ctl start -D e:/postgresql/11/data 等待服务器进程启动 ....2020-12-08 12:26:58.503 HKT [6908] 日志: 正在监听IPv6地址'::',端口 5432 2020-12-08 12:26:58.503 HKT [6908] 日志: 正在监听IPv4地址'0.0.0.0',端口 5432 2020-12-08 12:26:58.821 HKT [6908] 致命错误: 无法创建共享内存段: 错误码1450 2020-12-08 12:26:58.821 HKT [6908] 详细信息: 系统调用CreateFileMapping(size=148897792, name=Global/PostgreSQL:e:/postgresql/11/data)执行失败. 2020-12-08 12:26:58.822 HKT [6908] 日志: 数据库系统已关闭 已停止等待 pg_ctl: 无法启动服务器进程 检查日志输出. E:\PostgreSQL\11\bin>
参考文档:
https://www.postgresql.org/docs/11/runtime-config-resource.html#GUC-HUGE-PAGES
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
AI框架中图层IR的分析
摘要:本文重点分析一下AI框架对IR有什么特殊的需求、业界有什么样的方案以及MindSpore的一些思考。 本文分享自华为云社区《MindSpore技术专栏 | AI框架中图层IR的分析》,原文作者:元气满满的少女月 。 IR(Intermediate Representation即中间表示)是程序编译过程中,源代码与目标代码之间翻译的中介,IR的设计对编译器来说非常关键,好的IR要考虑从源代码到目标代码编译的完备性、编译优化的易用性和性能。而AI框架本质的作用又是什么呢?AI框架本质的作用在于把一个把用户的模型表达翻译到可执行的代码,然后进行高效执行(训练和推理),其中从用户的模型表达(例如深度神经网络)到最后可执行的代码就是个编译器的行为,这个编译器也有一个IR,它的设计对AI框架的完备性/灵活性/易用性/性能都起到至关重要的作用。 本文重点分析一下AI框架对IR有什么特殊的需求、业界有什么样的方案以及MindSpore的一些思考。首先带大家了解下通用的编译器IR的分类以及各自特点。 业界IR的介绍 一、IR根据其组织结构[1],可以分为:Linear IR(线性IR)、Graph...
- 下一篇
在C++中,你真的会用new吗?
摘要:“new”是C++的一个关键字,同时也是操作符。关于new的话题非常多,因为它确实比较复杂,也非常神秘。 本文分享自华为云社区《如何编写高效、优雅、可信代码系列(2)——你真的会用new吗》,原文作者:我是一颗大西瓜 。 C++内存管理 1. C++内存分配 C++中的程序加载到内存后按照代码区、数据区、堆区、栈区进行布局,其中数据区又可以分为自由存储区、全局/静态存储区和常量存储区,各区所长如下: 栈区 函数执行的时候,局部变量的存储单元都在栈上创建,函数执行结束后存储单元会自动释放。栈内存分配运算内置于处理器指令集中,效率高,但分配内存容量有限。 堆区 堆就是new出来的内存块,编译器不管释放,由应用程序控制,new对应delete。如果没释放掉,程序结束后,操作系统会自动回收。 自由存储区 C中malloc分配的内存块。用free结束生命周期。 全局/静态存储区 全局变量和静态变量被分配到同一块内存中,定义的时候就会初始化。 常量存储区 比较特殊的存储区,存放常量,不允许修改。 堆和栈的区别 管理方式 栈由编译器自动管理,堆由程序员控制 空间大小 32位系统下,堆内存可以达...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS8安装Docker,最新的服务器搭配容器使用
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Hadoop3单机部署,实现最简伪集群
- CentOS7,CentOS8安装Elasticsearch6.8.6