openGauss源码解析(166)
openGauss源码解析:AI技术(13)
8.3.2 现有技术
首先,明确一下慢SQL发现的几个不同阶段,及其对应解决的问题。
阶段1:对用户输入的一批业务SQL语句进行分析,推断SQL语句执行时间的快慢,进而可以将评估为慢SQL的语句识别出来。
阶段2:对识别出的潜在慢SQL进行根因诊断,判断这些SQL语句是因为什么慢,例如比较常见的原因可能是数据量过大、SQL语句自身过于复杂、容易产生并发的锁冲突、没有创建索引导致全表扫描等等。
阶段3:对于已经识别出来的慢SQL语句的可能问题源,给出针对性的解决方案,譬如可以提示用户进行SQL语句的改写、创建索引等。
目前openGauss已具备阶段1的能力,正在推进阶段2能力,同时发布了部分阶段3的能力,如索引推荐功能。
业内对于上述第一阶段的主要实现方法大部分是通过执行计划进行估计的,第二阶段大多是通过构建故障模式库、通过启发式规则来实现的,有了上述前两个阶段的准备,第三阶段的实现往往是比较独立的。学术界对于第一阶段的研究比较多,第二阶段采用常规的构建故障模式库的方法实现已经能取得比较好的效果了,因此并不是研究的热点,而第三阶段的工作又相对独立,可以单独作为一个领域进行研究。因此,这里仅介绍业内是如何评估SQL语句执行时间的,其他两部分暂不详细展开。
1. 基于执行计划的在线SVM模型
图8-5 基于执行计划SVM模型的系统架构图
如图8-5所示,基于执行计划的在线SVM(support vector machine,支持向量机)模型包含训练模块和测试模块。
训练阶段:Data Collection模块执行作为训练集的语句,Data Extraction模块收集执行的语句特征及执行时间,包括执行计划及算子级别的信息。Model Building模块基于计划级别特征与算子级别信息分别训练SVM模型,再将两模型通过误差分布结合,生成最终的预测模型。这主要是考虑到计划级别信息具有普适性,而算子级别信息具有更高的精确性,结合两者可以在保持具有普适性的前提下,尽可能地精确预测。
测试阶段:Query Planning模块生成待预测语句的执行计划,Feature Extraction抽取这些计划中的特征,整合后投入训练阶段生成的模型中产生预测结果。
整个功能的流程如图8-6所示。
图8-6 基于执行计划SVM模型的流程图
基于执行计划SVM技术的缺点。