PG 12 新增参数shared_memory_type用于指定shared memory的类型
在pg12中新增了Shared_memory_type配置参数用于指定shared memory的类型,可用的参数值有:
- mmap:Use an anonymous memory map,系统调用是mmap
- sysv:Use System V shared memory,系统调用是shmget
- windows:Use Windows shared memory,系统调用是CreateFileMapping
该参数在linux操作系统上的默认值是mmap,这也是从PostgreSQL9.3及其之后版本的默认行为,PostgreSQL9.3之前版本中默认行为是sysv。使用mmap这种共享内存的好处是不再需要配置内核参数"kernel.shmmax"和"kernel.shmall"。
在windows上,该参数值为windows,见下:
1 2 3 4 5 6 7 8 9 10 11 | E:\PostgreSQL\12\bin>psql -d postgres -U postgres -p 5412 用户 postgres 的口令: psql (12.5) 输入 'help' 来获取帮助信息. postgres=# show shared_memory_type; shared_memory_type -------------------- windows (1 行记录) |
在Linux平台上:
1 2 3 4 5 6 7 8 9 10 | C:\Users\lhrxxt>psql -U postgres -h192.168.1.35 -p 15432 Password for user postgres: psql (13.3, server 13.2) Type "help" for help. postgres=# show shared_memory_type; shared_memory_type -------------------- mmap (1 row) |
shared_memory_type
(enum
)
指定服务器应用于主共享内存区域的共享内存实现,包括 PostgreSQL 的共享缓冲区和其他共享数据。 可能的值为 mmap
(对使用 mmap
分配的匿名共享内存),sysv
(通过 shmget
分配的系统V 共享内存),和windows
(Windows共享内存)。 并非在所有平台上都支持全部值;第一个被支持的选项是该平台的默认选项。 sysv
选项不是任何平台的默认选项,通常不建议使用,因为它通常需要非默认的内核设置来允许大量的地址分配(参见 第 18.4.1 节)。
dynamic_shared_memory_type
(enum
)
指定服务器应该使用的动态共享内存实现。可能的值是posix
(用于使用 shm_open
分配的 POSIX 共享内存)、sysv
(用于通过shmget
分配的 System V 共享内存)、 windows
(用于 Windows 共享内存)、和mmap
(使用存储在数据目录中的内存映射文件模拟共享内存)。并非所有平台上都支持所有值,平台上第一个支持的选项就是其默认值。 在任何平台上mmap
选项都不是默认值,通常不鼓励使用它,因为操作系统会 反复地把修改过的页面写回到磁盘上,从而增加了系统的I/O负载。不过当 pg_dynshmem
目录被存储在一个 RAM 盘时或者没有其他共享内存功能可用时, 它还是有用的。