KAOT工具新特性:支持openGuass、金仓数据库自动调优
发表于 2026/03/11
0
1 非商用声明
该文档提供的内容为参考实践,仅供用户参考使用,用户可参考实践文档构建自己的软件,按需进行安全、可靠性加固,但不建议直接将相关Demo或镜像文件集成到商用产品中。
2 概述
KAOT(Kunpeng Auto Optimization Tool)是一款系统性能调优工具,其核心目标是通过自动化操作提升调优效率与易用性。相较于传统人工调优,KAOT可根据用户指定的应用场景,自动完成调优配置文件生成、调优配置执行及鲲鹏BoostKit加速库安装等一系列操作,同时用户可以指定特定的调优手段进行快速使能,有效降低手动操作的复杂性和出错风险。
KAOT新增支持金仓数据库、openGauss数据库2个数据库场景的自动化调优能力,2个数据库的调优参考实践详见如下两个文档:
表1 数据库调优参考实践
| 参考实践 | 链接 |
| 基于虚拟机的openGauss调优参考实践 | https://www.hikunpeng.com/zh/developer/techArticles/20251230-1 |
| 基于鲲鹏服务器的金仓数据库调优参考实践 | https://www.hikunpeng.com/zh/developer/techArticles/20260309-2 |
3 数据库调优端到端使用指导
本章节基于数据库调优场景,给出该工具使用的最佳实践。
工具详细使用参考实践参考文档:https://www.hikunpeng.com/zh/developer/techArticles/20251222-1
步骤1 调优前测试环境上的基线性能数据(可选,用来对比调优前后的效果)
根据业务场景进行测试即可。
步骤2 生成当前环境上的基线文件
执行以下命令生成所有调优项的基线文件:
python kaot.py basecfg步骤3 根据场景生成调优配置文件
执行以下命令生成该场景下的配置文件
(1) openGuass数据库场景
python kaot.py generate -s opengauss_database --configfile opengauss_database:/opt/openGuass/data/postgresql.conf -o feature_config.yaml(2) KingBase金仓数据库场景
python kaot.py generate -s kingbase_database --configfile kingbase_database:/opt/Kingbase/ES/V8/data/kingbase.conf -o feature_config.yaml示例中提供的kingbase.conf路径为KingBase默认路径,用户可使用默认路径,若有指定,则使用自定义的路径。
postgresql.conf一般没有默认路径,安装目录由用户指定,用户必须使用用户指定的postgresql.conf路径。
根据执行成功后的日志回显,可查看生成的配置文件feature_config.yaml是否完整。
步骤4 使能生成的调优配置文件
执行以下命令使能调优项:python kaot.py execute -tp feature_config.yaml
根据执行打屏日志,可查看生成的基线文件base_config.yaml是否完整、调优项是否执行成功,以及生成的配置文件备份是否完整
步骤5 重启数据库服务使得配置参数调整生效。
步骤6 测试调优后的性能(可选,用来对比调优前后的效果)按照步骤1的测试方法进行测试。
步骤7 回退不需要执行的调优配置(可选)
若要回退指定的调优项,需将基线文件的deploy字段修改为Y,并按调优项使能新生成的配置文件,以回退config_nic_affinity为例,使用方式如下:
1. 修改基线文件
python kaot.py generate -bp base_config.yaml -o target_config.yaml得到新生成的配置文件target_config.yaml,执行前注意拷贝基线文件base_config.yaml至./output目录下。
2. 使能新生成的配置文件中的调优项
python kaot.py generate -s opengauss_database --configfile opengauss_database:/opt/openGuass/data/postgresql.conf -o feature_config.yaml步骤8 测试最终性能(可选,用来对比调优前后的效果)
按照步骤1的测试方法进行测试。
----结束
4 附录:数据库调优场景下的自动调优项汇总
表1 KAOT工具支持的KingBase金仓数据库调优项总览
| 调优手段 | 作用 |
|---|---|
| 设置CPU高性能模式 | 通过将CPU频率固定在最高值获得最大化性能 |
| 开启SMT超线程 | 开启SMT超线程,每个物理核分为两个逻辑核,提升整机性能 |
| 策略性抑制swap交换内存使用 | 减少数据库缓存交换到磁盘的情况,从而保证数据库的访问性能 |
| 磁盘IO调度策略调整 | 在固态硬盘场景下,使用none可以提升磁盘IO性能 |
| 网卡中断绑核 | 将处理网卡中断的CPU core设置在网卡所在的NUMA上,从而减少跨NUMA的内存访问所带来的额外开销,提升网络处理性能 |
| KingBase金仓数据库共享内存参数优化 | 可以将频繁访问的数据从缓慢的磁盘(微秒/毫秒级)移至高速的内存(纳秒级),从而提升数据库性能 |
| KingBase金仓数据库I/O相关参数优化 | 根据业务实际调整数据库配置参数,提升磁盘IO性能 |
表2 KAOT工具支持的openGuass金仓数据库调优项总览
| 调优手段 | 作用 |
|---|---|
| 设置CPU高性能模式 | 通过将CPU频率固定在最高值获得最大化性能 |
| openGuass数据库配置参数优化 | 根据业务实际调整数据库配置参数,提升磁盘IO性能 |
表3 KAOT工具调优KingBase金仓数据库配置参数参考
| 数据库配置参数名称 | 参数含义及应用 | 默认值 | 参考调优值 |
|---|---|---|---|
| shared_buffers | 设置数据库服务器使用的共享内存缓冲区的数量,主要用于缓存数据,可以将频繁访问的数据从缓慢的磁盘(微秒/毫秒级)移至高速的内存(纳秒级),从而提升数据库性能。该参数根据需求一般不能设置超过物理机整机内存总量的80%,但至少是20%。 | 128MB | KingBase金仓数据库场景工具使用65%* 服务器内存后向上取整 以512GB为例,约为333GB |
| checkpoint_timeout | 两个相邻检查点之间的时间间隔,用于刷数据到磁盘。 应用:根据系统写的负载设置, 一般不要太频繁,可以和后台写线程配置相关参数配合使用。 | 5min | 20min |
| checkpoint_completion_target | 表示checkpoint的完成时间要在两个checkpoint间隔时间的N%内完成。设置长一点,避免对性能测试的影响 | 0.5 | 0.9 |
| bgwriter_delay | 后台写线程的自动执行时间,后台写线程的作用是将 shared_buffers 里的脏页面写回到磁盘,减少 checkpoint 的压力。 应用:如果系统数据修改的压力一直很大,建议将该时间间隔设置小一些,以免积累的大量的脏页面到 checkpoint,使 checkpoint 时间过长(checkpoint 期间系统响应速度较慢)。 | 200ms | 10ms |
| max_wal_size | 检查点之间WAL日志允许增长的最大大小。 应用:设置较大的值(如300GB)可防止在写入高峰期因WAL增长过快而频繁触发检查点 | 1GB | 300GB |
| max_connections | 数据库允许的最大并发连接数。 | 100 | 2048 |
表4 KAOT工具调优openGuass数据库配置参数参考
| 参数名称 | 优化后的参数含义及应用 | 默认值 | 参考调优值 |
|---|---|---|---|
| max_connections | 数据库允许的最大并发连接数。 | 200 | 2048 |
| allow_concurrent_tuple_update | 是否允许并发更新同一行元组(特定引擎特性)。 | on | TRUE |
| audit_enabled | 是否启用合规性操作日志记录功能。 | on | off |
| checkpoint_segments | 设置触发检查点的WAL日志文件数量。 | 64 | 1024 |
| cstore_buffers | 为列存储引擎(CStore)分配的专用共享缓冲区大小。 | 512MB | 16MB |
| enable_alarm | 是否启用系统异常告警通知功能。 | on | off |
| full_page_writes | 是否在检查点后第一次修改页时,将整个页写入WAL,防止部分写入导致崩溃后数据损坏。 | on | off |
| max_files_per_process | 每个服务进程可打开的最大文件数。 | 1000 | 100000 |
| max_prepared_transactions | 可同时处于“预备”状态的两阶段提交事务的最大数量。 | 200 | 2048 |
| wal_buffers | 用于存放还未写入磁盘的WAL数据的共享内存大小。 | 16MB | 1GB |
| synchronous_commit | 事务提交时是否等待WAL刷新到磁盘。 | on | on |
| maintenance_work_mem | 维护性操作(如VACUUM, CREATE INDEX等)可使用的最大内存。 | 16MB | 2GB |
| vacuum_cost_limit | 达到此成本限制后,VACUUM会休眠。 | 200 | 10000 |
| autovacuum_max_workers | 可同时运行的自动清理(autovacuum)工作进程的最大数量。 | 3 | 10 |
| autovacuum_vacuum_cost_delay | 当一个自动清理工作进程达到成本限制后,休眠的时长。 | 20ms | 10ms |
| enable_material | 优化器是否允许使用物化节点。 | on | off |
| wal_log_hints | 是否在检查点后页的第一次修改时,即使是因为提示位更改,也写完整页到WAL。 | on | off |
| autovacuum_vacuum_scale_factor | 触发自动VACUUM的元组更新/删除比例(相对于表大小)。 | 0.2 | 0.1 |
| autovacuum_analyze_scale_factor | 触发自动ANALYZE的元组更新/插入比例(相对于表大小)。 | 0.1 | 0.02 |
| enable_save_datachanged_timestamp | 是否保存数据变更时间戳。 | on | FALSE |
| instr_unique_sql_count | 内存中可缓存的不同SQL执行特征的数量,用于内部执行统计分析。 | 100 | 5000 |
| advance_xlog_file_num | 提前回收的WAL日志文件数量。 | 0 | 100 |
| track_counts | 是否维护表和索引的访问计数器,为自动清理和优化器提供统计依据。 | on | on |
| track_sql_count | 是否启用SQL执行频次的内部统计计数。 | on | on |
| plog_merge_age | 计划日志合并的年龄。 | 0 | 0 |
| session_timeout | 客户端连接的超时时间(0表示不超时)。 | 10min | 0 |
| enable_instance_metric_persistent | 是否将实例级运行状态数据持久化存储至系统表。 | on | off |
| enable_logical_io_statistics | 是否收集逻辑I/O操作的内部统计信息。 | on | off |
| enable_user_metric_persistent | 是否将用户级会话状态数据持久化存储至系统表。 | on | off |
| enable_xlog_prune | 是否启用WAL日志的自动清理。 | on | off |
| enable_resource_track | 是否开启系统资源消耗的内部记录功能。 | on | on |
| remote_read_mode | 分布式架构下协调节点访问数据节点的认证模式。 | authentication | non_authentication |
| wal_level | WAL日志的级别,决定写入多少信息。 | hot_standby | hot_standby |
| hot_standby | 是否允许在备库上执行只读查询。 | on | on |
| hot_standby_feedback | 备库是否向主库反馈其当前最旧的活动事务ID,防止主库清理备库仍需要的数据。 | off | off |
| enable_asp | 是否启用活跃会话历史快照功能,用于性能回溯分析。 | on | off |
| enable_bbox_dump | 是否启用系统异常时的黑匣子诊断信息转储。 | on | off |
| bgwriter_flush_after | 后台写进程每次刷脏数据后,触发OS缓存的刷盘阈值。 | 512kB | 32 |
| wal_keep_segments | 在主库为备库保留的最小WAL日志文件数量,防止备库落后过多时所需日志被删除。 | 16 | 1025 |
| xloginsert_locks | 插入WAL记录时的锁分区数,影响WAL插入并发度。 | 8 | 48 |
| bgwriter_delay | 后台写进程两次活跃周期之间的休眠时间。 | 2s | 5s |
| incremental_checkpoint_timeout | 增量检查点的超时时间。 | 1min | 5min |
| walwriter_sleep_threshold | WAL写进程的休眠阈值。 | 500 | 50000 |
| pagewriter_sleep | 页面写进程的休眠时间。 | 2s | 100ms |
| wal_file_init_num | 预先初始化的WAL日志文件数量。 | 10 | 30 |
| pagewriter_thread_num | 页面写进程的线程数。 | 4 | 2 |
| max_redo_log_size | 单个Redo日志文件的最大大小。 | 1GB | 400GB |
| max_io_capacity | 数据库后台I/O的最大吞吐量限制。 | 500MB | 1GB |
| enable_cachedplan_mgr | 是否启用计划缓存管理。 | on | off |
| light_comm | 是否启用轻量级提交优化(特定场景)。 | off | on |
| enable_indexscan_optimization | 是否启用索引扫描优化。 | off | on |
| time_record_level | 时间记录级别,用于内部性能诊断。 | 0 | 1 |
| shared_buffers | 设置数据库服务器使用的共享内存缓冲区的数量,主要用于缓存数据,可以将频繁访问的数据从缓慢的磁盘(微秒/毫秒级)移至高速的内存(纳秒级),从而提升数据库性能。该参数根据需求一般不能设置超过物理机整机内存总量的80%,但至少是20%。 | 1GB | "openGuass数据库场景工具使用30%* 服务器内存后向上取整 |
| 以512GB为例,约为157GB" |


