一种基于N-gram的SQL运行时间预测方法及系统与流程

文档序号:24715811发布日期:2021-04-16 14:20阅读:208来源:国知局
一种基于n‑gram的sql运行时间预测方法及系统
技术领域
:1.本发明涉及数据库
技术领域
:,尤其是涉及一种基于n‑gram的sql运行时间预测方法及系统。
背景技术
::2.随着大数据与人工智能的飞速发展与广泛应用,各行各业产生的数据量呈现出指数级增长态势,大数据具有数据量大、速度快、类型多、高价值、真实性的特点,数据存储的安全性、稳定性、完整性、便捷性等都面临着更高的要求和挑战。3.在数据库运维过程中,sql执行性能的好坏直接影响整个系统的运行。sql性能存在隐患不仅会造成自身运行时间低,更可能占用大量计算资源,影响整个数据系统的运行效率。数据库性能提升60%甚至更高程度来自对应用程序的优化,而应用程序对数据库的操作最终要表现为sql语句操作,没有审核或者没有完善的审核机制,都是代码上线后的风险点。人工审核会遭遇开发和dba的人力资源瓶颈,在规范落地和监管约束方面难以把控。即便有完整的人工审核机制,能对sql给予有效的告警和优化建议,由于反复评审、优化、再次审核的高迭代工作,不仅消耗大量人力资源也影响了生产项目时效。4.因此,通过ai技术实现sql审核流程的标准化、工具化、自动化、智能化显得尤为重要。sql智能审核系统不仅可以规范sql语法、上线流程,为数据库管理员提供标准化的审核流程,降低dba的人力成本;还可以保证dql、ddl、dml准确高效运行,提高日常数据管理、维护和运行效率。技术实现要素:5.有鉴于此,本发明提出了基于n‑gram的sql运行时间预测方法及系统,该系统在数据库组织、存储、管理数据、sql审核相关基本功能的基础上,嵌入sql运行效率预测功能,为数据库管理员、数据库使用者提供参考和决策支持。6.所述系统中sql运行效率预测通过运用机器学习、自然语言处理等技术,综合考虑执行计划、绑定变量、历史数据运行效率、代码习惯、审核意见、服务器和数据库配置等因素,预测sql运行时间,并提供优化意见与建议。7.为实现上述目的,本发明采用如下技术方案:8.根据本发明的第一方面,提供了一种基于n‑gram的sql运行时间预测方法,所述方法包括以下步骤:9.s1:获取sql语句和与sql语句对应的执行计划、运行时间,形成数据集;10.s2:对数据集进行预处理得到样本集;11.s3:基于n‑gram,利用样本集构建语料库;12.s4:从语料库中提取特征,并对提取的特征进行降维;13.s5:基于降维后的特征,利用贝叶斯预测模型完成sql运行时间预测。14.进一步的,所述s2具体包括:15.s21:对数据集中缺失的字段进行删除或填补,并剔除其中的离群点,得到完整数据集;16.s22:对完整数据集中的sql语句进行分词处理,得到初步样本集;17.s23:基于sql底层运行逻辑,在初步样本集中增加其他影响sql语句运行时间的字段,完成样本集的构建。18.进一步的,所述s22包括:19.在sql语句中符号的前后增加空格,将空格作为分隔符对sql语句进行分词。20.进一步的,所述s3具体包括:21.s31:将样本集中设有别名的表和字段进行还原;22.s32:对还原后的样本集进行去重,得到初步语料库;23.s33:基于n‑gram拓展初步语料库中的语料,完成语料库的构建。24.进一步的,所述s33基于n‑gram拓展初步语料库具体包括:25.对语料库进行词粒度级n‑gram处理:对初步语料库中的sql语句进行窗口为2的词粒度滑动,形成若干字节片段序列,加入语料库;26.对语料库进行字符级n‑gram处理:对初步语料库中的sql语句进行基于“_”的字符滑动,形成若干字符片段序列,加入语料库。27.进一步的,所述s4具体包括:28.s41:分别利用tf‑idf算法和word2vec算法将语料库向量化,获得初步特征;29.s42:将初步特征输出textcnn模型进行训练,获取深层特征;30.s43:将深层特征带入变分自编码器进行降维操作。31.进一步的,所述方法能够通过更新所述数据集,完成预测结果的优化。32.根据本发明的第二方面,提供了一种基于n‑gram的sql运行时间预测系统,包括:33.数据采集模块,用于获取系统中的sql语句和运行信息,形成数据集;34.数据处理模块,用于对数据集进行预处理得到样本集;35.语料库构建模块,用于基于n‑gram,利用样本集构建语料库;36.特征提取模块,用于从语料库中提取特征,并对提取的特征进行降维;37.效率预测模块,基于降维后的特征,利用贝叶斯预测模型完成sql运行时间预测。38.根据本发明的第三方面,提供了一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现上述方法的步骤。39.根据本发明的第四方面,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现上述方法的步骤。40.相对于现有技术,本发明所述的一种基于n‑gram的sql运行时间预测方法及系统具有以下优势:41.在保证数据库和sql语句规范的前提下,量化分析sql性能,综合考虑执行计划、绑定变量、历史数据运行效率、代码习惯、审核意见、服务器和数据库配置等因素,预测sql运行时间,为开发人员和数据库管理员提供参考和决策依据。同时,本发明提出自学习和跟踪机制,按一定的周期更新模型及相关参数,以保证模型的时效性、准确性。42.同时,本发明还具有如下创新:43.(1)本发明构建的sql运行时间预测系统在传统基于专家经验审核与评估的基础上,采用机器学习、tf‑idf、textcnn等技术预测sql运行时间,综合考虑执行计划、绑定变量、历史数据运行效率、代码习惯、审核意见、服务器和数据库配置等因素,将其作为衍生特征纳入模型训练过程,不断提高模型性能。44.(2)本发明将n‑gram应用到sql审核处理中,考虑到sql语言的特殊性、解决了传统sql分词不准确的问题,提高了相似sql之间的相似度的同时降低了不同sql之间的相似度,并且对库名,表名,列名的特殊处理使得同库不同表,同表不同列等情况均得以识别,提高了模型预测的准确度。45.(3)本发明引入自学习和跟踪机制,一方面可以定期更新训练数据,从而优化模型及其相关参数。其次,本发明支持开发人员人工优化sql,将优化前后的sql并进行比对,学习其中的优化方法,以期未来可以自动优化sql。附图说明46.构成本发明的一部分的附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:47.图1为本发明所述的sql运行时间预测方法的流程图。具体实施方式48.这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。49.本公开的说明书和权利要求书中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本公开的实施例,例如能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。50.多个,包括两个或者两个以上。51.和/或,应当理解,对于本公开中使用的术语“和/或”,其仅仅是一种描述关联对象的关联关系,表示可以存在三种关系。例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。52.s1:数据准备。本发明的数据来自于系统中的存量数据,根据不同模块的需求和业务推动产生的生产测试数据和上线数据,也涵盖了版本迭代的历史数据。将所有的sql语句和历史运行时间、执行计划等信息整理,形成完整的数据集。53.s2:数据预处理,探索数据集中数据质量,并进行数据清洗、数据集成、分词、特征衍生等处理,使之方便后续用于模型构建。54.s2.1:缺失值、异常值处理,根据字段的类型和属性不同,删除缺失率高的字段,其它字段的缺失值以众数、均值、或0进行填补。对于数据中的离群点采用剔除的方法。sql运行时间受到软硬件等各种条件的影响,存在一定的波动,为了避免外部因素对模型的干扰,按下分位数为限,剔除运行实际比较长样本数据。55.s2.2:sql语句有其语言的特殊性和天然的优势,可以将空格作为分隔符直接进行分词。同时,对特殊符号添加分隔符,例如将“(”替换为“(”,“=”替换为“=”,可提高分词的准确性和一致性。56.s2.3:特征衍生根据sql底层逻辑解析出影响sql语句运行的关键因素,作为特征加入模型。sql执行计划可以解析查询语句或表结构的性能瓶颈,从id、select_type、table、type、possible_keys、keys、key_len、ref、rows、extra几个角度解析了sql的执行顺序、主键、索引等核心要素。本例将sql语句作为基础数据,将执行计划、统计信息等相关的底层逻辑数据也输出并纳入研究范畴,增加了数据的维度,有利于提高sql审核的全面性及模型预测的准确性。57.s3:构建语言模型58.s3.1构建初级语料库。59.s3.1.1:将有设置别名的表进行还原。首先通过表名定位表的别名,有两种情况,(a)table别名;(b)tableas别名(别名不包括left/join/inner/on/order/)/……)。定位到别名后,通过替换,将sql中的别名全部替换为原表名,这样来排除表别名带来的干扰;60.s3.1.2:将有设置别名的字段进行还原。通过“as”+“别名”+“,”组合来定位列别名(如果没有as则难以定位),之后删除sql中该别名。61.s3.1.3:全部词汇去重后,初步构建语料库。62.s3.2:基于n‑gram更新语料库63.n‑gram是一种基于统计语言模型的算法。它的基本思想是将文本里面的内容按照字节进行大小为n的滑动窗口操作,形成了长度是n的字节片段序列。64.每一个字节片段称为gram,对所有gram的出现频度进行统计,并且按照事先设定好的阈值进行过滤,形成关键gram列表,也就是这个文本的向量特征空间,列表中的每一种gram就是一个特征向量维度。65.s3.2.1:词粒度级n‑gram:基于n‑gram原理,对分词后的sql进行n=2的词粒度滑动。n‑gram是基于语言模型的算法,基本思想是将文本内容按照子节顺序进行大小为n的窗口滑动操作,最终形成窗口为n的字节片段序列。举例:s2.2sql以空格为分隔符进行分词,则group/by原本是2个词,现在变为一个词组groupby。r360__user_info.用户id原本分词处理中“.”被替换为空格,故分词处理后r360_user_info/用户id是2个词,现在变为一个词组r360__user_info用户id。由上可见,sql中常见的,有意义的词组基本都由2个基础词组成,故设置n=2。66.s3.2.2:字符级n‑gram:基于n‑gram的字符级滑动思想,对基础分词进行基于“_”的滑动。即用“_”作为分隔符,对基础词进行分割。sql中包含“_”的基础词,只可能是表名,列名,别名。s2.3中已将别名全部还原,所以现sql中包含“_”的基础词,只可能是表名和列名。该处理可以提高表之间的关联度,例如r360__user_info和r360__bank_detail原本是毫不相关的两个词,现在r360__user_info被分解为r360/user/info,r360__bank_detail被分解为r360/bank/detail。他们有共同词r360,事实上他们确实都是基于r360数据库生成的数据。67.s3.2.3:将n‑gram处理后的数据重新整理并更新语料库。68.s4:特征缩放和特征编码。69.为了提取sql语句的特征,本发明从不同角度考虑采用tf‑idf、word2vec及textcnn进行特征提取,以获得更全面、更深层次的强关联特征。70.s4.1:tf‑idf(termfrequency–inversedocumentfrequency)是一种用于信息检索与数据挖掘的常用加权技术,其中,tf是词频(termfrequency),idf是逆文本频率指数(inversedocumentfrequency)。tf‑idf用来评估字词对于一个文件集或一个语料库中的其中一份文件的重要程度,字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。在此,对sql语句和执行计划分别进行tf‑idf计算使其向量化,获得特征向量。71.tf‑idf=tf*idf72.即:73.即:74.s4.2:word2vec是一种把词语转变成固定维度向量的技术,很适合处理序列局部之间存在很强关联的数据,非常适合处理sql语句这种关键字之间存在这很强的逻辑关系的情况,因此使用word2vec能够获得更全面的特征向量。下面给出word2vec的处理方法:75.1)根据s3.2.3中的语料库,将sql中对一个的关键字转换成one‑hot格式,假设语料库中词汇量大小为v,则one‑hot格式的向量表示为x1,x2,…,xv。其中只有一个节点xk不为0.76.2)输入层和隐藏层之间的权重可以由v*w的矩阵w表示[0077][0078]w中每一行代表的是一个与输入层相关的单词的n维向量表示形式v_w。由于输入数据为one‑hot格式,所以h层输出完全有矩阵w中的第k行计算出来。[0079][0080]3)隐藏层到输出层有一个新的v*n权重矩阵w′=w′ij,可以计算出词汇表中每个单词的分数uj[0081][0082]我们使用一个满足多项式分布的对数线性分类模型soft‑max来获取单词的后验概率[0083][0084]其中,yj是输出层中节点j的输出,将隐藏层输出和单词分数带入上式得到完整公式[0085][0086]4)定义损失函数e=‑p(w0|wi),根据梯度下降法更新权重公式。[0087]s4.3:textcnn相比较于文本处理中其他深度学习模型,具有网络结构简单,训练速度快,且精度高的优点,本发明利用这一优点,分别采用多个卷积核,对向量化的sql进行训练,并通过max‑pooling增大序列的感受野。下面详细描述算法流程。[0088]1)嵌入层。同时使用tf‑idf和word2vec输出的特征向量作为文本的向量表示,根据sql长度的统计结果定义嵌入层的长度n,嵌入层矩阵表示为m。[0089]2)卷积池化层。sql中相邻关键字之间的关联性高,同时,一些过滤条件对sql的执行性能有较大的影响,因此本发明考虑使用多个卷积核{d1,d2,d3}提取不同位置关键字的关系。由于不同尺寸的卷积核得到的特征大小不同,因此对每个featuremap使用池化函数,使他们的维度相同,本发明中使用1‑maxpooling方法。[0090]本部分重点在于提取sql语句中关键词之间的关联信息,因此,在将误差降到最低后,将最后一层池化层的输出作为sql语句的特征输出。[0091]s4.4:本发明采用自编码器对稀疏矩阵进行信息压缩降维,提取有效的关键信息用于模型构建。自编码器是将输入数据投射到隐空间,以达到降维的目的,同时,可以达到去共线性的目的,有利于提高模型的准确性。变分自编码器(variationalauto‑encoder,vae)作为重要的生成模型,在图像识别领域应用广泛,同时vae在文本数据的处理方便也表现出优异的性能。vae是概率自动编码器,采样过程快、易于训练,编码器会产生平均编码μ和标准偏差σ,从μ和σ的高斯分布中随机抽取实际编码,随后解码采样编码,最终输出训练实例。[0092]s5:sql运行效率预测模型构建。[0093]s5.1构建贝叶斯回归树模型,贝叶斯回归树(bayesisanregressiontree)的构造基于分治原则采用自顶向下的递归方法。假设贝叶斯网络节点包含的属性为{x1,x2,……,xn,y},y都是连续型随机变量,并且xi条件独立于y,即:[0094][0095]结合贝叶斯定理:[0096][0097]可得:[0098][0099]其中,α=1/p(x),是正则化常数。贝叶斯回归输出条件概率密度最大的回归值为目标值,如下所示:[0100][0101]s5.2误差测量与模型优化,特征xi用于回归分析的取值有k个,其中,xi的标准差引起的误差度为:[0102][0103]其中,tj表示当xi=xij时的样本子集,|t|表示样本量,sd(tj)表示当xi=xij时的标准差。为了降低噪音点对模型的影响,采用基于概率密度的估计值代替均值,用于标准差的计算,[0104][0105]s6:自学习与跟踪机制。[0106]s6.1:机器学习模型通常是采用线下训练,线上预测的方式应用,即利用离线数据线下训练并保存模型及参数,然后封装成接口,上线部署供其他程序调用;在这种方式下,由于模型参数已经固定,长期不会进行更新,随着数据库表和数据量的增加,原有模型的准确性会逐渐下降;甚至造成审核错误,严重影响系统运行。为解决上述弊端,并加强对上线模型的监控和跟踪,本发明引入自学习和跟踪机制。[0107]s6.2:自学习是为了保证模型预测的准确性,需要定时更新模型参数;由于数据库系统中数据量增长相对较慢,且sql审核对数据的时效性要求不高,综合考虑系统实现的难易程度,本发明采用触发式模型更新方式,以下两种方式来触发模型更新:[0108]s6.2.1:每周统计审核平台通过、拒绝的sql、相应的优化情况,以及上线后sql的执行效率,当上线sql的执行效率低于某个阈值时则触发模型训练,训练时使用当前时点前所有数据训练模型、更新参数。[0109]s6.2.2:由于统计结果反映的是一周内sql的平均情况,当统计结果达到阈值时,往往存在部分sql上线后与预测值有较大的差距的情况,因此从时间维度设计另一个触发条件,设定每2个月使用全部真实数据更新模型。[0110]s6.2:跟踪机制针对通过审核且上线的sql,追踪其执行效率,并与预测值进行对比,如与预测值有较大差距,则将本条sql及其执行计划加入人工审核库,dba审核优化后,重新上线,并记录优化后的sql执行效率,同时将优化前后的sql记录到人工优化库中。[0111]需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。[0112]上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。[0113]通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。[0114]上面结合附图对本发明的实施例进行了描述,但是本发明并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本发明的启示下,在不脱离本发明宗旨和权利要求所保护的范围情况下,还可做出很多形式,这些均属于本发明的保护之内。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1