1.本技术实施例涉及数据库
技术领域:
:,尤其涉及一种执行时间的预测方法及装置。
背景技术:
::2.结构化查询语言(structuredquerylanguage,sql)是一门为数据库查询而设计的语言,主要用于数据的存储、管理、查询和修改等。随着数据量的增长和查询场景的复杂,sql的执行时间也越来越长。对于用户来说,如果能知道sql的执行时间可以帮助其更好地优化sql和安排时间。如何预测sql的执行时间是本技术实施例待解决的技术问题。技术实现要素:3.本技术实施例提供一种执行时间的预测方法及装置,以预测sql的执行时间。4.第一方面,提供一种执行时间的预测方法,可应用于服务器,包括:接收用户输入的sql语句;获取执行所述sql语句的辅助信息,所述辅助信息中包括以下至少一项:计算引擎的运行配置、计算引擎客户端的硬件信息、操作系统信息和所述sql语句对应数据源的统计信息;根据所述sql语句和辅助信息,预测所述sql语句的执行时间。5.通过上述方法,在预测sql执行时间时,不但考虑sql本身,还考虑sql的计算引擎等辅助信息,且sql的运行时间与上述sql的计算引擎等辅助信息又存在关联关系。因此,采用本技术实施例的方法,可使得对sql的执行时间预测较准确。6.在一种可能的设计中,所述根据所述sql语句和辅助信息,预测所述sql语句的执行时间,包括:对所述sql语句进行分析,获得所述sql语句的执行计划,所述执行计划为所述sql语句的执行过程描述;对所述sql语句、执行计划和辅助信息,进行特征提取,得到第一特征集合;将所述第一特征集合,输入到预测模型中,获得所述sql语句的执行时间。7.通过上述方法,预先生成预测模型,针对具体需要预测的sql句,提供相关特征,输入到上述预测模型中,将预测与ai技术相结合,进一步保证sql预测的准确性。8.在一示例中,所述sql语句和执行计划属于文本类特征,对所述文本类特征进行特征提取,包括:所述文本类特征中包括至少一个句子,针对每个句子,执行以下操作:对句子进行分词,得到多个分词;对每个分词进行数据编码;对每个分词的数据编码结果进行映射,得到每个分词对应的词向量,一个句子中所有分词的词向量组成词向量矩阵;将所述词向量矩阵输入到循环神经网络rnn模型中,得到所述句子的向量化表示,所述句子的向量化表示作为所述第一特征集合中的特征。9.通过上述方法,实现对sql语句和其对应的执行计划等文本信息的特征提取,从而保证提取的特征准确有效。10.在另一示例中,所述计算引擎的运行配置、所述操作系统信息、所述硬件信息和所述统计信息属于数值型特征,将所述数值型特征直接作为所述第一特征集合中的特征。11.通过上述方法,对数值型特征直接运行,不再做进一步提取,简化整个方案的难度。12.在又一示例中,所述计算引擎中的运行配置,所述操作系统信息和所述硬件信息属于字符类特征,对所述字符类特征进行特征提取的过程,包括:使用独热编码对所述字符类特征进行编码,编码结果作为所述第一特征集合中的特征。13.通过上述方法,独热编码作为本领域的常用编码方式,直接对字符类特征进行独热编码,且编码结果直接作为特征使用,可实现对字符类特征的提取。14.在一种可能的设计中,生成所述预测模型的过程,包括:对以下至少一项,进行特征提取,得到第二特征集合:sql语句,sql语句的执行计划,所述计算引擎的运行配置,所述数据源的统计信息,所述计算引擎对应客户端的操作系统信息和硬件信息;对所述第二特征集合进行训练,得到预测模型。15.通过上述方法,在生成预测模型的过程中,不但考虑训练的sql语句本身,还考虑了与sql语句执行时间相关的其它辅助信息,从而使得生成的预测模型更准确。16.可选的,对所述第二特征集合进行训练,得到预测模型,包括:在所述第二特征集合中选择部分特征,以期在减少模型复杂度的同时获得较好的预测精度;基于选择的部分特征训练生成预测模型。17.通过上述方法,由于模型的预测准确性与特征选取的好坏直接相关。而在上述方法中,在第二特征集合中选择部分好的特征,可保证预测模型的预测准确度。18.第二方面,提供一种装置,该装置包括:一个或多个处理器,和一个或多个存储器;其中,所述一个或多个存储器中存储有一个或多个计算机程序,所述一个或多个计算机程序包括指令,当所述指令被所述一个或多个处理器执行时,使得所述装置执行上述第一方面的技术方案。19.第三方面,提供一种装置,该装置包括执行第一方面的方法的模块或单元,这些模块或单元可以通过硬件实现,也可以通过软件实现。20.第四方面,提供一种芯片,所述芯片与装置中的存储器耦合,执行本技术实施例中第一方面的技术方案,本技术实施例中的耦合是指两个部件彼此直接或间接地结合。21.第五方面,提供一种计算机程序产品,计算机程序产品中包括:计算机程序,也可以称为代码或指令等,当计算机被运行时,使得计算机执行上述第一方面中的方法。22.第六方面,提供一种计算机可读存储介质,计算机可读存储介质中存储有计算机程序,也可以称为代码或指令等,当其在计算机上运行时,使得计算机执行上述第一方面中的方法。附图说明23.图1和图2为当前方案中与sql预测相关技术的示意图;24.图3为本技术实施例提供的网络架构;25.图4为本技术实施例提供的执行时间的预测方法的流程图;26.图5和图6为本技术实施例提供的rnn过程的示意图;27.图7为当前方案中sql执行时间的示意图;28.图8为本技术实施例提供的预测sql执行时间的示意图;29.图9为本技术实施例提供的装置的结构示意图。具体实施方式30.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述。其中,在本技术的描述中,采用了“第一”、“第二”等字样对功能和作用基本相同的相同项或相似项进行区分。本领域技术人员可以理解“第一”、“第二”等字样并不对数量和执行次序进行限定,并且“第一”、“第二”等字样也并不限定一定不同。31.结构化查询语言(structuredquerylanguage,sql))是一门专为数据库查询而设计的语言,主要用于数据的存储、管理、查询和修改等。随着数据量的增长和查询场景的复杂,sql的执行时间也越来越长。对于用户来说,如果可以预先知道sql的执行时间可以帮助其更好的安排时间。举例来说,以查询学生表中男生的人数为例,按照目前的方案用户需要写一条sql:selectcount(*)fromstudentwheresex=’man’。然后,通过计算引擎运行上述sql,并得到最终的结果。上述sql可能只需要运行几秒钟,也可能需要运行几个小时。如果之前没有运行过这条sql,就不能知道它大概的运行时间,也就不能很好的安排自己的时间。此外,不同sql的写法,计算引擎的不同配置,操作系统软硬件参数等都会对sql的执行时间产生影响。可能换个写法selectcount(*)fromstudentwheresex!=’man’,执行时间就会有很大差异。那么为了找到最优的运行方式,只能一遍遍的执行sql,寻找最优的配置和写法,对于执行时间长的sql这是灾难性的。因此,如何预测sql的执行时间是本技术实施例待解决的技术问题。在目前的方案中,与预测sql的执行时间有关的方案,主要包括以下几种:32.第一种:如图1所示,记录sql语句的执行成本;根据sql语句的执行成本等历史数据,使用机器学习算法动态的预测sql语句的执行成本。如果成本高于一定阈值,则认为sql语句在特定时刻性能较低。33.第二种:如图2所示,重复执行sql语句;获取sql语句的执行成本和性能指标;基于sql语句的执行成本历史,建立基于回归的成本模型,从而达到预测sql语句性能的目标。34.应当指出,在上述两种方案中,虽然预测的sql的执行成本,但上述sql的执行成本中包括sql的执行时间。所以上述两种方案也可以用于预测sql的执行时间。但在上述两种方案中,仅仅关注sql语句本身对执行时间的影响,并没有发掘和利用计算引擎配置等因素,对sql语句的影响,会导致sql语句的预测时间不准确。基于上述,本技术提供一种执行时间的预测方法,在该方法中,不仅考虑sql语句本身,还考虑计算引擎配置等辅助信息,对sql语句执行时间的影响,从而使得对sql语句执行时间的预测更准确。35.如图3所示,提供一种可能的网络架构,在该架构中,包括:客户端和服务器。可选的,服务器的数量可以为一个或多个,不作限定。如果服务器的数量为多个,可能存在服务器集群的概念,在服务器集群中可能存在一个主服务器,一个或多个辅服务器等。36.其中,上述集群或服务器中安装有计算引擎。可选的,该计算引擎可以为apacheflink等。其中,apacheflink是由apache软件基金会开发的开源流处理框架,其核心是用java和scala编写的分布式数据流引擎。在一种应用场景中,用户可以在上述客户端输入sql语句,利用上述集群或服务器中安装的计算引擎查询存储在服务器或集群中的数据等。37.应当指出,下述本技术实施例提供的预测sql执行时间方案的执行主体可以为服务器,该服务器可以与上述执行sql查询的服务器是同一服务器,也可以是不同的服务器,不作限定。当然,在本技术实施例中,执行本技术实施例提供的预测sql执行时间方案的服务器可以为一个,也可以为多个。若有多个服务器的场景下,可以有主服务器接收来自客户端的sql语句,将上述预测sql执行时间的任务,分配到多个辅服务器去执行等。38.在本技术实施例提供以下几种可能的实现方式,一种实现方式为,用户在客户端输入sql语句,客户端自动将该sql语句发送给预测sql语句执行时间的服务器;服务器根据该sql语句和辅助信息,预测sql的执行时间,且将预测的sql执行时间发送给客户端,客户端显示上述预测的sql的执行时间。当然,上述辅助信息可随着上述sql语句一并发送给服务器,服务器也可以预先获取等。这样用户在执行该sql语句前,即可以获取sql的执行时间,从而帮助用户更好的进行时间安排和优化sql。或者,可以在上述客户端的显示界面中设置一个预测sql语句执行时间的虚拟按键。这样用户在需要预测sql的执行时间时,可以点击该按键,从而获取sql的执行时间,而如果用户之前已经运行过该sql,可以获知该sql的执行时间,可以直接运行该sql语句,无需再进行sql执行时间的预测。39.如图4所示,提供一种执行时间的预测方法的流程,至少包括:40.步骤401:服务器接收用户输入的sql语句。41.其中,用户可以在客户端中输入sql语句,然后客户端将sql语句发送给服务器,然后由服务器执行预测sql执行时间的方案。当然,可参见上述,可以由一个服务器执行本技术实施例中的预测sql执行时间的方案,也可以由多个服务器执行,不作限定。当由多个服务器执行时,可具体由主服务器从客户端接收sql语句,具体将预测sql执行时间的任务,分配给多个辅服务器等,不作限定。42.步骤402:服务器获取执行所述sql语句的辅助信息,所述辅助信息中包括以下至少一项:所述计算引擎的运行配置,所述计算引擎对应客户端的硬件信息、操作系统信息和所述sql语句对应数据源的统计信息等。可选的,上述sql语句的辅助信息可以是客户端发送给服务器的,或者,服务器自己获取的等,不作限定。43.可选的,本技术实施例中的计算引擎可以为apacheflink等。为了便于理解,以下可以用flink代替计算引擎为例,进行描述。应当指出,按照上述描述,上述计算引擎的运行配置、计算引擎对应客户端的硬件信息和操作系统信息,还可以分别称为flink变量,硬件变量,和操作系统变量。同样,为了便于理解,以下沿用上述描述。44.步骤403:服务器根据所述sql语句和辅助信息,预测所述sql语句的执行时间。45.在一种可能设计中,上述步骤403的实现过程可为:[0046]-对sql语句进行分析,获得sql语句的执行计划,所述sql语句的执行计划为sql语句的执行过程的描述。或者,所述执行计划可以理解为:从计算引擎的角度,理解sql如何执行,比如读入数据,转换数据,写入数据的方式等。可选的,可根据flinksql客户端提供的解释(explain)功能,得到sql语句的执行计划。例如,sql语句“select*fromtempwherea=’1’”,其含义为从temp表中查询a字段值为1的全部数据,使用flinksql客户端提供的解释功能,得到其对应的执行计划为:[0047]“stage1:datasource[0048]content:source:hivetablesource(a)tablepath:default.temp,[0049]partitionpruned:false,partitionnums:null[0050]stage2:operator[0051]content:calc(select=[cast(_utf-16le'2':varchar(2147483647)[0052]characterset"utf-16le")asa],where=[(a=[0053]_utf-16le'1':varchar(2147483647)characterset"utf-16le")])[0054]ship_strategy:forward”。[0055]-对sql语句、执行计划和辅助信息进行特征提取,得到第一特征集合。[0056]1、上述sql语句和执行计划属于文本类特征,对文本类特征进行特征提取的过程,可包括:文本类特征中包括至少一个句子,针对每个句子,执行以下操作:[0057]-对句子进行分词,得到多个分词;以上述sql语句为例,对上述sql语句分词后,得到“select,from,where,*,temp,a=’1”等分词。[0058]-对每个分词进行数据编码。可选的,可将分好的词进行词典化,得到每个词在对应词典中的位置,每个词在词典中的位置,即为该分词对应的数据编码。比如,上述分词“select,from,where,*,temp,a=’1”等,其在词典中的位置分别为“31,45,27,12,7,1”等,其对应的数据编码可分别为“31,45,27,12,7,1”等。[0059]-对编码结果进行映射,得到每个分词对应的词向量。可选的,可使用词向量(wordtovector,word2vec)模型将每个分词的编码结果映射为一个向量,一个句子的所有词向量组成词向量矩阵。[0060]-将所述词向量矩阵输入到循环神经网络(recurrentneuralnetwork,rnn)模型中,得到所述句子的向量化表示,所述句子的向量化表示作为所述第一特征集合中的特征。如图5所示,输入rnn模型中的词向量矩阵为{xt-1,xt,xt+1},rnn模型的展开过程为:输入xt-1到rnn模型中,得到yt-1;输入xt到rnn模型中,该rnn模型对xt和yt-1综合处理,得到yt;同理,输入xt+1至rnn模型中,该rnn模型对xt+1和yt综合处理,得到yt+1;最终该词向量矩阵{xt-1,xt,xt+1}对应的向量化表示为yt+1。仍沿用上述举例,如图6所示,select的向量化表示为from的向量化表示为where的向量化表示为将上述词向量输入到rnn模型中,最终输出的向量化表示为[0061]2、flink变量中的部分变量、硬件变量中的部分变量、操作系统变量中的部分变量和统计信息属于数值型特征,如中央处理器(centralprocessingunit,cpu)个数和flink任务并发等,数值型特征可以直接作为第一特征集合中的特征使用。[0062]3、flink变量中的部分变量,硬件变量中的部分变量和操作系统变量中的部分变量属于字符类特征,对字符类特征进行特征提取的过程,包括:使用独热(one-hot)编码对所述字符类特征进行编码,编码结果作为所述第一特征集合中的特征。例如,针对一flink变量,任务管理器网络封锁随机类型(taskmanager.network.blocking-shuffle.type)参数,该参数属于数值型特征。该参数有三个取值,分别为auto,file,和mmap。其中,经过one-hot编码后auto取值为0,file取值1,mmap取值为2。[0063]-将所述第一特征集合,输入到预测模型中,获得sql语句的执行时间。[0064]在本技术实施例中,可以采用以下方式,生成上述预测sql执行时间的预测模型,主要包括以下环节:[0065]1、特征设计[0066]首先获取用于训练生成预测模型的sql语句和sql语句的执行计划。之后,获取客户端中计算引擎的运行配置,客户端的操作系统信息、硬件系统以及sql语句对应数据源的统计信息等。对上述信息,进行特征提取,得到第二特征集合。上述特征按照特征形式的不同,可以分为三类:第一类是文本类型特征,主要包括sql语句和执行计划。关于文本类特征的提取可参照上述记载,不再赘述。第二类是数值型特征,主要包括计算引擎的部分运行配置、数据源的统计信息、计算引擎对应客户端的部分操作系统信息和部分硬件信息。该类特征可以直接作为第二特征集合中的特征使用。第三类是字符类特征,主要包括计算引擎的部分运行配置,计算引擎对应客户端的部分操作系统信息和部分硬件信息等,该字符类特征可以使用独热(one-hot)编码,编码结果作为第二特征集合中的特征。[0067]2、特征选择[0068]其中,模型的性能与模型所选的特征强相关。例如,模型预测的准确性与选择的特征直接相关,通常来说,特征选择的越精准,模型预测的准确性也越高。因此,在特征选择阶段,在上述生成的第二特征集合中选择部分特征,用于训练生成预测模型,以期在减少模型复杂度的同时获得较好的预测精度。比如,可以使用极限梯度提升(extremegradientboosting,xgboost)算法,根据预设的预测精度,在第二特征集合中,选出合适的特征等。[0069]3、模型训练[0070]在本技术实施例中,可利用机器学习算法等,对上述选择出的特征进行训练,得到预测sql执行时间的模型。当然,为了简化训练,也将上述回归问题转换为分类问题。关于回归问题的一种理解为,直接得到某个预测结果,比如,预测某个sql的具体执行时间为多长,通常难度较大。分类问题的一种理解为,直接将可能的结果划分为多个区间,那么只需要判断当前的预测结果是否在某个区间内即可,通常难度较小。比如,可根据经验可将sql执行时间划分为多个区间[0s,10s),[10s-30s),[30s-1min),[1min,10min),[10min-20),…,[110,120)。每个区间对应一个分类模型,使用xgboost算法对上述多个分类模型训练,得到最终的预测模型。应当指出,若采用上述方式生成预测模型,所述预测模型所预测的sql执行时间的结果会是某个区间,比如,10至30秒等,而不是具体的sql执行时间等。通过上述方法,在生成预测模型的过程中,不但考虑了sql语句本身,还考虑了sql语句相关联的计算引擎的相关信息,可使得生成的预测模型的预测更准确。[0071]应当指出,在本技术实施例中,上述预测sql执行时间的服务器与生成sql预测时间模型的服务器,两者可以为同一个服务器,也可以为不同的服务器。例如,可在其它服务器中生成预测模型。最终,将上述生成的预测模型存储到上述预测sql执行时间的服务器中等。[0072]在本技术实施例中,挖掘flink计算引擎和软硬件对sql执行时间的影响,使得sql的预测更加准确。同时在不执行sql的情况下预测sql的执行时间,可以更好的帮助用户安排时间,也可以为用户提供优化决策依据。[0073]在一种可能的实现方式中,当用户可以在客户端中输入sql语句时,客户端将自动将sql语句、flink变量、硬件变量和操作系统变量等辅助信息发送给服务器,服务器会自动按照上述描述的方法,进行特征提取;并将提取的特征,输入到预测模型中,可得到sql的执行时间。目前方案中的预测sql的执行时间通常是分钟,小时级别的。如图7所示,上述sql语句:selectcount(*)fromstudentwheresex=’man’,预测其执行时间的过程可能需要10分钟。而采用本技术实施例中的方案,整个时间通常在秒和分钟级别。例如,如图8所示,预测sql语句执行时间的过程可能只需要1分钟,极大的方便了用户安排时间和进行sql优化。[0074]上述本技术提供的实施例中,从服务器作为执行主体的角度对本技术实施例提供的方法进行了介绍。为了实现上述本技术实施例提供的方法中的各功能,服务器可以包括硬件结构和/或软件模块,以软件模块或者硬件结构结合软件模块的形式来实现上述各功能。上述各功能中的某个功能以硬件结构、软件模块、还是硬件结构加软件模块的方式来执行,取决于技术方案的特定应用和设计约束条件。[0075]如图9所示,本技术实施例公开了一种装置900,该装置900可以包括:一个或多个处理器901和存储器902。上述各器件可以通过一个或多个通信总线连接。其中,该程序指令被存储在上述存储器902中并配置为该一个或多个处理器901执行,实现本技术实施例中图4所示的预测执行时间的方法。[0076]上述各个实施例中涉及处理器可以是通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现成可编程门阵列(fieldprogrammablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本技术实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本技术实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存取存储器(randomaccessmemory,ram)、闪存、只读存储器(read-onlymemory,rom)、可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器读取存储器中的指令,结合其硬件完成上述方法的步骤。[0077]具体的,上述装置900的具体实现方式可以参见方法部分的相关介绍,在此不再赘述。[0078]本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能。[0079]所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。[0080]在本技术所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。[0081]所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。[0082]另外,在本技术各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。[0083]所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本技术各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、rom、ram、磁碟或者光盘等各种可以存储程序代码的介质。[0084]以上所述,仅为本技术的具体实施方式,但本技术的保护范围并不局限于此,任何熟悉本
技术领域:
:的技术人员在本技术揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本技术的保护范围之内,因此本技术的保护范围应以权利要求的保护范围为准。当前第1页12当前第1页12