PostgreSQL的内存参数

PostgreSQL的内存参数

bash 复制代码
基础信息
OS版本:Red Hat Enterprise Linux Server release 7.9 (Maipo)
DB版本:16.2
pg软件目录:/home/pg16/soft
pg数据目录:/home/pg16/data
端口:5777

PostgreSQL 提供了多种内存参数,可以通过调整这些参数来优化数据库的性能。以下是一些主要的内存参数及其简要说明:

主要内存参数概述

  1. shared_buffers
    • 描述:决定 PostgreSQL 用于缓存表和索引数据的内存大小。通常推荐设置为系统内存的 25%-50%。
    • 示例
bash 复制代码
[pg16@test ~]$ cat data/postgresql.conf |grep shared_buffers
shared_buffers = 128MB                  # min 128kB
  1. work_mem
    • 描述:用于操作(如排序、哈希聚合、联接等)内存的大小。每个操作会单独使用这些内存,可以调多但不能过大。
    • 示例
bash 复制代码
[pg16@test ~]$ cat data/postgresql.conf |grep work_mem
work_mem = 4MB                          # min 64kB
  1. maintenance_work_mem
    • 描述 :用于维护操作(如 VACUUM, CREATE INDEX, ALTER TABLE ADD FOREIGN KEY 等)的内存大小。
    • 示例
bash 复制代码
[pg16@test ~]$ cat data/postgresql.conf |grep maintenance_work_mem
maintenance_work_mem = 64MB             # min 1MB
  1. temp_buffers
    • 描述:用于每个数据库会话的临时表缓存内存大小。
    • 示例
bash 复制代码
[pg16@test ~]$ cat data/postgresql.conf |grep temp_buffers
temp_buffers = 8MB                      # min 800kB
  1. max_connections
    • 描述 :允许的最大数据库连接数。需要结合 shared_buffers 参数调节。
    • 示例
bash 复制代码
[pg16@test ~]$ cat data/postgresql.conf |grep max_connections
max_connections = 50                    # (change requires restart)
  1. effective_cache_size
    • 描述:设置 PostgreSQL 认为操作系统内核文件系统缓存及 PostgreSQL 缓存的大小。推荐设置为系统内存的 50%-75%。
    • 示例
bash 复制代码
[pg16@test ~]$ cat data/postgresql.conf |grep effective_cache_size
effective_cache_size = 1GB
  1. wal_buffers
    • 描述 :用于存储写入 WAL (Write-Ahead Log) 的缓冲区大小。通常设置为 shared_buffers 的 3%-4%。
    • 示例
bash 复制代码
[pg16@test ~]$ cat data/postgresql.conf |grep wal_buffers
wal_buffers = 8MB                       # min 32kB, -1 sets based on shared_buffers
  1. checkpoint_completion_target
    • 描述:设置 checkpoint 完成平均占用时间的比例(0到1之间)。
    • 示例
bash 复制代码
[pg16@test ~]$ cat data/postgresql.conf |grep checkpoint_completion_target
checkpoint_completion_target = 0.9      # checkpoint target duration, 0.0 - 1.0
  1. autovacuum_work_mem
    • 描述 :用于自动化 VACUUM 操作的内存大小。
    • 示例
bash 复制代码
[pg16@test ~]$ cat data/postgresql.conf |grep autovacuum_work_mem
autovacuum_work_mem =64MB

内存参数配置示例

以下是一个示例 postgresql.conf 中内存参数配置:

ini 复制代码
# 内存配置示例

shared_buffers = 2GB                        # 共享内存缓冲区,设置为系统内存的 25%-50%
work_mem = 64MB                             # 每个操作的工作内存,适当调整以优化查询性能
maintenance_work_mem = 512MB                # 维护任务的工作内存
temp_buffers = 64MB                         # 临时表缓存内存
max_connections = 200                       # 最大连接数,根据并发需求设置
effective_cache_size = 6GB                  # 预期总缓存大小,包括操作系统的文件系统缓存
wal_buffers = 16MB                          # WAL 缓冲区
checkpoint_completion_target = 0.7          # checkpoint 完成时间比例
autovacuum_work_mem = 64MB                  # 自动 `VACUUM` 操作的内存大小

其他相关参数

除了主要内存参数,还有一些其他参数可能间接影响内存使用:

  • sort_mem / work_mem: 不同版本的配置名称不同,但作用相似。
  • maintenance_work_mem : 影响 CREATE INDEX, VACUUM, REINDEX 等操作的性能。
  • hash_mem_multiplier: 影响哈希连接的内存分配。
  • max_worker_processes: 影响并行查询的最大工作进程数。
  • parallel_min_parallel_table_scan_size: 影响并行查询的触发条件。

调整和优化建议

  1. 监控内存使用情况

    使用系统工具(如 top, htop, free -m)和 PostgreSQL 内置视图(如 pg_stat_activity)监控内存使用情况。

  2. 逐步调整参数

    从小到大逐步调整内存参数,观察系统性能变化,避免一次性调整过大导致系统不稳定。

  3. 平衡系统资源

    结合数据库和操作系统的内存需求,合理分配系统内存资源。确保操作系统有足够的内存用于文件系统缓存和其他重要任务。

  4. 考虑实际工作负载

    根据实际工作负载特点调整内存参数。例如,查询密集的环境下可以增大 work_mem,而批处理任务较多的环境下则更关注 maintenance_work_mem 等参数。

小结

调整和优化 PostgreSQL 的内存参数可以显著提升数据库的性能和效率。每个参数的具体值应根据系统资源、实际工作负载和性能需求进行合理配置和优化。通过逐步调整和监控,你可以找到最适合你的系统的配置参数组合。

谨记:心存敬畏,行有所止。

相关推荐
乘云数字DATABUFF40 分钟前
5分钟部署开源APM Databuff:OpenTelemetry全链路追踪入门实战
运维·后端
Databend17 小时前
在 AWS 中国峰会逛了一天,我在 Databend 展台看到了 Agent 数据基础设施的新思路
数据库·人工智能·agent
ClouGence2 天前
Oracle 数据同步为什么会出现数据不一致?长事务是常被忽略的原因
数据库·后端·oracle
荣--2 天前
一键部署不是为了省时间 —— 它是把"买来的 PaaS"变成"自己的平台"的拐点
运维·zabbix·工程化·一键部署·平台化·边界设计
江华森2 天前
动手实战学 Docker — 从零到集群编排完全指南
运维
飞将2 天前
从零实现数据库(2)——HashIndex + IndexManager
数据库
Avan_菜菜3 天前
FRP 内网穿透完整实战:从 HTTP 映射到 HTTPS 自签代理
运维·nginx·https
Nturmoils3 天前
订单列表慢查询,先看 WHERE、ORDER BY 和 LIMIT
数据库
渣波3 天前
拒绝 SQL 焦虑!手把手带你用 NestJS + Prisma + DTO 写出“防弹”级后端代码
javascript·数据库·后端
SelectDB4 天前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维