重庆思庄Oracle、Redhat认证学习论坛

标题: PG参数之 dynamic_shared_memory_type [打印本页]

作者: 郑全    时间: 2024-8-17 10:23
标题: PG参数之 dynamic_shared_memory_type
在 PostgreSQL 中,`dynamic_shared_memory_type` 是一个配置参数,用于控制数据库使用哪种动态共享内存类型。这个参数主要涉及 PostgreSQL 集群中多个进程之间的通信和数据共享,特别是在使用并行查询时。

### `dynamic_shared_memory_type` 参数概述

- **参数作用**: 决定 PostgreSQL 如何管理动态共享内存段。动态共享内存是按需分配的,主要用于 PostgreSQL 后端进程之间的通信,例如在并行查询中。

- **可选值**:
  - `posix`: 使用 POSIX 共享内存接口。这通常是支持该接口的系统上的首选。
  - `sysv`: 使用 System V 共享内存接口。适用于需要兼容老系统的场景。
  - `windows`: 在 Windows 平台上使用 Windows 原生的共享内存。
  - `mmap`: 使用内存映射文件。在不支持 POSIX 或 System V 共享内存的平台上使用此选项。
  - `none`: 禁用动态共享内存。通常用于调试或在不需要动态共享内存的情况下使用。

- **默认值**: 默认值通常是 `posix`,具体取决于操作系统。

### 配置方法
你可以在 `postgresql.conf` 文件中设置 `dynamic_shared_memory_type`:

```plaintext
dynamic_shared_memory_type = 'posix'
```

或者使用 SQL 语句进行设置:

```sql
ALTER SYSTEM SET dynamic_shared_memory_type TO 'posix';
```

在设置后,你需要重启 PostgreSQL 服务器以使更改生效。

### 如何选择合适的类型
- **POSIX**: 在大多数现代类 Unix 系统上是首选,具有良好的性能和可移植性。
- **SYSV**: 如果在使用 POSIX 共享内存时遇到问题,可以考虑使用此选项。
- **mmap**: 在不支持标准共享内存的系统上作为回退选项。

理解并正确配置 `dynamic_shared_memory_type` 有助于优化 PostgreSQL 的性能和系统兼容性。


作者: 郑全    时间: 2024-8-17 10:24
在最新版本的 PostgreSQL 中,确实有一些关于不再支持 `SYSV` 共享内存的改动。

### PostgreSQL 中对 `SYSV` 支持的变化

从 PostgreSQL 13 开始,`dynamic_shared_memory_type` 参数不再支持 `sysv` 选项。这个改动是为了简化代码和减少维护负担,因为 POSIX 共享内存和 `mmap` 已经在大多数现代操作系统上广泛可用,并且提供了更好的性能和稳定性。

### 影响和替代方案
如果你依赖 `SYSV` 共享内存,那么在 PostgreSQL 13 及更高版本中,系统将无法再使用它。取而代之的选择是:
- **POSIX**:这是推荐的默认选择,支持大多数类 Unix 系统(如 Linux 和 macOS)。
- **mmap**:在不支持 POSIX 的平台上,可以使用内存映射文件。

在大多数场景下,POSIX 共享内存已经能够很好地满足需求,并且比 `SYSV` 更加现代化、易于配置和维护。

### 检查当前支持的共享内存类型
你可以通过查询 `pg_settings` 来查看当前支持的 `dynamic_shared_memory_type` 选项:

```sql
SHOW dynamic_shared_memory_type;
```

如果你的系统支持 POSIX,那么它将是默认配置。如果你尝试在 PostgreSQL 13 及以上版本中使用 `sysv`,会收到错误提示,因为该选项已被移除。

### 结论
PostgreSQL 确实不再支持 `SYSV` 动态共享内存类型,因此建议使用 `POSIX` 或 `mmap` 作为替代方案。






欢迎光临 重庆思庄Oracle、Redhat认证学习论坛 (http://bbs.cqsztech.com/) Powered by Discuz! X3.2