外观
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/gaussdb2. 通过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命令重新配置参数
