Skip to content

GaussDB 核心参数解释

内存相关参数

shared_buffers

  • 参数说明:设置数据库服务器用于共享内存缓冲区的内存量
  • 默认值:根据系统内存自动计算,通常为系统内存的25%
  • 推荐值:系统内存的25%-40%
  • 注意事项
    • 过大的设置可能导致系统内存不足,影响操作系统的页面缓存
    • 过小的设置可能导致频繁的磁盘I/O,影响性能
    • 建议根据实际负载和系统内存进行调整

work_mem

  • 参数说明:设置每个查询操作可以使用的内存量,用于排序、哈希等操作
  • 默认值:4MB
  • 推荐值:8MB-64MB,根据并发查询数量和查询复杂度调整
  • 注意事项
    • 该参数是每个查询操作的内存限制,不是全局限制
    • 并发查询数量较多时,需要适当降低该参数值
    • 对于复杂查询或大数据量查询,可以适当提高该参数值

maintenance_work_mem

  • 参数说明:设置维护操作(如VACUUM、CREATE INDEX等)可以使用的内存量
  • 默认值:64MB
  • 推荐值:128MB-1GB,根据系统内存和维护操作需求调整
  • 注意事项
    • 该参数只影响维护操作的性能
    • 适当提高该参数值可以加快维护操作的执行速度
    • 建议不超过系统内存的10%

effective_cache_size

  • 参数说明:设置查询优化器假设可用的缓存大小,包括共享缓冲区和操作系统页面缓存
  • 默认值:根据系统内存自动计算,通常为系统内存的50%
  • 推荐值:系统内存的50%-75%
  • 注意事项
    • 该参数只是一个估计值,不实际分配内存
    • 准确的设置可以帮助查询优化器生成更好的执行计划
    • 建议设置为系统内存的50%-75%

连接相关参数

max_connections

  • 参数说明:设置数据库允许的最大并发连接数
  • 默认值:5000
  • 推荐值:根据业务需求和系统资源调整,建议不超过10000
  • 注意事项
    • 过大的设置可能导致系统资源耗尽
    • 建议根据实际并发连接数和系统资源进行调整
    • 可以结合连接池使用,减少实际连接数

superuser_reserved_connections

  • 参数说明:为超级用户保留的连接数,用于数据库管理操作
  • 默认值:10
  • 推荐值:10-20
  • 注意事项
    • 该参数确保超级用户在连接数达到上限时仍能连接到数据库
    • 建议根据数据库管理员数量进行调整

max_prepared_transactions

  • 参数说明:设置可以同时处于准备状态的事务最大数量
  • 默认值:0
  • 推荐值:0或与max_connections相同
  • 注意事项
    • 设为0表示禁用准备事务功能
    • 启用准备事务需要额外的系统资源
    • 建议仅在需要使用准备事务时启用

WAL相关参数

wal_level

  • 参数说明:设置WAL日志的级别,决定WAL日志中包含的信息量
  • 默认值:replica
  • 可选值:minimal, replica, logical
  • 推荐值
    • 对于普通复制,使用replica
    • 对于逻辑复制或CDC,使用logical
  • 注意事项
    • 更高的级别会生成更多的WAL日志,增加磁盘I/O
    • 建议根据实际需求选择合适的级别

max_wal_senders

  • 参数说明:设置可以同时运行的WAL发送进程的最大数量
  • 默认值:10
  • 推荐值:根据备节点数量和WAL日志发送需求调整
  • 注意事项
    • 该参数限制了可以同时连接的备节点数量
    • 建议设置为备节点数量+2(预留2个连接用于其他WAL发送需求)

wal_buffers

  • 参数说明:设置WAL日志缓冲区的大小
  • 默认值:-1(自动计算,通常为shared_buffers的1%,最大为64MB)
  • 推荐值:自动计算或根据WAL日志写入量调整
  • 注意事项
    • 对于写入频繁的系统,可以适当增加该参数值
    • 建议不超过64MB,过大的设置可能浪费内存

checkpoint_timeout

  • 参数说明:设置自动检查点之间的最大时间间隔
  • 默认值:300s(5分钟)
  • 推荐值:300s-900s(5-15分钟)
  • 注意事项
    • 过长的时间间隔可能导致崩溃恢复时间延长
    • 过短的时间间隔可能导致频繁的检查点操作,影响性能
    • 建议根据业务需求和崩溃恢复时间要求进行调整

checkpoint_completion_target

  • 参数说明:设置检查点完成目标,控制检查点操作的持续时间
  • 默认值:0.9
  • 推荐值:0.7-0.9
  • 注意事项
    • 该参数值表示检查点操作应在checkpoint_timeout的指定比例时间内完成
    • 较高的值可以减少检查点对系统性能的影响
    • 建议根据系统负载进行调整

查询优化相关参数

random_page_cost

  • 参数说明:设置随机页面访问的成本估计
  • 默认值:4.0
  • 推荐值
    • 对于SSD存储,建议设置为1.1-2.0
    • 对于机械硬盘,建议设置为4.0-10.0
  • 注意事项
    • 该参数影响查询优化器选择的执行计划
    • 准确的设置可以帮助查询优化器生成更好的执行计划
    • 建议根据存储设备类型进行调整

effective_io_concurrency

  • 参数说明:设置查询优化器假设的磁盘I/O并发能力
  • 默认值:1
  • 推荐值
    • 对于SSD存储,建议设置为200-1000
    • 对于机械硬盘,建议设置为1-10
  • 注意事项
    • 该参数影响查询优化器选择的执行计划
    • 准确的设置可以帮助查询优化器生成更好的执行计划
    • 建议根据存储设备类型和I/O能力进行调整

default_statistics_target

  • 参数说明:设置默认的统计信息收集目标
  • 默认值:100
  • 推荐值:100-1000,根据表的大小和数据分布调整
  • 注意事项
    • 较高的值可以收集更详细的统计信息,帮助查询优化器生成更好的执行计划
    • 较高的值会增加统计信息收集的时间和资源消耗
    • 建议根据表的大小和数据分布进行调整

执行相关参数

max_parallel_workers

  • 参数说明:设置系统级别的最大并行工作进程数
  • 默认值:根据CPU核心数自动计算
  • 推荐值:CPU核心数的50%-100%
  • 注意事项
    • 该参数限制了系统中所有查询可以使用的并行工作进程总数
    • 建议根据CPU核心数和系统负载进行调整

max_parallel_workers_per_gather

  • 参数说明:设置每个查询可以使用的最大并行工作进程数
  • 默认值:2
  • 推荐值:2-8,根据查询复杂度和系统负载调整
  • 注意事项
    • 该参数限制了单个查询可以使用的并行工作进程数
    • 过高的设置可能导致系统资源竞争
    • 建议根据查询复杂度和系统负载进行调整

parallel_tuple_cost

  • 参数说明:设置并行查询中 tuple 传递的成本估计
  • 默认值:0.1
  • 推荐值:0.1-0.5
  • 注意事项
    • 该参数影响查询优化器是否选择并行执行计划
    • 较低的值会使查询优化器更倾向于选择并行执行计划
    • 建议根据系统负载和查询类型进行调整

锁相关参数

deadlock_timeout

  • 参数说明:设置检测死锁的超时时间
  • 默认值:1s
  • 推荐值:1s-10s
  • 注意事项
    • 过短的超时时间可能导致频繁的死锁检测,影响性能
    • 过长的超时时间可能导致死锁长时间无法被检测到
    • 建议根据实际死锁情况进行调整

lock_timeout

  • 参数说明:设置语句等待锁的超时时间
  • 默认值:0(无限制)
  • 推荐值:根据业务需求设置,如30s-300s
  • 注意事项
    • 设为0表示无超时限制,语句可能无限期等待锁
    • 建议根据业务需求和系统负载进行调整

日志相关参数

log_min_messages

  • 参数说明:设置写入日志的最小消息级别
  • 默认值:warning
  • 可选值:debug5, debug4, debug3, debug2, debug1, info, notice, warning, error, log, fatal, panic
  • 推荐值:warning或error,根据日志需求调整
  • 注意事项
    • 较低的级别会生成更多的日志,增加磁盘I/O和存储成本
    • 建议根据日志需求和系统负载进行调整

log_min_error_statement

  • 参数说明:设置记录错误语句的最小消息级别
  • 默认值:error
  • 可选值:debug5, debug4, debug3, debug2, debug1, info, notice, warning, error, log, fatal, panic, none
  • 推荐值:error或warning,根据调试需求调整
  • 注意事项
    • 该参数控制是否记录导致错误的SQL语句
    • 建议根据调试需求和安全性要求进行调整

log_min_duration_statement

  • 参数说明:设置记录SQL语句的最小执行时间
  • 默认值:-1(不记录)
  • 推荐值:1000ms-10000ms(1-10秒),根据性能监控需求调整
  • 注意事项
    • 设为0表示记录所有SQL语句
    • 设为-1表示不记录任何SQL语句
    • 建议根据性能监控需求和系统负载进行调整

安全相关参数

max_connections_per_user

  • 参数说明:设置每个用户允许的最大连接数
  • 默认值:unlimited(无限制)
  • 推荐值:根据用户需求和系统资源调整
  • 注意事项
    • 该参数可以限制单个用户占用过多的连接资源
    • 建议根据用户需求和系统资源进行调整

password_encryption

  • 参数说明:设置密码的加密方式
  • 默认值:md5
  • 可选值:md5, scram-sha-256
  • 推荐值:scram-sha-256(更安全)
  • 注意事项
    • scram-sha-256比md5更安全,但需要客户端支持
    • 建议在安全要求较高的环境中使用scram-sha-256

ssl

  • 参数说明:启用或禁用SSL连接
  • 默认值:off
  • 推荐值:on(在生产环境中建议启用)
  • 注意事项
    • 启用SSL可以加密客户端和服务器之间的连接,提高安全性
    • 启用SSL会带来一定的性能开销
    • 建议在生产环境中启用SSL

参数配置方法

1. 通过配置文件配置

bash
# 修改postgresql.conf文件
vi /data/gaussdb/postgresql.conf

# 添加或修改参数配置
shared_buffers = 8GB
work_mem = 16MB
maintenance_work_mem = 256MB

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

2. 通过SQL命令配置

sql
-- 查看当前参数值
SHOW shared_buffers;
SHOW work_mem;

-- 修改参数值(需要超级用户权限)
ALTER SYSTEM SET shared_buffers = '8GB';
ALTER SYSTEM SET work_mem = '16MB';

-- 重新加载配置(不需要重启数据库)
SELECT pg_reload_conf();

-- 查看已修改但未生效的参数
SELECT name, setting, pending_restart FROM pg_settings WHERE pending_restart = true;

3. 通过会话级别的参数配置

sql
-- 修改当前会话的参数值
SET work_mem = '32MB';

-- 查看当前会话的参数值
SHOW work_mem;

参数调优建议

1. 内存参数调优

  • 根据系统内存大小合理分配内存资源
  • shared_buffers建议设置为系统内存的25%-40%
  • work_mem根据并发查询数量和查询复杂度调整
  • maintenance_work_mem建议不超过系统内存的10%

2. 连接参数调优

  • 根据实际并发连接需求设置max_connections
  • 结合连接池使用,减少实际连接数
  • 为超级用户保留适当数量的连接

3. WAL参数调优

  • 根据复制需求选择合适的wal_level
  • 为WAL发送进程预留足够的连接数
  • 合理设置checkpoint_timeout和checkpoint_completion_target,平衡性能和崩溃恢复时间

4. 查询优化参数调优

  • 根据存储设备类型调整random_page_cost和effective_io_concurrency
  • 根据查询复杂度和系统负载调整并行查询参数
  • 合理设置统计信息收集目标,提高查询优化器的准确性

5. 锁参数调优

  • 根据实际死锁情况调整deadlock_timeout
  • 为语句等待锁设置合理的超时时间
  • 优化事务设计,减少锁持有时间

6. 日志参数调优

  • 根据日志需求设置合适的日志级别
  • 为慢查询设置合理的记录阈值
  • 定期清理和归档日志,避免日志文件过大

参数管理最佳实践

1. 建立参数基线

  • 在系统上线前,建立合理的参数基线
  • 记录初始参数配置和性能指标
  • 定期 review 参数配置,确保其符合业务需求

2. 逐步调整参数

  • 每次只调整少量参数,避免同时调整多个参数
  • 调整参数后,监控系统性能变化
  • 根据性能变化决定是否保留调整或回滚

3. 测试参数变更

  • 在测试环境中充分测试参数变更
  • 模拟生产环境的负载,验证参数变更的效果
  • 评估参数变更可能带来的风险

4. 文档化参数变更

  • 记录参数变更的原因、内容和效果
  • 建立参数变更的审批流程
  • 定期 review 参数变更记录

5. 监控参数效果

  • 建立完善的监控体系,监控参数变更后的系统性能
  • 设置合理的告警阈值,及时发现性能问题
  • 定期分析监控数据,优化参数配置

常见问题(FAQ)

Q1: 如何确定参数的最佳值?

A1: 确定参数最佳值的方法包括:

  • 参考官方文档的建议值
  • 根据系统资源和负载进行调整
  • 在测试环境中进行性能测试
  • 监控生产环境的性能指标
  • 逐步调整参数,观察效果

Q2: 参数修改后需要重启数据库吗?

A2: 这取决于参数的类型:

  • 有些参数(如shared_buffers)需要重启数据库才能生效
  • 有些参数(如work_mem)可以通过pg_reload_conf()函数重新加载配置生效
  • 有些参数(如log_min_messages)可以在会话级别动态修改,只影响当前会话

可以通过pg_settings视图的context列查看参数的生效范围:

  • internal:编译时确定,无法修改
  • postmaster:需要重启数据库
  • sighup:需要重新加载配置
  • backend:需要新建连接
  • superuser:需要超级用户权限,可以在运行时修改
  • user:普通用户可以在会话级别修改

Q3: 如何查看参数的默认值和当前值?

A3: 可以使用以下方法查看参数值:

sql
-- 查看所有参数的当前值
SELECT * FROM pg_settings;

-- 查看特定参数的当前值
SHOW parameter_name;

-- 查看参数的默认值、当前值和生效范围
SELECT name, default_value, setting, context FROM pg_settings WHERE name = 'parameter_name';

Q4: 如何恢复参数到默认值?

A4: 可以使用以下方法恢复参数到默认值:

sql
-- 恢复系统级别的参数到默认值
ALTER SYSTEM RESET parameter_name;

-- 恢复当前会话的参数到默认值
RESET parameter_name;

Q5: 如何监控参数变更的效果?

A5: 监控参数变更效果的方法包括:

  • 监控系统的关键性能指标(CPU、内存、磁盘I/O、查询响应时间等)
  • 分析慢查询日志,查看查询执行计划的变化
  • 使用EXPLAIN ANALYZE比较参数变更前后的查询性能
  • 监控数据库的等待事件,查看是否有性能瓶颈

Q6: 哪些参数对性能影响最大?

A6: 对性能影响较大的参数包括:

  • 内存相关参数(shared_buffers, work_mem, maintenance_work_mem)
  • WAL相关参数(wal_level, checkpoint_timeout, checkpoint_completion_target)
  • 查询优化相关参数(random_page_cost, effective_io_concurrency, default_statistics_target)
  • 并行查询相关参数(max_parallel_workers, max_parallel_workers_per_gather)

Q7: 如何处理参数配置冲突?

A7: 处理参数配置冲突的方法包括:

  • 了解参数之间的依赖关系和冲突关系
  • 优先保证核心参数的配置
  • 在测试环境中充分测试参数组合
  • 监控系统性能,及时发现和解决冲突问题

Q8: 如何备份和恢复参数配置?

A8: 备份和恢复参数配置的方法包括:

  • 备份postgresql.conf文件
  • 使用pg_dumpall --globals-only命令备份全局配置
  • 使用ALTER SYSTEM命令修改的参数会自动保存到postgresql.auto.conf文件
  • 恢复时,可以直接恢复配置文件或使用ALTER SYSTEM命令重新配置参数