外观
GaussDB 性能相关参数
内存参数
shared_buffers
参数说明
- 数据库共享缓冲区大小
- 用于缓存表和索引数据
- 影响数据库读取性能
配置建议
# 建议设置为系统内存的 25% 左右
shared_buffers = 8GB调整注意事项
- 过大的 shared_buffers 可能导致操作系统缓存减少
- 建议结合操作系统内存情况进行调整
- 需要重启数据库才能生效
work_mem
参数说明
- 每个查询操作的工作内存
- 用于排序、哈希连接等操作
- 影响复杂查询的性能
配置建议
# 建议根据并发查询数量调整
# 例如:系统内存 32GB,预期并发 100 个查询
# work_mem = (32GB * 0.25) / 100 = 80MB
work_mem = 64MB调整注意事项
- 过大的 work_mem 可能导致内存不足
- 可以在会话级别临时调整
- 监控内存使用情况避免 OOM
maintenance_work_mem
参数说明
- 维护操作的工作内存
- 用于 VACUUM、CREATE INDEX 等操作
- 影响维护操作的性能
配置建议
# 建议设置为较大值,提高维护操作效率
maintenance_work_mem = 2GB调整注意事项
- 该参数同时只能被一个维护操作使用
- 过大的值可能导致内存浪费
- 可以根据系统负载动态调整
I/O 参数
effective_cache_size
参数说明
- 数据库期望的操作系统缓存大小
- 用于优化器成本估算
- 不实际分配内存
配置建议
# 建议设置为系统内存的 50-75%
effective_cache_size = 24GB调整注意事项
- 该参数影响执行计划选择
- 正确配置可以提高索引使用效率
- 不需要重启数据库,修改后立即生效
random_page_cost
参数说明
- 随机读取页面的成本估算
- 影响优化器对索引扫描和全表扫描的选择
- 数值越小,优化器越倾向于使用索引
配置建议
# 机械硬盘建议值
random_page_cost = 4.0
# SSD 建议值
random_page_cost = 1.1调整注意事项
- 根据存储设备类型调整
- 可以结合实际 I/O 性能测试结果优化
- 不需要重启数据库
effective_io_concurrency
参数说明
- 数据库可以并行执行的 I/O 操作数
- 影响并行查询的 I/O 性能
- 数值越大,并行 I/O 能力越强
配置建议
# 机械硬盘建议值
effective_io_concurrency = 2
# SSD 建议值
effective_io_concurrency = 200调整注意事项
- 根据存储设备的 I/O 并发能力调整
- 过高的值可能导致 I/O 争用
- 不需要重启数据库
并发参数
max_connections
参数说明
- 允许的最大并发连接数
- 影响数据库的并发处理能力
- 过大的值可能导致资源耗尽
配置建议
# 根据系统资源和应用需求调整
max_connections = 500调整注意事项
- 结合 work_mem 参数考虑内存使用
- 监控连接数变化趋势
- 需要重启数据库才能生效
max_worker_processes
参数说明
- 数据库支持的最大工作进程数
- 用于并行查询和维护操作
- 影响并行处理能力
配置建议
# 建议设置为 CPU 核心数
max_worker_processes = 16调整注意事项
- 结合 CPU 核心数调整
- 影响并行查询的最大并行度
- 需要重启数据库才能生效
max_parallel_workers_per_gather
参数说明
- 每个查询可以使用的最大并行工作进程数
- 影响并行查询的性能
- 数值越大,并行度越高
配置建议
# 建议设置为 CPU 核心数的一半
max_parallel_workers_per_gather = 8调整注意事项
- 根据查询复杂度和系统负载调整
- 过高的值可能导致 CPU 争用
- 不需要重启数据库
执行计划参数
default_statistics_target
参数说明
- 统计信息收集的默认目标
- 影响优化器成本估算的准确性
- 数值越大,统计信息越详细
配置建议
# 建议值
default_statistics_target = 100
# 对于复杂查询,可以提高到 500 或更高
default_statistics_target = 500调整注意事项
- 过高的值会增加统计信息收集时间
- 可以针对特定表或列单独设置
- 不需要重启数据库
enable_seqscan
参数说明
- 是否启用全表扫描
- 影响优化器对扫描方式的选择
- 建议保持默认值
配置建议
# 建议保持启用
enable_seqscan = on调整注意事项
- 禁用全表扫描可能导致优化器选择低效执行计划
- 仅在特定场景下临时调整
- 不需要重启数据库
enable_indexscan
参数说明
- 是否启用索引扫描
- 影响优化器对扫描方式的选择
- 建议保持默认值
配置建议
# 建议保持启用
enable_indexscan = on调整注意事项
- 禁用索引扫描可能导致性能下降
- 仅在特定场景下临时调整
- 不需要重启数据库
常见问题(FAQ)
Q1: 如何查看当前参数配置?
A1: 使用以下方法查看参数配置:
- 使用 gsql 命令:sql
SHOW parameter_name; - 查询系统视图:sql
SELECT name, setting, unit FROM pg_settings WHERE name LIKE '%parameter%'; - 查看配置文件:bash
cat /data/gaussdb/data/postgresql.conf | grep parameter_name
Q2: 哪些参数需要重启数据库才能生效?
A2: 以下是一些需要重启数据库的常用参数:
- shared_buffers
- max_connections
- max_worker_processes
- listen_addresses
- port
Q3: 如何临时调整参数?
A3: 使用以下命令临时调整参数:
- 会话级别:sql
SET parameter_name = value; - 数据库级别:sql
ALTER DATABASE dbname SET parameter_name = value; - 用户级别:sql
ALTER USER username SET parameter_name = value;
Q4: 如何优化复杂查询的性能?
A4: 可以调整以下参数优化复杂查询:
- 增加 work_mem 提高排序和哈希连接性能
- 调整 max_parallel_workers_per_gather 提高并行度
- 增加 default_statistics_target 提高统计信息准确性
- 优化 random_page_cost 提高索引使用效率
Q5: 如何监控参数调整效果?
A5: 使用以下方法监控参数调整效果:
- 监控查询响应时间
- 查看执行计划变化
- 监控系统资源使用率(CPU、内存、I/O)
- 使用 pg_stat_statements 分析 SQL 执行统计
- 运行基准测试比较调整前后的性能
