Skip to content

GaussDB 核心参数设置

内存相关参数

shared_buffers

  • 功能:设置数据库服务器用于缓存数据块的内存大小
  • 默认值:128MB
  • 建议值:系统内存的 25%-40%
  • 调整方法
    bash
    gs_guc set -D /data/gaussdb -c "shared_buffers=128GB"
  • 注意事项
    • 过大可能导致系统内存不足
    • 过小可能影响查询性能
    • 需要重启数据库生效

work_mem

  • 功能:设置每个查询操作可使用的内存大小
  • 默认值:4MB
  • 建议值:根据并发查询数和系统内存调整,一般 8MB-64MB
  • 调整方法
    bash
    gs_guc set -D /data/gaussdb -c "work_mem=16MB"
  • 注意事项
    • 过大可能导致内存溢出
    • 过小可能导致临时文件使用增加
    • 影响排序、哈希等操作的性能

maintenance_work_mem

  • 功能:设置维护操作(如VACUUM、CREATE INDEX)可使用的内存大小
  • 默认值:64MB
  • 建议值:1GB-4GB
  • 调整方法
    bash
    gs_guc set -D /data/gaussdb -c "maintenance_work_mem=2GB"
  • 注意事项
    • 过大可能影响其他操作
    • 过小可能延长维护操作时间

effective_cache_size

  • 功能:估计数据库可使用的操作系统缓存大小
  • 默认值:4GB
  • 建议值:系统内存的 50%-75%
  • 调整方法
    bash
    gs_guc set -D /data/gaussdb -c "effective_cache_size=256GB"
  • 注意事项
    • 不实际分配内存,仅用于优化器估算
    • 过高或过低都会影响执行计划选择

连接相关参数

max_connections

  • 功能:设置数据库允许的最大连接数
  • 默认值:500
  • 建议值:根据业务需求和系统资源调整,一般 1000-2000
  • 调整方法
    bash
    gs_guc set -D /data/gaussdb -c "max_connections=1500"
  • 注意事项
    • 过大可能导致内存不足
    • 过小可能导致连接失败
    • 需要重启数据库生效

superuser_reserved_connections

  • 功能:为超级用户预留的连接数
  • 默认值:10
  • 建议值:5-20
  • 调整方法
    bash
    gs_guc set -D /data/gaussdb -c "superuser_reserved_connections=15"
  • 注意事项
    • 确保超级用户始终能连接数据库
    • 不计入 max_connections 限制

connection_timeout

  • 功能:设置客户端连接超时时间(秒)
  • 默认值:10s
  • 建议值:5s-60s
  • 调整方法
    bash
    gs_guc set -D /data/gaussdb -c "connection_timeout=30s"
  • 注意事项
    • 过短可能导致正常连接被拒绝
    • 过长可能导致资源占用时间过长

WAL 相关参数

wal_buffers

  • 功能:设置 WAL 缓冲区大小
  • 默认值:16MB
  • 建议值:64MB-256MB
  • 调整方法
    bash
    gs_guc set -D /data/gaussdb -c "wal_buffers=64MB"
  • 注意事项
    • 过大可能浪费内存
    • 过小可能导致频繁写入磁盘

checkpoint_completion_target

  • 功能:设置检查点完成时间目标
  • 默认值:0.5
  • 建议值:0.8-0.9
  • 调整方法
    bash
    gs_guc set -D /data/gaussdb -c "checkpoint_completion_target=0.9"
  • 注意事项
    • 用于平滑检查点期间的 I/O 负载
    • 值越大,检查点期间 I/O 越平滑

wal_writer_delay

  • 功能:设置 WAL 写入器的刷新延迟
  • 默认值:200ms
  • 建议值:100ms-500ms
  • 调整方法
    bash
    gs_guc set -D /data/gaussdb -c "wal_writer_delay=200ms"
  • 注意事项
    • 影响 WAL 写入的频率
    • 过小可能导致 I/O 频繁

查询优化参数

enable_seqscan

  • 功能:控制是否启用顺序扫描
  • 默认值:on
  • 建议值:on
  • 调整方法
    bash
    gs_guc set -D /data/gaussdb -c "enable_seqscan=on"
  • 注意事项
    • 一般不建议禁用
    • 仅在特定场景下临时调整

enable_indexscan

  • 功能:控制是否启用索引扫描
  • 默认值:on
  • 建议值:on
  • 调整方法
    bash
    gs_guc set -D /data/gaussdb -c "enable_indexscan=on"
  • 注意事项
    • 通常保持启用状态
    • 用于测试和调试

random_page_cost

  • 功能:设置随机页面访问成本
  • 默认值:4.0
  • 建议值
    • SSD:1.1-1.5
    • HDD:4.0-6.0
  • 调整方法
    bash
    gs_guc set -D /data/gaussdb -c "random_page_cost=1.2"
  • 注意事项
    • 影响优化器选择索引扫描还是顺序扫描
    • 根据存储设备类型调整

并发控制参数

max_worker_processes

  • 功能:设置数据库最大工作进程数
  • 默认值:8
  • 建议值:CPU 核心数的 1-2 倍
  • 调整方法
    bash
    gs_guc set -D /data/gaussdb -c "max_worker_processes=64"
  • 注意事项
    • 影响并行查询性能
    • 需要重启数据库生效

max_parallel_workers

  • 功能:设置最大并行工作进程数
  • 默认值:8
  • 建议值:CPU 核心数的一半
  • 调整方法
    bash
    gs_guc set -D /data/gaussdb -c "max_parallel_workers=32"
  • 注意事项
    • 影响并行查询的并行度
    • 与 max_worker_processes 配合使用

max_parallel_workers_per_gather

  • 功能:设置每个 gather 操作的最大并行工作进程数
  • 默认值:2
  • 建议值:4-16
  • 调整方法
    bash
    gs_guc set -D /data/gaussdb -c "max_parallel_workers_per_gather=8"
  • 注意事项
    • 控制单个查询的并行度
    • 过高可能导致资源竞争

参数调整流程

1. 参数评估

  • 分析系统性能瓶颈
  • 确定需要调整的参数
  • 参考最佳实践和官方文档
  • 考虑系统资源和业务需求

2. 参数修改

  • 使用 gs_guc 工具修改参数
  • 区分需要重启和不需要重启的参数
  • 在测试环境验证效果
  • 记录参数调整前后的性能变化

3. 参数验证

  • 监控系统性能指标
  • 检查数据库日志
  • 运行基准测试
  • 观察业务响应时间

4. 参数回滚

  • 如出现问题,及时回滚参数
  • 分析失败原因
  • 调整参数值后重新测试
  • 更新参数调整记录

参数调整示例

内存参数优化示例

bash
# 调整 shared_buffers
gs_guc set -D /data/gaussdb -c "shared_buffers=128GB"

# 调整 work_mem
gs_guc set -D /data/gaussdb -c "work_mem=16MB"

# 调整 maintenance_work_mem
gs_guc set -D /data/gaussdb -c "maintenance_work_mem=2GB"

# 调整 effective_cache_size
gs_guc set -D /data/gaussdb -c "effective_cache_size=256GB"

# 重启数据库使参数生效
gs_ctl restart -D /data/gaussdb

并发参数优化示例

bash
# 调整 max_connections
gs_guc set -D /data/gaussdb -c "max_connections=1500"

# 调整 max_worker_processes
gs_guc set -D /data/gaussdb -c "max_worker_processes=64"

# 调整 max_parallel_workers
gs_guc set -D /data/gaussdb -c "max_parallel_workers=32"

# 调整 max_parallel_workers_per_gather
gs_guc set -D /data/gaussdb -c "max_parallel_workers_per_gather=8"

# 重启数据库使参数生效
gs_ctl restart -D /data/gaussdb

参数调整注意事项

  • 备份配置文件:修改前备份 postgresql.conf 文件
  • 逐步调整:避免一次性修改多个参数
  • 测试验证:在测试环境验证后再应用到生产环境
  • 监控观察:调整后密切监控系统性能
  • 记录文档:详细记录参数调整的原因、值和效果
  • 考虑业务场景:不同业务场景参数设置不同

常见问题(FAQ)

Q1: 如何查看 GaussDB 参数的当前值?

A1: 可以使用 gs_guc show -D /data/gaussdb 查看所有参数的当前值,或使用 gs_guc show -D /data/gaussdb -c "parameter_name" 查看特定参数的值。

Q2: 哪些参数需要重启数据库才能生效?

A2: 需要重启数据库才能生效的参数包括 shared_buffers、max_connections、max_worker_processes 等。可以通过 gs_guc reload 命令在线调整的参数不需要重启,如 work_mem、maintenance_work_mem 等。

Q3: 如何优化 GaussDB 的内存参数?

A3: 优化内存参数需要考虑系统内存大小、并发查询数和业务类型。一般建议 shared_buffers 设置为系统内存的 25%-40%,work_mem 根据并发数调整,maintenance_work_mem 设置为较大值以加速维护操作。

Q4: 如何调整 GaussDB 的并行查询参数?

A4: 调整并行查询参数需要考虑 CPU 核心数和系统负载。建议 max_worker_processes 设置为 CPU 核心数的 1-2 倍,max_parallel_workers 设置为 CPU 核心数的一半,max_parallel_workers_per_gather 设置为 4-16。

Q5: 参数调整后性能下降怎么办?

A5: 如果参数调整后性能下降,应立即回滚参数到之前的有效值,并分析性能下降的原因。可以通过查看数据库日志、监控系统指标和运行基准测试来定位问题,调整参数值后重新测试。