Skip to content

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 存储的专门优化参数
  • 引入了更多的性能监控和诊断参数
  • 优化了参数的默认值,适应不同的硬件环境

性能参数调优最佳实践

  1. 循序渐进:每次只调整少数几个参数,观察效果
  2. 基于监控数据:根据实际监控数据调整参数,避免盲目配置
  3. 考虑系统整体:参数调整要考虑系统的整体资源情况,避免顾此失彼
  4. 测试验证:在测试环境中验证参数调整的效果,再应用到生产环境
  5. 文档化:记录参数调整的原因、效果和时间,便于后续分析
  6. 定期回顾:定期回顾参数配置,根据业务变化和硬件升级进行调整

常见问题(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 提供的参数管理工具