本文转自:https://pgfans.cn/a?id=787
测试环境:
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.eu/events/pgconfeu2019/sessions/session/2664/slides/211/PostgreSQL%20under%20Windows.pdf
https://www.postgresql.org/docs/11/runtime-config-resource.html#GUC-HUGE-PAGES
https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/enable-the-lock-pages-in-memory-option-windows?view=sql-server-ver15