openGauss源码解析(174)

openGauss源码解析:AI技术(21)

3. 基于工作负载的索引推荐

对于工作负载级别的索引推荐,用户可通过运行数据库外的脚本使用此功能,本功能将包含有多条DML语句的工作负载作为输入,最终生成一批可对针对整体工作负载的索引。

(1) 准备好包含有多条DML语句的文件作为输入的工作负载,文件中每条语句占据一行。用户可从数据库的离线日志中获得历史的业务语句。
(2) 运行python脚本index_advisor_workload.py,命令如下:

python index_advisor_workload.py [p PORT] [d DATABASE] [f FILE] [--h HOST] [-U USERNAME] [-W PASSWORD]

[--max_index_num MAX_INDEX_NUM] [--multi_iter_mode]

其中的输入参数如下。

① PORT:连接数据库的端口号。

② DATABASE:连接数据库的名字。

③ FILE:包含workload语句的文件路径。

④ HOST:(可选)连接数据库的主机号。

⑤ USERNAME:(可选)连接数据库的用户名。

⑥ PASSWORD:(可选)连接数据库用户的密码。

⑦ MAX_INDEX_NUM:(可选)最大的索引推荐数目。

⑧ multi_iter_mode:(可选)算法模式,可通过是否设置该参数来切换算法。例如:

python index_advisor_workload.py 6001 opengauss tpcc_log.txt --max_index_num 10 --multi_iter_mode

推荐结果为一批索引,以多个创建索引语句的格式显示在屏幕上,结果示例如下:

create index ind0 on bmsql_stock(s_i_id,s_w_id);

create index ind1 on bmsql_customer(c_w_id,c_id,c_d_id);

create index ind2 on bmsql_order_line(ol_w_id,ol_o_id,ol_d_id);

create index ind3 on bmsql_item(i_id);

create index ind4 on bmsql_oorder(o_w_id,o_id,o_d_id);

create index ind5 on bmsql_new_order(no_w_id,no_d_id,no_o_id);

create index ind6 on bmsql_customer(c_w_id,c_d_id,c_last,c_first);

create index ind7 on bmsql_new_order(no_w_id);

create index ind8 on bmsql_oorder(o_w_id,o_c_id,o_d_id);

create index ind9 on bmsql_district(d_w_id);

8.5 指标采集、预测与异常检测

数据库指标监控与异常检测技术,通过监控数据库指标,并基于时序预测和异常检测等算法,发现异常信息,进而提醒用户采取措施避免异常情况造成严重后果。

8.5.1 使用场景

用户操作数据库的某些行为或某些正在运行的业务发生了变化,都可能会导致数据库产生异常,如果不及时发现并处理这些异常,可能会导致严重的后果。通常,数据库监控指标(metric,如CPU使用率、QPS等)能够反映出数据库系统的健康状况。通过对数据库指标进行监控,分析指标数据特征或变化趋势等信息,可及时发现数据库异常状况,并及时将告警信息推送给运维管理人员,从而避免造成损失。

8.5.2 实现原理

D:\2021年\源码解析书籍\图片\第8章\图8-14  Anomaly-Detection框架-去色.png

图8-14 Anomaly-Detection框架

指标采集、预测与异常检测是通过同一套系统实现的,在openGauss项目中名为Anomaly-Detection,它的结构如图8-14所示。该工具主要可以分为Agent和Detector两部分,其中Agent是数据库代理模块,负责收集数据库指标数据并将数据推送到Detector;Detector是数据库异常检测与分析模块,该模块主要有三个作用。

(1) 收集Agent端采集的数据并进行转储。
(2) 对收集到的数据进行特征分析与异常检测。
(3) 将检测出来的异常信息推送给运维管理人员。

1. Agent模块的组成

Agent模块负责采集并发送指标数据,该模块由DBSource、MemoryChannel、HttpSink三个子模块组成。

(1) DBSource作为数据源,负责定期去收集数据库指标数据并将数据发送到数据通道MemoryChannel中。
(2) MemoryChannel是内存数据通道,本质是一个FIFO队列,用于数据缓存。HttpSink组件消费MemoryChannel中的数据,为了防止MemoryChannel中的数据过多导致OOM(out of Memory,内存溢出),设置了容量上限,当超过容量上限时,过多的元素会被禁止放入队列中。
(3) HttpSink是数据汇聚点,该模块定期从MemoryChannel中获取数据,并以Http(s)的方式将数据进行转发,数据读取之后从MemoryChannel中清除。

2. Detector 模块组成

Detector模块负责数据检测,该模块由Server、Monitor两个子模块组成。

(1) Server是一个Web服务,为Agent采集到的数据提供接收接口,并将数据存储到本地数据库内部,为了避免数据增多导致数据库占用太多的资源,我们将数据库中的每个表都设置了行数上限。
(2) Monitor模块包含时序预测和异常检测等算法,该模块定期从本地数据库中获取数据库指标数据,并基于现有算法对数据进行预测与分析,如果算法检测出数据库指标在历史或未来某时间段或时刻出现异常,则会及时的将信息推送给用户。
posted @ 2024-05-06 10:24  openGauss-bot  阅读(2)  评论(0编辑  收藏  举报