SQLdiag 概述
⚫ SQLdiag是一个SQL语句执行时间预测工具,通过模板化方法,实现在不获取SQL语句执 行计划的前提下,依据语句逻辑相似度与历史执行记录,预测SQL语句的执行时间。
⚫ 现有的预测技术主要基于执行计划的预测方法,但这些预测方案仅适用于OLAP场景且可
以获取执行计划的任务,对于OLTP或者HTAP这样的快速、简单查询是没有太多使用价
值的。与上述方案不同,SQLdiag着眼于数据库的历史SQL语句,通过对历史SQL语句的
执行表现进行总结归纳,将之再用于推断新的未知业务上。由于短时间内数据库SQL语
句执行时长不会有太大的差距,SQLdiag可以从历史数据中检测出与已执行SQL语句相似
的语句结果集,并基于SQL向量化技术和模板化方法预测SQL语句执行时长。
SQLdiag 优点及使用条件
⚫ SQLdiag工具具有以下优点:
不需要SQL语句的执行计划,对数据库性能不会有任何的影响。
使用场景广泛,目前业内的很多算法局限性比较高,比如只适用于OLTP或者OLAP,而 SQLdiag使用场景广泛。
该框架鲁棒性强,容易理解,只需要简单的操作,就可以训练出自己的预测模型。
⚫ 使用SQLdiag工具需要满足以下前提条件:
需要保证用户提供的历史日志及待预测负载的格式符合要求,可以使用数据库GUC参数开启收 集,也可以通过监控工具采集。
为保证预测准确率,用户提供的历史语句日志应尽可能全面并具有代表性。
按照要求配置python环境。
SQLdiag 使用
⚫ SQLdiag文件结构如下:

⚫ SQL流水采集方法,使用GUC参数 log_statement 与 log_statement_stats 即可开启日志收集,参数配置为:
log_statement = all
log_statement_stats=on
⚫ 操作步骤
提供历史日志以供模型训练;
进行训练与预测操作。
SQLdiag 使用示例
⚫ 使用提供的训练数据进行训练:
python main.py -m train -f data/train.csv
⚫ 使用提供的测试数据进行预测:
python main.py -m predict -f data/predict.csv
⚫ 预测结果分析:
status: 预测状态
data:
time: sql执行时间
point: sql空间点坐标
cluster: sql类别id
background: 模板化模型总结
stmts: 对应类别的sql样例
center: 对应类别的sql的中心点坐标
points: 样例sql的空间点坐标
avg_time: 对应类别的平均执行时间




