暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PostgreSQL 中内存参数

恩恩霸 2025-07-04
222

在 PostgreSQL 中,除了 `maintenance_work_mem`,还有许多重要的内存参数,这些参数对数据库的性能和资源管理有着关键的影响。以下是一些主要的内存参数及其作用:

### 1. **shared_buffers**
- **作用**:设置分配给 PostgreSQL 的共享内存缓冲区的大小。这些缓冲区用于缓存数据页,减少磁盘 I/O 操作。
- **默认值**:通常是 128MB,但建议根据服务器的物理内存大小进行调整。
- **配置建议**:通常设置为物理内存的 25% 到 40%。例如,如果服务器有 16GB 的物理内存,可以将 `shared_buffers` 设置为 4GB 到 6GB。

### 2. **work_mem**
- **作用**:设置每个查询操作(如排序、哈希表等)可以使用的内存量。
- **默认值**:通常是 4MB。
- **配置建议**:根据服务器的物理内存和预期的查询复杂度进行调整。如果服务器内存充足,可以将 `work_mem` 设置得更高,以提高查询性能。例如,可以设置为 128MB 或更高。

### 3. **maintenance_work_mem**
- **作用**:设置维护操作(如 VACUUM、CREATE INDEX、ALTER TABLE ADD FOREIGN KEY 等)可以使用的最大内存量。
- **默认值**:通常是 64MB。
- **配置建议**:根据服务器的物理内存和维护操作的频率进行调整。如果服务器内存充足,可以将 `maintenance_work_mem` 设置得更高,以提高维护操作的性能。例如,可以设置为 256MB 或更高。

### 4. **temp_buffers**
- **作用**:设置每个数据库会话可以使用的临时缓冲区的大小。这些缓冲区用于存储临时表和排序操作中的临时数据。
- **默认值**:通常是 8MB。
- **配置建议**:根据服务器的物理内存和临时表的使用频率进行调整。如果服务器内存充足,可以将 `temp_buffers` 设置得更高,以提高临时表操作的性能。例如,可以设置为 32MB 或更高。

### 5. **effective_cache_size**
- **作用**:估计操作系统和 PostgreSQL 缓冲区的总大小。这个参数主要用于查询优化器,帮助它更好地估计查询的代价。
- **默认值**:通常是 128MB。
- **配置建议**:通常设置为物理内存的 50% 到 75%。例如,如果服务器有 16GB 的物理内存,可以将 `effective_cache_size` 设置为 8GB 到 12GB。

### 6. **shared_memory_type**
- **作用**:指定 PostgreSQL 使用的共享内存类型。在某些操作系统上,可以选择不同的共享内存实现方式。
- **默认值**:通常是 `posix` 或 `sysv`,具体取决于操作系统。
- **配置建议**:通常不需要修改,默认值即可。

### 7. **wal_buffers**
- **作用**:设置用于写前日志(WAL)的缓冲区大小。WAL 缓冲区用于缓存日志记录,减少磁盘 I/O 操作。
- **默认值**:通常是 16MB。
- **配置建议**:根据服务器的物理内存和日志生成的速度进行调整。如果服务器内存充足,可以将 `wal_buffers` 设置得更高,以提高日志写入的性能。例如,可以设置为 32MB 或更高。

### 8. **max_wal_size**
- **作用**:设置 WAL 日志的最大大小。当 WAL 日志达到这个大小时,会触发日志切换和归档操作。
- **默认值**:通常是 1GB。
- **配置建议**:根据服务器的物理内存和日志生成的速度进行调整。如果服务器内存充足,可以将 `max_wal_size` 设置得更高,以减少日志切换的频率。例如,可以设置为 2GB 或更高。

### 9. **min_wal_size**
- **作用**:设置 WAL 日志的最小大小。即使日志没有达到 `max_wal_size`,也会在日志大小达到 `min_wal_size` 时进行归档操作。
- **默认值**:通常是 80MB。
- **配置建议**:根据服务器的物理内存和日志生成的速度进行调整。如果服务器内存充足,可以将 `min_wal_size` 设置得更高,以减少日志归档的频率。例如,可以设置为 128MB 或更高。

### 10. **checkpoint_segments**
- **作用**:设置在两次检查点之间可以使用的 WAL 日志段数。这个参数在 PostgreSQL 9.5 及之前的版本中使用,从 PostgreSQL 9.6 开始被 `max_wal_size` 和 `min_wal_size` 替代。
- **默认值**:通常是 3。
- **配置建议**:在 PostgreSQL 9.5 及之前的版本中,根据服务器的物理内存和日志生成的速度进行调整。如果服务器内存充足,可以将 `checkpoint_segments` 设置得更高,以减少检查点的频率。例如,可以设置为 10 或更高。

### 11. **checkpoint_completion_target**
- **作用**:设置检查点完成的目标时间比例。这个参数控制检查点操作在两次检查点之间的时间内完成的比例。
- **默认值**:通常是 0.5。
- **配置建议**:根据服务器的物理内存和日志生成的速度进行调整。如果服务器内存充足,可以将 `checkpoint_completion_target` 设置得更高,以减少检查点对性能的影响。例如,可以设置为 0.9 或更高。

### 12. **random_page_cost**
- **作用**:估计从磁盘随机读取一页的成本。这个参数主要用于查询优化器,帮助它更好地估计查询的代价。
- **默认值**:通常是 4.0。
- **配置建议**:根据服务器的磁盘性能进行调整。如果服务器使用的是 SSD,可以将 `random_page_cost` 设置得更低,以反映 SSD 的随机读取性能。例如,可以设置为 1.5 或更低。

### 13. **seq_page_cost**
- **作用**:估计从磁盘顺序读取一页的成本。这个参数主要用于查询优化器,帮助它更好地估计查询的代价。
- **默认值**:通常是 1.0。
- **配置建议**:根据服务器的磁盘性能进行调整。如果服务器使用的是 SSD,可以将 `seq_page_cost` 设置得更低,以反映 SSD 的顺序读取性能。例如,可以设置为 0.5 或更低。

### 14. **default_statistics_target**
- **作用**:设置默认的统计目标。这个参数控制 PostgreSQL 收集的统计信息的详细程度。
- **默认值**:通常是 100。
- **配置建议**:根据数据库的大小和查询复杂度进行调整。如果数据库较大且查询复杂度较高,可以将 `default_statistics_target` 设置得更高,以提高查询优化器的准确性。例如,可以设置为 200 或更高。

### 15. **max_connections**
- **作用**:设置允许的最大并发连接数。
- **默认值**:通常是 100。
- **配置建议**:根据服务器的物理内存和预期的并发连接数进行调整。如果服务器内存充足,可以将 `max_connections` 设置得更高,以支持更多的并发连接。例如,可以设置为 200 或更高。

### 16. **max_prepared_transactions**
- **作用**:设置允许的最大预处理事务数。
- **默认值**:通常是 0。
- **配置建议**:如果需要使用两阶段提交,需要将 `max_prepared_transactions` 设置为一个大于 0 的值。例如,可以设置为 10 或更高。

### 17. **max_locks_per_transaction**
- **作用**:设置每个事务可以持有的最大锁数。
- **默认值**:通常是 64。
- **配置建议**:根据数据库的复杂度和事务的锁需求进行调整。如果数据库中有大量的锁操作,可以将 `max_locks_per_transaction` 设置得更高。例如,可以设置为 128 或更高。

### 18. **max_worker_processes**
- **作用**:设置允许的最大后台工作进程数。
- **默认值**:通常是 8。
- **配置建议**:根据服务器的物理内存和 CPU 核心数进行调整。如果服务器有较多的 CPU 核心,可以将 `max_worker_processes` 设置得更高,以充分利用多核 CPU 的性能。例如,可以设置为 16 或更高。

### 19. **max_parallel_workers_per_gather**
- **作用**:设置每个 Gather 节点可以使用的最大并行工作进程数。
- **默认值**:通常是 2。
- **配置建议**:根据服务器的物理内存和 CPU 核心数进行调整。如果服务器有较多的 CPU 核心,可以将 `max_parallel_workers_per_gather` 设置得更高,以提高并行查询的性能。例如,可以设置为 4

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论