数据库自治
概述
数据库自治服务(Database Autonomy Service,DAS)是一种基于机器学习和自动化技术的数据库管理解决方案。数据库自治服务具备自感知、自优化、自运维等功能,有助于节省管理成本、降低运维风险、智能调配资源。
数据库轻量自治框架
KaiwuDB 内置一套轻量级的自治框架,其宏观逻辑关系如下所示:

- 服务器进程: KaiwuDB 数据库的主进程,KaiwuDB 数据库启动时会启动服务器主进程。
- 自治管理器(Autonomy Manager): 在服务器中添加一个自治管理器(Autonomy Manager),负责管理多个自治模块。服务器启动后即启动自治管理器。
- 自治模块:自治管理器中包含存储参数自治模块及其他自治模块。该模块集中管理数据采集、数据分析、数据落盘。将来扩展新的自治功能时,在自治管理器中注册新的模块即可。其中,存储参数自治模块通过调整以下关键参数优化时序数据存储:
ts.entities_per_subgroup.max_limit
:下一个子数据分组允许存储的最大实体设备数量。ts.blocks_per_segment.max_limit
:每个数据段中允许存储的最大数据块数量。ts.rows_per_block.max_limit
:每个数据块中允许存储的最大行数。
控制机制
为方便分别开启或关闭每个模块,数据库自治服务增加两级开关进行控制:
- 一级开关:控制整个自治服务,通过
autonomy.feature.enabled
参数管理。 - 二级开关:控制单个自治模块,例如
autonomy.ts.storage.enabled
控制存储参数自治模块。
其中,一级开关的优先级高于二级开关。一级开关打开时,二级开关的开启才有效。否则,表示关闭数据库自治服务。
两个开关默认关闭。
核心流程
KaiwuDB 数据库自治服务主要分为数据采集、自治算法、自治结果落盘和自治结果应用,其核心流程如下所示:
- 数据库启动时,启动自治管理器。
- 自治管理器读取
autonomy.feature.enabled
参数,确认数据库自治服务是否开启。 - 开启后,自治管理器创建一个
autonomy
数据库,用于存放所有自治相关的表。 - 读取
autonomy.ts.storage.enabled
参数,确认是否开启存储参数自治模块。 - 开启后,自治管理器初始化存储参数自治模块,创建与自治相关的表,在
profile
和scheduler
表中插入初始数据。 - 初始化完成后,启动定时器,执行定期数据收集、分析和存储:
- 数据收集:系统根据
scheduler
表中的定时器规则,默认每天 23 点自动循环采集每个时序表的数据,包括新增数据行数和当前设备总数,开始自治任务。 - 数据存储:将采集数据存入
ts_table_statistics
表中。 - 数据分析:启动自治算法,算出每个表的自治结果。
- 结果存储:将自治结果存入
ts_subgroup_autonomy
和ts_segment_autonomy
表中。
- 数据收集:系统根据
- 提供自治结果接口,等待存储层获取自治结果。如果数据库自治服务开启,获取数据分析的结果。否则,系统直接从参数表中读取默认值作为自治结果。
自治数据库结构
数据库自治服务在专用 autonomy
数据库中管理数据,主要包含以下表:
表名 | 描述 |
---|---|
profile | 用于存放自治参数。 |
scheduler | 用于存放自治定时器。 |
ts_table_statistics | 用于存放定时器在指定时间内采集的统计数据。 |
ts_subgroup_autonomy | 用于存放数据子分组自治结果。 |
ts_segment_autonomy | 用于存放数据段自治结果。 |
配置数据库自治服务
前提条件
- 非三权分立模式下,用户是
admin
角色的成员。默认情况下,root
用户属于admin
角色。 - 三权分立模式下,用户是
sysadmin
角色的成员。默认情况下,sysroot
用户属于sysadmin
角色。
启用数据库自治服务
如需启用数据库自治服务:
启用数据库自治服务:
SET CLUSTER SETTING autonomy.feature.enabled = true;
启用存储参数自治模块:
SET CLUSTER SETTING autonomy.ts.storage.enabled = true;
禁用数据库自治服务
如需禁用存储参数自治模块或数据库自治服务:
禁用存储参数自治模块:
SET CLUSTER SETTING autonomy.ts.storage.enabled = false;
禁用数据库自治服务:
SET CLUSTER SETTING autonomy.feature.enabled = false;
修改数据收集执行时间
如需调整自治服务数据收集的执行时间:
UPDATE autonomy.scheduler
SET cron_expr = '<cron_expr>'
WHERE name = 'storage-auto-collect-scheduler';
cron_expr
表达式和系统的 crontab
表达式一致,* * * * *
分别表示分、时、日、月、周。
修改后不会立即生效,定时器会在下一次 23 点启动时才会读到该值,并修改内存中定时器的允许规则。 如果表达式格式错误,定时器解析新定时器规则失败,则继续使用原定时器规则。
示例:修改数据收集时间为每天 23:30:
UPDATE autonomy.scheduler
SET cron_expr = '30 23 * * *'
WHERE name = 'storage-auto-collect-scheduler';
查看自治优化结果
如需查询已应用的优化配置:
查询数据子分组自治结果:
SELECT * FROM autonomy.ts_subgroup_autonomy ORDER BY created DESC;
查询数据段自治结果:
SELECT * FROM autonomy.ts_segment_autonomy ORDER BY created DESC;
其中
is_head=1
的记录表示最后一次的运行结果。
修改自治算法
如需修改新建时序表子分组中实体设备数量的增长幅度:
UPDATE autonomy.profile
SET value = '<rate>'
WHERE variable = 'ts.entities_per_subgroup.growth';
默认值为 1,表示如果前一个子分组存放 500 台实体设备,新建子分组可以存放 500+500*1 台实体设备。取值范围为 [0, 10]。
修改将在下一次算法运行时生效,无需重启数据库。