文档下载建议反馈入口

  • 概述
  • 数据库轻量自治框架
  • 控制机制
  • 核心流程
  • 自治数据库结构
  • 配置数据库自治服务

数据库自治

概述

数据库自治服务(Database Autonomy Service,DAS)是一种基于机器学习和自动化技术的数据库管理解决方案。数据库自治服务具备自感知、自优化、自运维等功能,有助于节省管理成本、降低运维风险、智能调配资源。

数据库轻量自治框架

KaiwuDB 内置一套轻量级的自治框架,其宏观逻辑关系如下所示:

Autonomy Framework
  • 服务器进程: 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 数据库自治服务主要分为数据采集、自治算法、自治结果落盘和自治结果应用,其核心流程如下所示:

  1. 数据库启动时,启动自治管理器。
  2. 自治管理器读取 autonomy.feature.enabled 参数,确认数据库自治服务是否开启。
  3. 开启后,自治管理器创建一个 autonomy 数据库,用于存放所有自治相关的表。
  4. 读取 autonomy.ts.storage.enabled 参数,确认是否开启存储参数自治模块。
  5. 开启后,自治管理器初始化存储参数自治模块,创建与自治相关的表,在 profilescheduler 表中插入初始数据。
  6. 初始化完成后,启动定时器,执行定期数据收集、分析和存储:
    • 数据收集:系统根据 scheduler 表中的定时器规则,默认每天 23 点自动循环采集每个时序表的数据,包括新增数据行数和当前设备总数,开始自治任务。
    • 数据存储:将采集数据存入 ts_table_statistics 表中。
    • 数据分析:启动自治算法,算出每个表的自治结果。
    • 结果存储:将自治结果存入 ts_subgroup_autonomyts_segment_autonomy 表中。
  7. 提供自治结果接口,等待存储层获取自治结果。如果数据库自治服务开启,获取数据分析的结果。否则,系统直接从参数表中读取默认值作为自治结果。

自治数据库结构

数据库自治服务在专用 autonomy 数据库中管理数据,主要包含以下表:

表名描述
profile用于存放自治参数。
scheduler用于存放自治定时器。
ts_table_statistics用于存放定时器在指定时间内采集的统计数据。
ts_subgroup_autonomy用于存放数据子分组自治结果。
ts_segment_autonomy用于存放数据段自治结果。

配置数据库自治服务

前提条件

  • 非三权分立模式下,用户是 admin 角色的成员。默认情况下,root 用户属于 admin 角色。
  • 三权分立模式下,用户是 sysadmin 角色的成员。默认情况下,sysroot 用户属于 sysadmin 角色。

启用数据库自治服务

如需启用数据库自治服务:

  1. 启用数据库自治服务:

    SET CLUSTER SETTING autonomy.feature.enabled = true;
    
  2. 启用存储参数自治模块:

    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]。

修改将在下一次算法运行时生效,无需重启数据库。