前沿科技探究之AI功能:慢SQL发现
SQLdiag:慢SQL发现
SQLdiag是openGauss中SQL语句执行时长预测工具。现有的预测技术主要基于执行计划的预测方法,但这些预测方案仅适用于OLAP场景且可以获取执行计划的任务,对于OLTP或者HTAP这样的快速、简单查询是没有太多使用价值的。与上述方案不同,SQLdiag着眼于数据库的历史SQL语句,通过对历史SQL语句的执行表现进行总结归纳,将之再用于推断新的未知业务上。由于短时间内数据库SQL语句执行时长不会有太大的差距,SQLdiag可以从历史数据中检测出与已执行SQL语句相似的语句结果集,并基于SQL向量化技术和模板化方法预测SQL语句执行时长。本工具有如下优点:
不需要SQL语句的执行计划,对数据库性能不会有任何的影响。
使用场景广泛,目前业内的很多算法局限性比较高,比如只适用于OLTP或者OLAP,而SQLdiag使用场景广泛。
该框架容易理解,只需要简单的操作,就可以训练出自己的预测模型。
本工具的典型应用场景是对一批即将上线的SQL语句进行透视,提前识别风险。
概述
SQLdiag是一个SQL语句执行时间预测工具,通过模板化方法或者深度学习方法,实现在不获取SQL语句执行计划的前提下,依据语句逻辑相似度与历史执行记录,预测SQL语句的执行时间并以此发现异常SQL。
使用指导
前提条件
- 需要保证用户提供训练数据。
- 如果用户通过提供的工具收集训练数据,则需要启用WDR功能,涉及到的参数为track_stmt_stat_level和log_min_duration_statement,具体情况见下面小结。
- 为保证预测准确率,用户提供的历史语句日志应尽可能全面并具有代表性。
- 按照要求配置python 3.6+环境及其依赖。
环境配置
本功能运行环境要求Python 3.6版本及以上,需要的第三方依赖包记录在requirements.txt文件中,可以通过pip install命令安装依赖,如:
pip install requirements.txt
SQL流水采集方法
本工具需要用户提前准备数据,训练数据格式如下,每个样本通过换行符分隔:
SQL,EXECUTION_TIME
预测数据格式如下:
SQL
其中SQL表示SQL语句的文本,EXECUTION_TIME表示SQL语句的执行时间,样例数据见sample_data中的train.csv和predict.csv。
用户可以按照要求格式自己收集训练数据,工具也提供了脚本自动采集(load_sql_from_rd),该脚本基于WDR报告获取SQL信息,涉及到的参数有log_min_duration_statement和track_stmt_stat_level:
- 其中log_min_duration_statement表示慢SQL阈值,如果为0则全量收集,时间单位为毫秒;
- track_stmt_stat_level表示信息捕获的级别,建议设置为track_stmt_stat_level=‘L0,L0’
参数开启后,可能占用一定的系统资源,但一般不大。持续的高并发场景可能产生5%以内的损耗,数据库并发较低的场景,性能损耗可忽略。
使用脚本获取训练集方式: load_sql_from_wdr.py [-h] --port PORT --start_time START_TIME --finish_time FINISH_TIME [--save_path SAVE_PATH] 例如: python load_sql_from_wdr.py --start_time "2021-04-25 00:00:00" --finish_time "2021-04-26 14:00:00" --port 5432 --save_path ./data.csv
操作步骤
- 提供历史日志以供模型训练
- 进行训练与预测操作:
基于模板法的训练与预测: python main.py [train, predict] -f FILE --model template --model-path template_model_path 基于DNN的训练与预测: python main.py [train, predict] -f FILE --model dnn --model-path dnn_model_path
使用方法示例
在本工具的根目录中,执行下列语句可以实现对应功能。
使用提供的测试数据进行模板化训练:
python main.py train -f ./sample_data/train.csv --model template --model-path ./template
使用提供的测试数据进行模板化预测:
python main.py predict -f ./sample_data/predict.csv --model template --model-path ./template --predicted-file ./result/t_result
使用提供的测试数据进行模板化模型更新:
python main.py finetune -f ./sample_data/train.csv --model template --model-path ./template
使用提供的测试数据进行DNN训练:
python main.py train -f ./sample_data/train.csv --model dnn --model-path ./dnn_model
使用提供的测试数据进行DNN预测:
python main.py predict -f ./sample_data/predict.csv --model dnn --model-path ./dnn_model --predicted-file
使用提供的测试数据进行DNN模型更新:
python main.py finetune -f ./sample_data/train.csv --model dnn --model-path ./dnn_model
获取帮助
使用SQLdiag工具前,您可以通过以下指令获取帮助。
python main.py --help
显示如下帮助信息:
usage: main.py [-h] [-f CSV_FILE] [--predicted-file PREDICTED_FILE] [--model {template,dnn}] --model-path MODEL_PATH [--config-file CONFIG_FILE] {train,predict,finetune} SQLdiag integrated by openGauss. positional arguments: {train,predict,finetune} The training mode is to perform feature extraction and model training based on historical SQL statements. The prediction mode is to predict the execution time of a new SQL statement through the trained model. optional arguments: -h, --help show this help message and exit -f CSV_FILE, --csv-file CSV_FILE The data set for training or prediction. The file format is CSV. If it is two columns, the format is (SQL statement, duration time). If it is three columns, the format is (timestamp of SQL statement execution time, SQL statement, duration time). --predicted-file PREDICTED_FILE The file path to save the predicted result. --model {template,dnn} Choose the model model to use. --model-path MODEL_PATH The storage path of the model file, used to read or save the model file. --config-file CONFIG_FILE
命令参考
表 1 命令行参数说明
参数 | 参数说明 | 取值范围 |
---|---|---|
-f | 训练或预测文件位置 | |
–predicted-file | 预测结果存储位置 | |
–model | 模型选择 | template,dnn |
–model-path | 训练模型存储位置 |
常见问题处理
数据库实例连接失败:请检查数据库实例的情况,是否数据库实例出现了问题或安全权限配置(pg_hba.conf文件中的配置项)不正确。
重启失败:请检查数据库实例健康情况,确保数据库实例工作正常。
依赖安装失败:建议先升级pip包管理工具,通过命令python -m pip install –upgrade pip实现。
跑TPC-C作业时发现性能越来越慢:TPC-C等高并发场景下的压力测试,往往伴随着大量的数据修改。由于每一次测试并非是幂等的(TPC-C数据库数据量的增加、没有进行vacuum full清理掉失效元组、数据库没有触发checkpoint、没有进行drop cache等),因此一般建议TPC-C等伴随着较多数据写入的benchmark应该每隔一段时间(视具体并发量、执行时长的不同而异)重新导入一次数据,比较简单的方法是备份$PGDATA目录。
TPC-C 跑作业时,TPC-C驱动脚本报异常 “TypeError: float() argument must be a string or a number, not ‘NoneType’”(不能将None转换为float类型):这是因为没有获取到TPC-C的压测返回结果,造成该问题的原因比较多,请首先手动检测是否能够跑通TPC-C并能够获取返回结果。若无上述问题,则建议将 TPC-C 驱动脚本中的命令列表中的 “sleep” 命令延迟时间设得更大一些。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Learning by contributing!访 StarRocks Committer 周康、冯浩桉
身处技术创新驱动的时代,只有开放协作才能带来巨大进步,创造非凡成就。 We are learning by contributing. We crowdsource from community. StarRocks 社区的发起和发展,正是立足于各个开发者的“贡献”和“集智”。 周康,冯浩桉。一个是在云厂商从业多年的超级奶爸,一个是步入职场不久的“萌新”技术宅。两人都在 StarRocks 社区成立第一天加入,过去五个多月里为 StarRocks 项目作出了重要贡献。 近期,经过 StarRocks 社区 PMC 提名与投票,两位开发者接受 StarRocks 社区邀请,正式成为 StarRocks 项目的 Committer。 他们在技术上有哪些癖好,如何看待当下的 OLAP 产品,又如何走上了社区之路?StarRocks 社区和两位有故事的男同学聊了聊。 周康:公有云时代,要善用业务优势提出创新架构 就职于阿里云开源大数据平台,负责 EMR OLAP 产品研发,包括 StarRocks、ClickHouse、Presto(Trino)等开源组件。曾参与基于开源组件构建的分布式调度平...
- 下一篇
Spring 官方修复零日漏洞,推出 Spring Boot 2.6.6、2.5.12 等新版本
一、漏洞说明 这个漏洞还要从 3 月 29 日晚间说起。 彼时有不少网友爆料,Spring 框架出现“史诗级” RCE 漏洞,平地一声雷,一时之间,快要入睡的开发者们纷纷坐起查看关于漏洞的情况,闹得技术圈中人心惶惶。 不过有些不同寻常的是,这个漏洞并没有像 Log4j2 事件那样引起圈内诸多企业大厂的紧急行动,甚至连国外披露漏洞的根源也是来自 QQ 和国内部分网络安全网站。 这也让不少网友猜测,该漏洞应该是国内某个安全机构、安全人员最先发现的。 果不其然,据 3 月 31 日国家信息安全漏洞共享平台(CNVD)发布的《关于Spring框架存在远程命令执行漏洞的安全公告》显示,这群神秘的白帽子们包括蚂蚁科技集团、奇安信科技、杭州安恒信息技术、安天科技、360、北京天融信,当然这些都是后话了。 1.1 Spring 零日漏洞真的存在 就在开发者越来越焦灼时,Spring.io 官方于 3 月 31 日晚间出面证实了这一漏洞的存在,并带来了解决方案。 根据公告,我们发现这个漏洞的影响远比我们想象的更为严重,如果满足以下几种门槛,极有可能受漏洞影响: JDK 9 或更高版本 Apache To...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Windows10,CentOS7,CentOS8安装Nodejs环境
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Hadoop3单机部署,实现最简伪集群
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS关闭SELinux安全模块