外观
KingBaseES 性能参数
性能参数概述
KingBaseES 的性能参数是影响数据库性能的关键配置项,合理的参数配置可以显著提高数据库的性能和稳定性。性能参数主要包括内存相关参数、查询处理参数、并发控制参数、日志参数等。
内存相关参数
shared_buffers
- 描述:共享缓冲区大小,用于缓存数据和索引块
- 默认值:128MB
- 取值范围:16kB ~ 操作系统允许的最大值
- 配置建议:
- 建议设置为系统内存的 25% ~ 40%
- 对于内存大于 32GB 的系统,可适当降低比例
- 过高的设置可能导致系统内存不足
work_mem
- 描述:每个查询操作可用的内存大小
- 默认值:4MB
- 取值范围:64kB ~ 操作系统允许的最大值
- 配置建议:
- 根据查询复杂度和并发量调整
- 复杂查询(如排序、哈希连接)需要更大的 work_mem
- 过高的设置可能导致内存不足,建议结合 max_connections 考虑
maintenance_work_mem
- 描述:维护操作(如 VACUUM、CREATE INDEX)可用的内存大小
- 默认值:64MB
- 取值范围:1MB ~ 操作系统允许的最大值
- 配置建议:
- 建议设置为系统内存的 5% ~ 10%
- 最大不超过 2GB
- 适当增大可提高维护操作的速度
effective_cache_size
- 描述:查询优化器假设的有效缓存大小(包括 shared_buffers 和操作系统缓存)
- 默认值:4GB
- 取值范围:128MB ~ 操作系统允许的最大值
- 配置建议:
- 建议设置为系统内存的 50% ~ 75%
- 该参数不分配实际内存,仅用于优化器决策
查询处理参数
random_page_cost
- 描述:随机读取一页的成本估计
- 默认值:4.0
- 取值范围:1.0 ~ 100.0
- 配置建议:
- 对于 SSD 存储,建议设置为 1.1 ~ 1.5
- 对于 HDD 存储,建议保持默认值或适当调高
- 该参数影响查询计划的选择
seq_page_cost
- 描述:顺序读取一页的成本估计
- 默认值:1.0
- 取值范围:0.1 ~ 100.0
- 配置建议:
- 对于 SSD 存储,可适当降低至 0.5 ~ 0.8
- 该参数影响全表扫描和索引扫描的成本比较
effective_io_concurrency
- 描述:数据库可以并行执行的 I/O 操作数
- 默认值:1
- 取值范围:1 ~ 1000
- 配置建议:
- 对于 SSD 存储,建议设置为 200 ~ 500
- 对于 HDD 存储,建议设置为 2 ~ 10
- 该参数影响并行查询的性能
min_parallel_table_scan_size
- 描述:触发并行表扫描的最小表大小
- 默认值:8MB
- 取值范围:0 ~ 2147483647
- 配置建议:
- 根据表的平均大小调整
- 适当降低可增加并行查询的使用
- 过高的设置会减少并行查询的机会
并发控制参数
max_connections
- 描述:允许的最大并发连接数
- 默认值:100
- 取值范围:1 ~ 100000
- 配置建议:
- 根据应用需求和系统资源调整
- 过高的设置会增加内存消耗和上下文切换成本
- 建议结合连接池使用
max_worker_processes
- 描述:系统支持的最大后台进程数
- 默认值:8
- 取值范围:8 ~ 1024
- 配置建议:
- 建议设置为 CPU 核心数
- 影响并行查询和自动清理等后台进程
max_parallel_workers
- 描述:并行查询可以使用的最大进程数
- 默认值:8
- 取值范围:0 ~ max_worker_processes
- 配置建议:
- 建议设置为 CPU 核心数的一半
- 影响并行查询的性能
max_parallel_workers_per_gather
- 描述:每个 Gather 节点可以使用的最大并行进程数
- 默认值:2
- 取值范围:0 ~ max_worker_processes
- 配置建议:
- 建议设置为 2 ~ 4
- 过高的设置可能导致资源争用
日志相关参数
log_min_duration_statement
- 描述:记录执行时间超过该值的 SQL 语句
- 默认值:-1(不记录)
- 取值范围:-1 ~ 2147483647
- 配置建议:
- 建议设置为 100 ~ 500ms,用于捕获慢查询
- 生产环境中避免设置过小,以免产生大量日志
log_statement
- 描述:控制记录哪些类型的 SQL 语句
- 默认值:'none'
- 取值范围:'none'、'ddl'、'mod'、'all'
- 配置建议:
- 生产环境建议设置为 'ddl' 或 'mod'
- 开发环境可以设置为 'all' 用于调试
checkpoint_completion_target
- 描述:检查点完成目标比例
- 默认值:0.5
- 取值范围:0.0 ~ 1.0
- 配置建议:
- 建议设置为 0.7 ~ 0.9
- 较高的值可以减少检查点对系统性能的影响
wal_buffers
- 描述:WAL 缓冲区大小
- 默认值:-1(自动配置)
- 取值范围:-1 ~ 16384MB
- 配置建议:
- 对于事务频繁的系统,建议设置为 64MB ~ 256MB
- 自动配置通常足够,但可根据实际情况调整
自动清理参数
autovacuum
- 描述:是否启用自动清理
- 默认值:on
- 取值范围:on、off
- 配置建议:
- 建议始终启用
- 禁用可能导致表膨胀和性能下降
autovacuum_max_workers
- 描述:自动清理的最大工作进程数
- 默认值:3
- 取值范围:1 ~ 100
- 配置建议:
- 建议设置为 2 ~ 5
- 过高的设置可能影响正常业务
autovacuum_naptime
- 描述:自动清理进程的休眠时间
- 默认值:1min
- 取值范围:1s ~ 1h
- 配置建议:
- 建议设置为 1min ~ 5min
- 较短的时间间隔可以更及时地清理垃圾数据
版本差异
V8 R6 性能参数
- 引入了并行查询支持,但参数配置相对简单
- 自动清理机制相对基础
- 对 SSD 存储的优化有限
V8 R7 性能参数
- 增强了并行查询的参数配置,支持更细粒度的控制
- 改进了自动清理机制,增加了更多可调参数
- 增加了对 SSD 存储的专门优化参数
- 引入了更多的性能监控和诊断参数
- 优化了参数的默认值,适应不同的硬件环境
性能参数调优最佳实践
- 循序渐进:每次只调整少数几个参数,观察效果
- 基于监控数据:根据实际监控数据调整参数,避免盲目配置
- 考虑系统整体:参数调整要考虑系统的整体资源情况,避免顾此失彼
- 测试验证:在测试环境中验证参数调整的效果,再应用到生产环境
- 文档化:记录参数调整的原因、效果和时间,便于后续分析
- 定期回顾:定期回顾参数配置,根据业务变化和硬件升级进行调整
常见问题(FAQ)
Q1:如何确定 shared_buffers 的最佳值?
A1:shared_buffers 的最佳值取决于系统内存大小和工作负载类型。一般建议设置为系统内存的 25% ~ 40%。对于内存大于 32GB 的系统,可适当降低比例。可以通过监控缓存命中率和系统内存使用情况来调整。
Q2:work_mem 设置过大有什么影响?
A2:work_mem 设置过大会导致每个查询消耗更多的内存,当并发量较高时,可能导致系统内存不足,甚至 OOM。建议结合 max_connections 考虑,计算公式:max_connections * work_mem <= 系统可用内存的 50%。
Q3:如何优化慢查询?
A3:优化慢查询可以从以下几个方面入手:
- 调整 random_page_cost 和 seq_page_cost 以反映实际存储性能
- 适当增大 work_mem 以提高复杂查询的性能
- 设置 log_min_duration_statement 捕获慢查询
- 分析慢查询的执行计划,优化索引和查询语句
Q4:自动清理对性能有影响吗?
A4:自动清理会消耗一定的系统资源,但长期来看,定期清理垃圾数据可以避免表膨胀和性能下降。可以通过调整 autovacuum_max_workers 和 autovacuum_naptime 来平衡清理效果和系统影响。
Q5:如何监控参数调整的效果?
A5:可以通过以下方式监控参数调整的效果:
- 监控数据库的吞吐量、响应时间和资源利用率
- 使用 KingBaseES 内置的性能视图(如 sys_stat_database、sys_stat_bgwriter)
- 分析慢查询日志和执行计划
- 运行基准测试,比较调整前后的性能差异
Q6:不同版本的参数配置可以直接迁移吗?
A6:不建议直接迁移不同版本的参数配置。每个版本的参数默认值和行为可能有所不同,建议根据目标版本的文档和最佳实践重新配置参数。
Q7:如何备份和恢复参数配置?
A7:可以通过以下方式备份和恢复参数配置:
- 备份 kingbase.conf 文件
- 使用 sys_dumpall --globals-only 备份全局配置
- 使用 KingBaseES 提供的参数管理工具
