外观
KingBaseES 核心配置参数
概述
KingBaseES 核心配置参数是影响数据库实例基本运行的关键参数,它们决定了数据库的内存分配、连接管理、查询处理、日志管理等核心功能。正确配置这些参数对于确保数据库的稳定运行和最佳性能至关重要。
本文档将详细介绍 KingBaseES 中最重要的核心配置参数,包括参数的含义、默认值、取值范围和配置建议,重点结合生产运维场景,提供实用的配置指导和最佳实践。
内存相关参数
shared_buffers
含义:共享缓冲区大小,用于缓存数据块和索引块,是数据库性能的关键参数。
默认值:
- V8 R6:128MB
- V8 R7:256MB
取值范围:
- 最小:128kB
- 最大:操作系统允许的最大共享内存
生产配置建议:
- 一般建议设置为系统内存的 25%-40%
- 对于内存大于 64GB 的系统,可以考虑设置为系统内存的 25%
- 对于内存较小的系统(小于 8GB),可以考虑设置为系统内存的 40%
- 配置后需要重启数据库生效
- 生产环境示例(32GB 内存):
shared_buffers = 8GB - 生产环境示例(128GB 内存):
shared_buffers = 32GB
work_mem
含义:单个查询在执行过程中使用的工作内存,用于排序、哈希连接等操作。
默认值:
- V8 R6:4MB
- V8 R7:4MB
取值范围:
- 最小:64kB
- 最大:2GB
生产配置建议:
- 根据查询复杂度和并发度调整
- 对于复杂查询,可以适当增大
- 对于高并发系统,需要保守设置,避免内存不足
- 建议值:4MB-32MB
- 可以在会话级别动态调整,适合临时处理复杂查询
- 生产环境示例(OLTP 系统):
work_mem = 8MB - 生产环境示例(OLAP 系统):
work_mem = 32MB
maintenance_work_mem
含义:维护操作(如 VACUUM、CREATE INDEX 等)使用的内存。
默认值:
- V8 R6:64MB
- V8 R7:64MB
取值范围:
- 最小:1MB
- 最大:2GB
生产配置建议:
- 一般建议设置为系统内存的 5%-10%
- 最大值不超过 2GB
- 可以加快维护操作的执行速度
- 配置后需要重启数据库生效
- 生产环境示例(32GB 内存):
maintenance_work_mem = 2GB
temp_buffers
含义:会话级别的临时表缓冲区大小。
默认值:
- V8 R6:8MB
- V8 R7:8MB
取值范围:
- 最小:800kB
- 最大:操作系统允许的最大内存
生产配置建议:
- 根据临时表的使用情况调整
- 对于频繁使用临时表的系统,可以适当增大
- 建议值:8MB-128MB
- 可以在会话级别动态调整
- 生产环境示例:
temp_buffers = 32MB
effective_cache_size
含义:优化器估计的系统可用缓存大小,包括 shared_buffers 和操作系统缓存。
默认值:
- V8 R6:4GB
- V8 R7:4GB
取值范围:
- 最小:128MB
- 最大:操作系统允许的最大内存
生产配置建议:
- 建议设置为系统内存的 50%-75%
- 不影响实际内存分配,仅用于优化器成本计算
- 配置后不需要重启,通过
SIGHUP信号生效 - 生产环境示例(32GB 内存):
effective_cache_size = 20GB
连接与会话相关参数
max_connections
含义:允许的最大并发连接数。
默认值:
- V8 R6:100
- V8 R7:200
取值范围:
- 最小:10
- 最大:10000
生产配置建议:
- 根据系统资源和业务需求调整
- 一般建议不超过 CPU 核心数的 2-4 倍
- 过大的连接数会消耗大量系统资源
- 配置后需要重启数据库生效
- 建议使用连接池(如 PgBouncer)减少实际连接数
- 生产环境示例(16 核 CPU):
max_connections = 500
superuser_reserved_connections
含义:为超级用户预留的连接数,用于在连接数满时进行管理操作。
默认值:
- V8 R6:3
- V8 R7:3
取值范围:
- 最小:0
- 最大:max_connections - 1
生产配置建议:
- 建议保持默认值或适当增大
- 确保在连接数满时能够进行管理操作
- 配置后需要重启数据库生效
- 生产环境示例:
superuser_reserved_connections = 5
unix_socket_directories
含义:Unix 套接字文件的存储目录。
默认值:
- V8 R6:/tmp
- V8 R7:/tmp
取值范围:
- 任意有效的目录路径
生产配置建议:
- 建议设置为安全的目录,限制访问权限
- 可以设置多个目录,用逗号分隔
- 配置后需要重启数据库生效
- 生产环境示例:
unix_socket_directories = '/var/run/kingbase,/tmp'
### listen_addresses
**含义**:数据库监听的 IP 地址,用于接受 TCP/IP 连接。
**默认值**:
- V8 R6:localhost
- V8 R7:localhost
**取值范围**:
- '*':监听所有 IP 地址
- 具体 IP 地址列表,用逗号分隔
**生产配置建议**:
- 生产环境建议只监听特定的 IP 地址
- 不要使用 '*',避免安全风险
- 配置后需要重启数据库生效
- 生产环境示例:listen_addresses = '192.168.1.100,127.0.0.1'
### port
**含义**:数据库监听的 TCP/IP 端口。
**默认值**:
- V8 R6:54321
- V8 R7:54321
**取值范围**:
- 最小:1
- 最大:65535
**生产配置建议**:
- 建议使用默认端口或自定义端口
- 避免使用知名端口,减少安全风险
- 配置后需要重启数据库生效
- 生产环境示例(使用默认端口):port = 54321
## 查询处理相关参数
### max_parallel_workers
**含义**:系统允许的最大并行工作进程数。
**默认值**:
- V8 R6:8
- V8 R7:16
**取值范围**:
- 最小:0
- 最大:操作系统允许的最大进程数
**生产配置建议**:
- 一般建议设置为 CPU 核心数
- 对于多核系统,可以适当增大
- 配置后需要重启数据库生效
- 生产环境示例(24 核 CPU):max_parallel_workers = 24
### max_parallel_workers_per_gather
**含义**:单个 Gather 节点允许的最大并行工作进程数。
**默认值**:
- V8 R6:2
- V8 R7:4
**取值范围**:
- 最小:0
- 最大:max_parallel_workers
**生产配置建议**:
- 建议设置为 CPU 核心数的 1/4 到 1/2
- 对于 OLTP 系统,可以适当减小
- 对于 OLAP 系统,可以适当增大
- 配置后不需要重启,通过 `SIGHUP` 信号生效
- 生产环境示例(OLTP 系统):max_parallel_workers_per_gather = 4
- 生产环境示例(OLAP 系统):max_parallel_workers_per_gather = 8
### max_parallel_maintenance_workers
**含义**:维护操作(如 CREATE INDEX)允许的最大并行工作进程数。
**默认值**:
- V8 R6:2
- V8 R7:4
**取值范围**:
- 最小:0
- 最大:max_parallel_workers
**生产配置建议**:
- 建议设置为 CPU 核心数的 1/4 到 1/2
- 配置后不需要重启,通过 `SIGHUP` 信号生效
- 生产环境示例:max_parallel_maintenance_workers = 4
### random_page_cost
**含义**:随机读取页面的成本估计,用于查询优化器选择执行计划。
**默认值**:
- V8 R6:4.0
- V8 R7:4.0
**取值范围**:
- 最小:0.1
- 最大:100.0
**生产配置建议**:
- 对于 SSD 存储,可以设置为 1.1-2.0
- 对于 HDD 存储,保持默认值
- 配置后不需要重启,通过 `SIGHUP` 信号生效
- 生产环境示例(SSD 存储):random_page_cost = 1.1
### seq_page_cost
**含义**:顺序读取页面的成本估计,用于查询优化器选择执行计划。
**默认值**:
- V8 R6:1.0
- V8 R7:1.0
**取值范围**:
- 最小:0.1
- 最大:100.0
**生产配置建议**:
- 一般保持默认值
- 可以根据存储性能适当调整
- 配置后不需要重启,通过 `SIGHUP` 信号生效
- 生产环境示例:seq_page_cost = 1.0
## 日志相关参数
### logging_collector
**含义**:是否启用日志收集器,用于将日志写入文件。
**默认值**:
- V8 R6:off
- V8 R7:on
**取值范围**:
- on | off
**生产配置建议**:
- 生产环境建议启用
- 便于日志管理和分析
- 配置后需要重启数据库生效
- 生产环境示例:logging_collector = on
### log_directory
**含义**:日志文件的存储目录。
**默认值**:
- V8 R6:log
- V8 R7:log
**取值范围**:
- 任意有效的目录路径
**生产配置建议**:
- 建议设置为专门的日志目录
- 确保有足够的磁盘空间
- 配置后不需要重启,通过 `SIGHUP` 信号生效
- 生产环境示例:log_directory = 'pg_log'
### log_filename
**含义**:日志文件的命名格式。
**默认值**:
- V8 R6:postgresql-%Y-%m-%d_%H%M%S.log
- V8 R7:kingbase-%Y-%m-%d_%H%M%S.log
**取值范围**:
- 包含时间占位符的字符串
**生产配置建议**:
- 建议包含日期和时间信息
- 便于日志归档和查找
- 配置后不需要重启,通过 `SIGHUP` 信号生效
- 生产环境示例(按天轮转):log_filename = 'kingbase-%Y-%m-%d.log'
### log_rotation_age
**含义**:日志文件的轮转时间间隔。
**默认值**:
- V8 R6:1d
- V8 R7:1d
**取值范围**:
- 最小:1min
- 最大:1y
**生产配置建议**:
- 建议根据日志量调整
- 一般设置为 1d 或 1h
- 配置后不需要重启,通过 `SIGHUP` 信号生效
- 生产环境示例(高并发系统):log_rotation_age = 1h
### log_rotation_size
**含义**:日志文件的最大大小,超过后进行轮转。
**默认值**:
- V8 R6:10MB
- V8 R7:100MB
**取值范围**:
- 最小:0(不根据大小轮转)
- 最大:1GB
**生产配置建议**:
- 建议根据磁盘空间调整
- 一般设置为 100MB-500MB
- 配置后不需要重启,通过 `SIGHUP` 信号生效
- 生产环境示例:log_rotation_size = 500MB
## 检查点相关参数
### checkpoint_timeout
**含义**:检查点的时间间隔。
**默认值**:
- V8 R6:5min
- V8 R7:15min
**取值范围**:
- 最小:30s
- 最大:1h
**生产配置建议**:
- 建议设置为 15min-30min
- 增大该值可以减少检查点频率,降低 I/O 负载
- 但会增加恢复时间
- 配置后不需要重启,通过 `SIGHUP` 信号生效
- 生产环境示例:checkpoint_timeout = 30min
### max_wal_size
**含义**:检查点之间允许生成的最大 WAL 日志大小。
**默认值**:
- V8 R6:1GB
- V8 R7:4GB
**取值范围**:
- 最小:2MB
- 最大:操作系统允许的最大值
**生产配置建议**:
- 建议设置为 shared_buffers 的 8-16 倍
- 增大该值可以减少检查点频率,降低 I/O 负载
- 但会增加磁盘空间使用
- 配置后不需要重启,通过 `SIGHUP` 信号生效
- 生产环境示例(shared_buffers=8GB):max_wal_size = 64GB
### min_wal_size
**含义**:检查点后保留的最小 WAL 日志大小。
**默认值**:
- V8 R6:80MB
- V8 R7:2GB
**取值范围**:
- 最小:2MB
- 最大:max_wal_size
**生产配置建议**:
- 建议设置为 max_wal_size 的 1/4 到 1/2
- 确保有足够的 WAL 日志用于恢复
- 配置后不需要重启,通过 `SIGHUP` 信号生效
- 生产环境示例(max_wal_size=64GB):min_wal_size = 16GB
### checkpoint_completion_target
**含义**:检查点完成目标,控制检查点的执行速度。
**默认值**:
- V8 R6:0.5
- V8 R7:0.9
**取值范围**:
- 最小:0.0
- 最大:1.0
**生产配置建议**:
- 建议设置为 0.8-0.9
- 增大该值可以使检查点更平滑地执行,降低 I/O 峰值
- 配置后不需要重启,通过 `SIGHUP` 信号生效
- 生产环境示例:checkpoint_completion_target = 0.9
## 并发控制参数
### max_standby_archive_delay
**含义**:备库在恢复归档 WAL 时,允许的最大延迟时间。
**默认值**:
- V8 R6:30s
- V8 R7:30s
**取值范围**:
- 最小:0
- 最大:3600s
**生产配置建议**:
- 建议根据业务需求调整
- 对于要求低延迟的系统,可以适当减小
- 配置后不需要重启,通过 `SIGHUP` 信号生效
- 生产环境示例:max_standby_archive_delay = 60s
### max_standby_streaming_delay
**含义**:备库在恢复流式 WAL 时,允许的最大延迟时间。
**默认值**:
- V8 R6:30s
- V8 R7:30s
**取值范围**:
- 最小:0
- 最大:3600s
**生产配置建议**:
- 建议根据业务需求调整
- 对于要求低延迟的系统,可以适当减小
- 配置后不需要重启,通过 `SIGHUP` 信号生效
- 生产环境示例:max_standby_streaming_delay = 60s
### deadlock_timeout
**含义**:检测死锁的超时时间。
**默认值**:
- V8 R6:1s
- V8 R7:1s
**取值范围**:
- 最小:1ms
- 最大:1h
**生产配置建议**:
- 建议保持默认值或适当调整
- 过小会导致频繁的死锁检测,增加 CPU 负载
- 过大则会延迟死锁的发现
- 配置后不需要重启,通过 `SIGHUP` 信号生效
- 生产环境示例(高并发系统):deadlock_timeout = 500ms
### lock_timeout
**含义**:语句等待锁的超时时间。
**默认值**:
- V8 R6:0(无限制)
- V8 R7:0(无限制)
**取值范围**:
- 最小:0(无限制)
- 最大:1h
**生产配置建议**:
- 建议根据业务需求设置
- 可以避免长事务持有锁导致其他事务长时间等待
- 配置后不需要重启,通过 `SIGHUP` 信号生效
- 生产环境示例:lock_timeout = 30s
## 版本差异
### V8 R6 与 V8 R7 的核心参数差异
| 参数名称 | V8 R6 默认值 | V8 R7 默认值 | 变化说明 | 生产影响 |
|---------|------------|------------|---------|---------|
| shared_buffers | 128MB | 256MB | 增大默认值,提高性能 | V8 R7 默认性能更好 |
| max_connections | 100 | 200 | 增大默认值,支持更多连接 | V8 R7 更适合高并发场景 |
| logging_collector | off | on | 默认启用日志收集器 | V8 R7 日志管理更便捷 |
| log_filename | postgresql-%Y-%m-%d_%H%M%S.log | kingbase-%Y-%m-%d_%H%M%S.log | 修改日志文件名前缀 | 便于区分 KingBaseES 日志 |
| max_wal_size | 1GB | 4GB | 增大默认值,减少检查点频率 | V8 R7 I/O 性能更优 |
| min_wal_size | 80MB | 2GB | 增大默认值,确保足够的 WAL 日志 | V8 R7 恢复更可靠 |
| checkpoint_timeout | 5min | 15min | 增大默认值,减少检查点频率 | V8 R7 I/O 负载更低 |
| checkpoint_completion_target | 0.5 | 0.9 | 增大默认值,使检查点更平滑 | V8 R7 I/O 峰值更平缓 |
| max_parallel_workers | 8 | 16 | 增大默认值,支持更多并行查询 | V8 R7 并行查询性能更好 |
| max_parallel_workers_per_gather | 2 | 4 | 增大默认值,提高并行查询性能 | V8 R7 复杂查询更快 |
### V8 R7 新增核心参数
1. **wal_keep_size**:控制主库保留的 WAL 日志大小,用于支持备库复制
- 生产建议:根据备库延迟情况设置,一般 10GB-50GB
- 示例:`wal_keep_size = 20GB`
2. **jit**:控制是否启用即时编译,提高查询性能
- 生产建议:OLAP 系统建议启用,OLTP 系统可根据实际情况调整
- 示例:`jit = on`
3. **jit_inline_above_cost**:控制 JIT 内联的成本阈值
- 生产建议:根据查询复杂度调整
- 示例:`jit_inline_above_cost = 500000`
4. **jit_optimize_above_cost**:控制 JIT 优化的成本阈值
- 生产建议:根据查询复杂度调整
- 示例:`jit_optimize_above_cost = 500000`
## 生产环境配置最佳实践
### 参数调整原则
- **循序渐进**:一次只调整少量参数,避免大范围变更
- **基于数据**:根据监控数据和性能测试结果调整
- **考虑业务**:结合业务特点和负载类型调整
- **测试验证**:在测试环境验证后再应用到生产环境
- **记录变更**:详细记录参数变更,便于回滚和分析
### 不同负载类型的配置建议
#### OLTP 负载
- **内存参数**:
- shared_buffers:系统内存的 25%-30%
- work_mem:4MB-8MB(保守设置,避免内存不足)
- effective_cache_size:系统内存的 50%-60%
- **连接参数**:
- max_connections:根据并发需求调整,一般不超过 CPU 核心数的 2-3 倍
- 必须使用连接池减少实际连接数
- **查询参数**:
- 适当降低并行查询参数,减少 CPU 竞争
- random_page_cost:根据存储类型调整
- **检查点参数**:
- checkpoint_timeout:15min-30min
- max_wal_size:shared_buffers 的 8-12 倍
- checkpoint_completion_target:0.8-0.9
#### OLAP 负载
- **内存参数**:
- shared_buffers:系统内存的 30%-40%
- work_mem:16MB-64MB(增大工作内存,提高复杂查询性能)
- effective_cache_size:系统内存的 60%-75%
- **连接参数**:
- max_connections:可以适当减小,OLAP 系统并发度一般较低
- **查询参数**:
- 适当增大并行查询参数,提高查询性能
- max_parallel_workers_per_gather:CPU 核心数的 1/2 左右
- enable_parallel_append:on
- enable_parallel_hash:on
- **检查点参数**:
- 与 OLTP 负载类似,但可以考虑更大的 max_wal_size
### 配置文件管理
- **版本控制**:对配置文件进行版本控制,便于追踪变更
- **备份**:在修改前备份配置文件,使用 `cp kingbase.conf kingbase.conf.bak`
- **注释**:为非默认参数添加注释,说明配置原因和时间
- **格式规范**:保持配置文件的格式规范,便于阅读
- **集中管理**:对于集群环境,考虑使用配置管理工具(如 Ansible)集中管理配置文件
## 常见问题
### 如何查看当前参数值?
可以使用以下方法查看当前参数值:
- 使用 SQL 命令:`SHOW 参数名;` 或 `SELECT name, setting FROM sys_settings WHERE name = '参数名';`
- 使用 `ksql` 命令:`\show 参数名`
- 查看配置文件:直接查看 kingbase.conf 文件
- 生产环境建议:使用监控工具(如 Prometheus + Grafana)实时监控参数变化
### 如何使参数变更生效?
参数变更的生效方式取决于参数类型:
- **需要重启**:修改配置文件后,需要重启数据库生效(如 shared_buffers、max_connections)
- **SIGHUP 信号**:修改配置文件后,发送 SIGHUP 信号到数据库进程生效
```bash
# Linux 环境
kill -SIGHUP $(pgrep -f kingbase)
# Windows 环境
使用服务管理器重启服务- 立即生效:使用
SET或ALTER SYSTEM SET命令立即生效sql-- 会话级别立即生效 SET work_mem = '16MB'; -- 全局级别永久生效 ALTER SYSTEM SET shared_buffers = '16GB';
如何在会话级别调整参数?
可以使用 SET 命令在会话级别调整参数,仅对当前会话有效:
sql
SET work_mem = '16MB';这在处理复杂查询时非常有用,可以临时提高工作内存,而不影响其他会话。
如何在全局级别永久调整参数?
可以使用 ALTER SYSTEM SET 命令在全局级别永久调整参数:
sql
ALTER SYSTEM SET shared_buffers = '16GB';该命令会将参数写入 postgresql.auto.conf 文件,重启后生效。生产环境建议使用这种方式,便于版本控制和管理。
如何验证参数调整的效果?
可以通过以下方法验证参数调整的效果:
- 性能测试:运行基准测试,比较调整前后的性能指标(如 TPS、QPS)
- 监控数据:观察 CPU、内存、I/O 等资源使用率的变化
- 查询执行计划:使用
EXPLAIN ANALYZE检查查询执行计划的变化 - 日志分析:分析日志中的性能相关信息,如慢查询日志
- 生产建议:使用 A/B 测试,逐步调整参数,观察业务指标变化
如何回滚参数变更?
可以通过以下方法回滚参数变更:
- 会话级别变更:关闭会话或使用
RESET 参数名;命令 - 全局级别变更:使用
ALTER SYSTEM RESET 参数名;命令 - 配置文件变更:恢复备份的配置文件并重启数据库
- 生产建议:每次参数变更前,详细记录当前参数值和变更原因,便于快速回滚
生产环境参数调整的最佳流程是什么?
- 监控分析:通过监控工具分析当前性能瓶颈
- 制定计划:根据分析结果,制定参数调整计划
- 测试验证:在测试环境验证参数调整效果
- 备份配置:备份生产环境当前配置文件
- 执行变更:在业务低峰期执行参数变更
- 验证效果:监控生产环境,验证变更效果
- 记录变更:详细记录变更内容、时间和效果
- 准备回滚:如果出现问题,立即执行回滚计划
总结
KingBaseES 核心配置参数是影响数据库性能和稳定性的关键因素。正确理解和配置这些参数对于确保数据库的最佳运行至关重要。
在生产环境中,参数配置需要结合系统硬件资源、业务需求和负载类型进行调整。遵循参数调整原则,循序渐进,基于数据进行决策,并在测试环境验证后再应用到生产环境。
同时,需要注意不同版本之间的参数差异,了解新特性和默认值变化,以便充分利用数据库的性能潜力。通过合理配置核心参数,可以充分发挥 KingBaseES 的性能优势,确保数据库的稳定运行,满足业务需求。
通过合理配置核心参数,可以充分发挥 KingBaseES 的性能潜力,确保数据库的稳定运行,满足业务需求。
