CN111597203A - 语句查询方法、装置、设备、介质 - Google Patents

语句查询方法、装置、设备、介质 Download PDF

Info

Publication number
CN111597203A
CN111597203A CN202010352273.8A CN202010352273A CN111597203A CN 111597203 A CN111597203 A CN 111597203A CN 202010352273 A CN202010352273 A CN 202010352273A CN 111597203 A CN111597203 A CN 111597203A
Authority
CN
China
Prior art keywords
target
statement
sql statement
query
preset
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202010352273.8A
Other languages
English (en)
Inventor
周璐
陆寄豪
唐政亮
胡棐禹
吕苏
欧鹏
翟威
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
China Unionpay Co Ltd
Original Assignee
China Unionpay Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by China Unionpay Co Ltd filed Critical China Unionpay Co Ltd
Priority to CN202010352273.8A priority Critical patent/CN111597203A/zh
Publication of CN111597203A publication Critical patent/CN111597203A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/242Query formulation
    • G06F16/2433Query languages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种语句查询方法、装置、设备、介质。该方法包括:根据目标方法的标识确定目标方法的位置;目标方法为用于与目标数据库进行交互的方法;在目标方法的预设位置处插入目标代码;在目标方法与目标数据库进行交互的过程中,通过目标代码查询结构化查询语言SQL语句,得到第一目标SQL语句;其中,第一目标SQL语句为目标数据库根据交互执行的SQL语句。根据本发明实施例,能够解决无法完整获取程序运行时的全部SQL语句,全面性差的问题。

Description

语句查询方法、装置、设备、介质
技术领域
本发明属于数据查询技术领域,尤其涉及一种语句查询方法、装置、设备、介质。
背景技术
慢查询语句,泛指执行比较慢的结构化查询语言(Structured Query Language,SQL)语句。慢查询语句可能影响程序性能,导致单个请求响应变慢,在高并发场景下可能造成大量请求失败、进程卡住甚至宕机等严重问题。因此需要对程序运行时的全部SQL语句进行筛查,来实现对慢查询语句的检测。
但是,由于大型程序中SQL语句数量较多,导致无法完整获取程序运行时的全部SQL语句,获取SQL语句时的全面性差。
发明内容
本发明实施例提供了一种语句查询方法、装置、设备、介质,能够解决无法完整获取程序运行时的全部SQL语句,全面性差的问题。
第一方面,本发明实施例提供一种语句查询方法,包括:
根据目标方法的标识确定所述目标方法的位置;所述目标方法为用于与目标数据库进行交互的方法;
在所述目标方法的预设位置处插入目标代码;
在所述目标方法与所述目标数据库进行交互的过程中,通过所述目标代码查询结构化查询语言SQL语句,得到第一目标SQL语句;其中,所述第一目标SQL语句为所述目标数据库根据所述交互执行的SQL语句。
第二方面,本发明实施例提供了一种语句查询装置,包括:
位置确定模块,用于根据目标方法的标识确定所述目标方法的位置;所述目标方法为用于与目标数据库进行交互的方法;
插入模块,用于在所述目标方法的预设位置处插入目标代码;
查询模块,用于在所述目标方法与所述目标数据库进行交互的过程中,通过所述目标代码查询结构化查询语言SQL语句,得到第一目标SQL语句;其中,所述第一目标SQL语句为所述目标数据库根据所述交互执行的SQL语句。
第三方面,本发明实施例提供一种语句查询设备,所述设备包括:处理器以及存储有计算机程序指令的存储器;
所述处理器执行所述计算机程序指令时实现如第一方面所述的语句查询方法。
第四方面,本发明实施例提供一种计算机存储介质,所述计算机存储介质上存储有计算机程序指令,所述计算机程序指令被处理器执行时实现如第一方面所述的语句查询方法。
本发明实施例的方法,在用于与目标数据库进行交互的目标方法的位置处插入了目标代码。目标代码能够在目标方法与目标数据库进行交互时,获取目标数据库根据交互内容执行的第一目标SQL语句。可见,本发明实施例中通过在各个方法的位置处插入目标代码,能够获取各个方法运行过程中所执行的全部SQL语句,从而保证了查询SQL语句时的全面性。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单的介绍,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明一个实施例提供的语句查询方法的流程示意图;
图2是本发明另一个实施例提供的语句查询方法的示意图;
图3是本发明一个实施例提供的执行计划示意图;
图4是本发明一个实施例提供的语句查询装置的结构示意图;
图5是本发明一个实施例提供的语句查询设备的结构示意图。
具体实施方式
下面将详细描述本发明的各个方面的特征和示例性实施例,为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及具体实施例,对本发明进行进一步详细描述。应理解,此处所描述的具体实施例仅被配置为解释本发明,并不被配置为限定本发明。对于本领域技术人员来说,本发明可以在不需要这些具体细节中的一些细节的情况下实施。下面对实施例的描述仅仅是为了通过示出本发明的示例来提供对本发明更好的理解。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括……”限定的要素,并不排除在包括要素的过程、方法、物品或者设备中还存在另外的相同要素。
如背景技术,想要对慢查询语句进行检测,需要获取到全部的SQL语句,目前获取SQL语句的方法主要包括以下两种:
一、基于静态代码分析的慢查询检测方法中,通过扫描源代码发现程序运行中会执行的所有SQL语句,由于对于不同的应用程序,其代码的架构、使用的框架、开发者的编码习惯等等是有很大差异的,因此想要通过扫描发现各种不同程序的全部SQL语句难度较大,所以这种方式检测结果的全面性和完整性难以保障。因此这种方法对于小型项目比较有效,对于复杂的大型程序而言可执行性和执行效果都相对较低。
二、在数据库侧捕获低效SQL语句,数据库组件本身会提供一些用户发现低效SQL语句的支持,例如,mysql软件提供了慢查询日志,用户可以通过配置long_query_time自定义一个慢查询时间,比如5秒,mysql会将执行时间超过5秒的SQL语句记录在慢查询日志中。但由于数据库记录的是所有数据库操作,包括来自应用程序的SQL语句(需要的)和测试过程中人工执行的SQL语句(不需要的),日志分析的工作量较大,并且通过制定long_query_time来定义慢查询颗粒度较大,由于测试环境数据库的数据量一般都远小与生产数据量,导致所有SQL语句的执行时间都较短,因此记录在日志中的SQL语句的全面性低。
为了解决现有技术问题,本发明实施例提供了一种语句查询方法、、装置、设备、介质。下面首先对本发明实施例所提供的语句查询方法进行介绍。图1示出了本发明一个实施例提供的语句查询方法的流程示意图。
该方法包括:
S101、根据目标方法的标识确定目标方法的位置;目标方法为用于与目标数据库进行交互的方法;
其中,方法是程序运行语句的集合,用于执行一个功能,这里的目标方法是剥离上层框架和封装后,最终与数据库进行交互的底层实现方法,即每个应用层SQL语句最终都会调用到某一个目标方法来完成数据库操作。上述目标方法的标识可以包括目标方法的方法名以及目标方法所属的类名。类是方法的集合。方法名及该方法所属的类的类名中包含了该方法的程序位置。这里的目标方法的位置,指的是目标方法的程序所在的位置,例如目标方法首字符的地址,或者目标方法所属类的地址以及该目标方法在类中的相对位置以及目标方法包括的字符长度等,只要根据目标方法的位置能够实现后续目标代码的插入即可,本发明不限定这里的位置的具体内容。
S102、在目标方法的预设位置处插入目标代码;
这里的目标代码是为了在目标方法运行过程中同时运行,来获取SQL语句的,因此,这里目标代码插入的预设位置可以为目标方法的起始位置。或者也可以将目标代码插入目标方法中特定程序语句之后,用于使目标方法与目标数据库之间发生交互操作时,目标代码能够被调用。预设位置的具体内容本发明对此不做限定。
S103、在目标方法与目标数据库进行交互的过程中,通过目标代码查询结构化查询语言SQL语句,得到第一目标SQL语句;其中,第一目标SQL语句为目标数据库根据交互执行的SQL语句。
目标方法与目标数据库进行交互,使得目标数据库根据与目标方法的交互,来执行对应的SQL语句,并将执行结果返回目标方法。例如,目标方法为WrappedPreparedStatement类中的3个方法,这3个方法被执行的时候,能够输出当前正在执行的SQL语句,以下为捕获到的第一目标SQL语句示例:
select OPT_ID as OPT_ID1_16_,CRT_TS as CRT_TS2_16_,CRT_USR_NM as CRT_USR_3_16_,OPT_DESC as OPT_DESC4_16_,OPT_DISPLAY_NM as OPT_DISP5_16_,OPT_GRP_CD as OPT_GRP_6_16_,OPT_LIMIT as OPT_LIMI7_16_,OPT_SORT_SEQ as OPT_SORT8_16_,OPT_VAL as OPT_VAL9_16_,REC_ST as REC_ST10_16_from TBL_UCBIZ_ENUM_VAL_LISTtblucbizen0_where 1=1and REC_ST='1'
本发明实施例的方法,在用于与目标数据库进行交互的目标方法的位置处插入了目标代码,目标代码能够在目标方法与目标数据库进行交互时,获取目标数据库根据交互内容执行的第一目标SQL语句。可见,本发明实施例中通过在各个方法的位置处插入目标代码,能够获取各个方法运行过程中所执行的全部SQL语句,从而保证了查询SQL语句时的全面性。
为了实现上述插入目标代码的目的,在本发明的一些实施例中,上述S102可以包括:
通过程序插桩方式在目标方法的预设位置处插入目标代码。
这里的程序插桩,指的是在保证被测程序原有逻辑完整性的基础上在程序中插入一些探针,通过探针的执行并抛出程序运行的特征数据,通过对这些数据的分析,可以获得程序的控制流和数据流信息。本实施例中,直接利用程序插桩的上述特性,来将目标代码插入目标方法,并不损害目标方法的逻辑完整性。具体的,这里的程序插桩方式可以包括:Java Instrument Api等。
为了避免所插入的目标代码对目标方法的造成修改,在本发明的另一些实施例中,上述S102可以包括:
在预设植入接口被调用的情况下,利用预设植入接口在目标方法的预设位置处插入目标代码。
即本实施例中,通过设置预设植入接口,使得仅在预设植入接口被调用的情况下,才插入目标代码,而在预设植入接口未被调用的情况下,则不插入目标代码。这种动态、可插拔的插入目标代码的方式无需对被测应用做任何修改,检测过程对目标方法的正常功能无任何影响,可悄无声息的完成检测,可以灵活控制检测的开始和结束,且提高了插入目标代码的便利性。此外,这种预设植入接口设置于用于完成目标应用和目标数据库交互的框架内,例如upjas,预设植入接口能够对部署于该框架中的任意应用均适用。
在本发明的一些实施例中,上述S101之前,还可以包括:
通过加载目标应用的配置文件,获取目标应用对应的目标方法列表;目标方法列表包括用于与目标数据库进行交互的各个目标方法的标识。
本实施例中,直接利用每个应用的配置文件,来获取该应用对应的目标方法列表,这种方式能够直接确定全部的目标方法,从而方便后续依次在各个目标方法的预设位置处插入目标代码,保证了后续获取的目标方法的全面性。
例如,本实施例可以利用upjas(jboss)作为完成目标应用和目标数据库交互的框架,upjas通过WrappedPreparedStatement类中的3个目标方法完成与目标数据库交互。因此,目标应用的配置文件的内容可以包括WrappedPreparedStatement类的类名和3个目标方法的方法名,具体如下:
org.jboss.jca.adapters.jdbc.WrappedPreparedStatement.execute();
org.jboss.jca.adapters.jdbc.WrappedPreparedStatement.executeQuery();
org.jboss.jca.adapters.jdbc.WrappedPreparedStatement.executeUpdate()。
在本发明的再一些实施例中,在S103之后,该方法还可以包括:
输出第一目标SQL语句。
通过将第一目标SQL语句进行输出,使得到的第一目标SQL语句能够用于其他目的,且方便了后续工作人员对所获取的历史第一目标SQL语句进行回溯查询。
可选的,这里的具体输出方式可以包括:输出目标日志文件,目标日志文件包括第一目标SQL语句,或者这里的目标日志文件中可以包括SQL语句列表,SQL语句列表中包括多个第一目标SQL语句。采用日志文件进行输出的方式,能够对所获取的第一目标SQL语句进行记录,方便后续工作人员利用日志文件进行查询。
由于查询SQL语句的重要目的,就是为了实现慢查询语句的检测,基于此,在本发明的再一些实施例中,在S103之后,该方法还可以包括:
在第一目标SQL语句中筛选满足预设条件的第二目标SQL语句;其中,预设条件的内容包括对慢查询语句的特征描述,即慢查询语句需要满足的特征。
将筛选得到的第二目标SQL语句作为慢查询语句。
本实施例中,在通过目标代码获取到全面的第一目标SQL语句之后,再从中筛选慢查询语句,使得所筛选得到的慢查询语句全面且较为准确。
具体的,为了实现对慢查询语句的准确筛选,在本发明的又一些实施例中,如图2所示,图2示出了本发明另一个实施例提供的语句查询方法的示意图。该方法可以包括:
S201、根据目标方法的标识确定目标方法的位置;目标方法为用于与目标数据库进行交互的方法;
S202、在目标方法的预设位置处插入目标代码;
S203、在目标方法与目标数据库进行交互的过程中,通过目标代码查询结构化查询语言SQL语句,得到第一目标SQL语句;S201~S203与图1中的S101~S103相似,在此不再赘述。
S204、通过目标数据库explain命令对各个第一目标SQL语句进行扩展,得到各个第一目标SQL语句对应的执行计划;
其中,如果得到第一目标SQL语句为多条,例如得到SQL列表,SQL列表包括多条第一目标SQL语句,则对SQL列表中的第一目标SQL语句进行逐条扩展,之后再判断扩展后的各个执行计划是否满足预设条件。在其他实施例中,还可以每扩展得到一条执行计划后,即判断是否满足预设条件,判断结束后,再对下一条第一目标SQL语句进行扩展。
例如,前文的捕获到的第一目标SQL语句,经过explain命令进行扩展后得到的执行计划可如图3所示,图3示出了本发明一个实施例提供的执行计划示意图。
S205、在各个执行计划中筛选满足预设条件的目标执行计划,将目标执行计划对应的第二目标SQL语句作为慢查询语句。
该步骤具体可以依次将解析后的执行计划与预设条件进行匹配,或者也可以直接按照预设条件来进行筛选。本发明对此不作限定。
本实施例中通过explain命令对第一目标SQL语句进行扩展,并利用扩展后得到的执行计划与预设条件进行比对,由于explain命令能够将SQL语句中的各种特征识别出来并分别列表展示在执行计划中,因此通过执行计划与预设条件进行比对,简化了比对的过程,方便了目标执行计划的筛选操作。
在本发明的另一些实施例中,上述执行计划可以包括至少一个指标项以及每个指标项的特征值。
如图3所示,执行计划中的每个列标签均可以作为指标项,由于筛选满足预设条件的执行计划是为了对慢查询语句进行筛选,因此,需要将执行计划中与SQL语句的查询效率相关的指标项作为筛选条件。
其中,指标项中与查询效率相关的指标项中最重要的两个包括:索引项key以及访问方式项type;索引项用于表示第一目标SQL语句执行时所使用的索引键;访问方式项用于表示第一目标SQL语句在目标数据库中查找所需行的方式,例如,type的值及其级别可以如下:
system>const>eq_ref>ref>fulltext>ref_or_null>index_merge>unique_subquery>index_subquery>range>index>ALL。从system到ALL,性能从好到差。
在另一实施例中,在得到执行计划后,还可以对执行计划进行解析,由于explain输出格式是固定,以“|”为分隔符,可以解析出执行计划中每个指标项的值,例如上述第一目标SQL语句命名为SQL1,那么解析后可以得到:
SQL1.select_type=SIMPLE;
SQL1.table=tblucbizen0_;
SQL1.partitions=NULL;
SQL1.type=ALL;
SQL1.possible_keys=NULL;
SQL1.key=NULL;
SQL1.key_len=NULL;
SQL1.ref=NULL;
SQL1.rows=218;
SQL1.filtered=10.00;
SQL1.Extra=Using where。
在解析完成后,则可根据预设条件筛选慢查询语句,可选的,上述预设条件可以包括:
索引项的特征值为第一特征值,且访问方式项的级别低于预设级别;其中,访问方式项的特征值用于表示访问方式项的级别。例如,key的特征值为NULL,且type的级别低于range(即type级别为index或ALL)。
此外,在其他实施例中,由于不同业务系统对查询快慢要求不一致,上述预设条件可以根据实际情况进行配置。预设条件的格式可以包括:每个指标项为一行,格式为:
指标项运算符号[阈值]
例如,type in[index,ALL]:这个描述表示慢查询语句需要满足的一个条件是:指标项type的值为index、ALL二者中的一个。
可选的,预设条件的格式还可以包括:各行之间可以用AND和OR进行连接。
例如,某系统对查询时间要求非常高,经自身评估后认定,正常的SQL语句需经过索引、访问方式要不差于index_subquery、且预估扫描行数要小于1000条,三个条件必须同时满足。即是说,若SQL语句未经过索引、或者访问方式的级别低于index_subquery、或者预估扫描行数大于等于1000条,则该SQL语句为慢查询语句。即此时的预设条件可以为:
key in[NULL]
OR
type in[range,index,ALL]
OR
Rows>=1000。
当然,以上仅为两种具体实例,预设条件还可以根据实际需求进行设置,本发明对此不作限定。
此外,可选的,在S205中,还可以包括:在每筛选得到一个目标执行计划后可以输出一次预警信息,用于提示用户当前检测到一个慢查询语句。具体输出预警信息的方式本发明不作限定。
在本发明的其他一些实施例中,上述S205之后,还可以包括:输出慢查询语句。为了使工作人员能够及时了解到本次查询所得到的慢查询语句,可以将慢查询语句进行输出,具体的输出形式本发明不作限定。
基于上述方法实施例,本发明实施例还提供了一种语句查询装置,参见图4,图4示出了本发明一个实施例提供的语句查询装置的结构示意图。
该装置包括:
位置确定模块301,用于根据目标方法的标识确定目标方法的位置;目标方法为用于与目标数据库进行交互的方法;
插入模块302,用于在目标方法的预设位置处插入目标代码;
查询模块303,用于在目标方法与目标数据库进行交互的过程中,通过目标代码查询结构化查询语言SQL语句,得到第一目标SQL语句;其中,第一目标SQL语句为目标数据库根据交互执行的SQL语句。
本发明实施例的方法,在用于与目标数据库进行交互的目标方法的位置处插入了目标代码,目标代码能够在目标方法与目标数据库进行交互时,获取目标数据库根据交互内容执行的第一目标SQL语句。可见,本发明实施例中通过在各个方法的位置处插入目标代码,能够获取各个方法运行过程中所执行的全部SQL语句,从而保证了查询SQL语句时的全面性。
可选的,上述目标方法的标识可以包括目标方法的方法名以及目标方法所属的类名。
上述目标方法的位置,指的是目标方法的程序所在的位置,例如目标方法首字符的地址,或者目标方法所属类的地址以及该目标方法在类中的相对位置以及目标方法包括的字符长度等,只要根据目标方法的位置能够实现后续目标代码的插入即可,本发明不限定这里的位置的具体内容。
在本发明的一些实施例中,上述插入模块302可以用于:
通过程序插桩方式在目标方法的预设位置处插入目标代码。
这里的程序插桩,指的是在保证被测程序原有逻辑完整性的基础上在程序中插入一些探针,通过探针的执行并抛出程序运行的特征数据,通过对这些数据的分析,可以获得程序的控制流和数据流信息。本实施例中,直接利用程序插桩的上述特性,来将目标代码插入目标方法,并不损害目标方法的逻辑完整性。具体的,这里的程序插桩方式可以包括:Java Instrument Api等。
在本发明的另一些实施例中,上述插入模块302可以用于:
在预设植入接口被调用的情况下,利用预设植入接口在目标方法的预设位置处插入目标代码。
即本实施例中,通过设置预设植入接口,使得仅在预设植入接口被调用的情况下,才插入目标代码,而在预设植入接口未被调用的情况下,则不插入目标代码。这种动态、可插拔的插入目标代码的方式无需对被测应用做任何修改,检测过程对目标方法的正常功能无任何影响,可悄无声息的完成检测,可以灵活控制检测的开始和结束。此外,这种预设植入接口设置于用于完成目标应用和目标数据库交互的框架内,例如upjas,预设植入接口能够对部署于该框架中的任意应用均适用。
在本发明的一些实施例中,该装置还可以包括:
列表获取模块,用于通过加载目标应用的配置文件,获取目标应用对应的目标方法列表;目标方法列表包括用于与目标数据库进行交互的各个目标方法的标识。
本实施例中,直接利用每个应用的配置文件,来获取该应用对应的目标方法列表,这种方式能够直接确定全部的目标方法,从而方便后续依次在各个目标方法的预设位置处插入目标代码,保证了后续获取的目标方法的全面性。
在本发明的再一些实施例中,该装置还可以包括:
第一输出模块,用于输出第一目标SQL语句。
通过将第一目标SQL语句进行输出,使得到的第一目标SQL语句能够用于其他目的,且方便了后续工作人员对所获取的历史第一目标SQL语句进行回溯查询。
可选的,这里的输出模块可以具体用于:输出目标日志文件,目标日志文件包括第一目标SQL语句,或者这里的目标日志文件中可以包括SQL语句列表,SQL语句列表中包括多个第一目标SQL语句。采用日志文件进行输出的方式,能够对所获取的第一目标SQL语句进行记录,方便后续工作人员利用日志文件进行查询。
在本发明的再一些实施例中,该装置还可以包括:
筛选模块,用于在第一目标SQL语句中筛选满足预设条件的第二目标SQL语句;将筛选得到的第二目标SQL语句作为慢查询语句。
本实施例中,在通过目标代码获取到全面的第一目标SQL语句之后,再从中筛选慢查询语句,使得所筛选得到的慢查询语句全面且较为准确。
在本发明的又一些实施例中,上述筛选模块可以包括:
扩展单元,用于通过目标数据库explain命令对各个第一目标SQL语句进行扩展,得到各个第一目标SQL语句对应的执行计划;
筛选单元,用于在各个执行计划中筛选满足预设条件的目标执行计划;将目标执行计划对应的第二目标SQL语句作为慢查询语句。
本实施例中通过explain命令对第一目标SQL语句进行扩展,并利用扩展后得到的执行计划与预设条件进行比对,由于explain命令能够将SQL语句中的各种特征识别出来并分别列表展示在执行计划中,因此通过执行计划与预设条件进行比对,简化了比对的过程,方便了目标执行计划的筛选操作。
在本发明的另一些实施例中,上述执行计划可以包括至少一个指标项以及每个指标项的特征值。执行计划中的每个列标签均可以作为指标项,由于筛选满足预设条件的执行计划是为了对慢查询语句进行筛选,因此,需要将执行计划中与SQL语句的查询效率相关的指标项作为筛选条件。
其中,指标项中与查询效率相关的指标项中最重要的两个包括:索引项key以及访问方式项type;索引项用于表示第一目标SQL语句执行时所使用的索引键;访问方式项用于表示第一目标SQL语句在目标数据库中查找所需行的方式。
在另一实施例中,上述扩展单元还可以用于:在得到执行计划后,还可以对执行计划进行解析。由于explain输出格式是固定,以“|”为分隔符,扩展单元可以解析出执行计划中每个指标项的值。
可选的,上述预设条件可以包括:
索引项的特征值为第一特征值,且访问方式项的级别低于预设级别;其中,访问方式项的特征值用于表示访问方式项的级别。例如,key的特征值为NULL,且type的级别低于range(即type级别为index或ALL)。
此外,可选的,该装置还可以包括:
预警模块,用于在每筛选得到一个目标执行计划后可以输出一次预警信息,用于提示用户当前检测到一个慢查询语句。具体输出预警信息的方式本发明不作限定。
在本发明的其他一些实施例中,该装置还可以包括:
第二输出模块,用于输出慢查询语句。为了使工作人员能够及时了解到本次查询所得到的慢查询语句,可以将慢查询语句进行输出,具体的输出形式本发明不作限定。
图5示出了本发明一个实施例提供的语句查询设备的硬件结构示意图。
在语句查询设备可以包括处理器401以及存储有计算机程序指令的存储器402。处理器401通过读取并执行存储器402中存储的计算机程序指令,以实现上述实施例中的任意一种语句查询方法。
具体地,上述处理器401可以包括中央处理器(CPU),或者特定集成电路(Application Specific Integrated Circuit,ASIC),或者可以被配置成实施本发明实施例的一个或多个集成电路。
存储器402可以包括用于数据或指令的大容量存储器。举例来说而非限制,存储器402可包括硬盘驱动器(Hard Disk Drive,HDD)、软盘驱动器、闪存、光盘、磁光盘、磁带或通用串行总线(Universal Serial Bus,USB)驱动器或者两个或更多个以上这些的组合。在合适的情况下,存储器402可包括可移除或不可移除(或固定)的介质。在合适的情况下,存储器402可在综合网关容灾设备的内部或外部。在特定实施例中,存储器402是非易失性固态存储器。在特定实施例中,存储器402包括只读存储器(ROM)。在合适的情况下,该ROM可以是掩模编程的ROM、可编程ROM(PROM)、可擦除PROM(EPROM)、电可擦除PROM(EEPROM)、电可改写ROM(EAROM)或闪存或者两个或更多个以上这些的组合。
在一个示例中,语句查询设备还可包括通信接口403和总线510。其中,如图5所示,处理器401、存储器402、通信接口403通过总线510连接并完成相互间的通信。
通信接口403,主要用于实现本发明实施例中各模块、装置、单元和/或设备之间的通信。
总线510包括硬件、软件或两者,将在线数据流量计费设备的部件彼此耦接在一起。举例来说而非限制,总线可包括加速图形端口(AGP)或其他图形总线、增强工业标准架构(EISA)总线、前端总线(FSB)、超传输(HT)互连、工业标准架构(ISA)总线、无限带宽互连、低引脚数(LPC)总线、存储器总线、微信道架构(MCA)总线、外围组件互连(PCI)总线、PCI-Express(PCI-X)总线、串行高级技术附件(SATA)总线、视频电子标准协会局部(VLB)总线或其他合适的总线或者两个或更多个以上这些的组合。在合适的情况下,总线510可包括一个或多个总线。尽管本发明实施例描述和示出了特定的总线,但本发明考虑任何合适的总线或互连。
另外,结合上述实施例中的语句查询方法,本发明实施例可提供一种计算机存储介质来实现。该计算机存储介质上存储有计算机程序指令;该计算机程序指令被处理器执行时实现上述实施例中的任意一种语句查询方法。
以上所述的结构框图中所示的功能块可以实现为硬件、软件、固件或者它们的组合。当以硬件方式实现时,其可以例如是电子电路、专用集成电路(ASIC)、适当的固件、插件、功能卡等等。当以软件方式实现时,本发明的元素是被用于执行所需任务的程序或者代码段。程序或者代码段可以存储在机器可读介质中,或者通过载波中携带的数据信号在传输介质或者通信链路上传送。“机器可读介质”可以包括能够存储或传输信息的任何介质。机器可读介质的例子包括电子电路、半导体存储器设备、ROM、闪存、可擦除ROM(EROM)、软盘、CD-ROM、光盘、硬盘、光纤介质、射频(RF)链路,等等。代码段可以经由诸如因特网、内联网等的计算机网络被下载。
还需要说明的是,本发明中提及的示例性实施例,基于一系列的步骤或者装置描述一些方法或系统。但是,本发明不局限于上述步骤的顺序,也就是说,可以按照实施例中提及的顺序执行步骤,也可以不同于实施例中的顺序,或者若干步骤同时执行。
以上所述,仅为本发明的具体实施方式,所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的系统、模块和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。应理解,本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本发明的保护范围之内。

Claims (14)

1.一种语句查询方法,其特征在于,包括:
根据目标方法的标识确定所述目标方法的位置;所述目标方法为用于与目标数据库进行交互的方法;
在所述目标方法的预设位置处插入目标代码;
在所述目标方法与所述目标数据库进行交互的过程中,通过所述目标代码查询结构化查询语言SQL语句,得到第一目标SQL语句;其中,所述第一目标SQL语句为所述目标数据库根据所述交互执行的SQL语句。
2.根据权利要求1所述的方法,其特征在于,所述在所述目标方法的预设位置处插入目标代码,包括:
通过程序插桩方式在所述目标方法的所述预设位置处插入所述目标代码。
3.根据权利要求1所述的方法,其特征在于,所述在所述目标方法的预设位置处插入目标代码,包括:
在预设植入接口被调用的情况下,利用所述预设植入接口在所述目标方法的所述预设位置处插入所述目标代码。
4.根据权利要求1-3任一项所述的方法,其特征在于,所述得到第一目标SQL语句之后,还包括:
在所述第一目标SQL语句中筛选满足预设条件的第二目标SQL语句;
将筛选得到的所述第二目标SQL语句作为慢查询语句。
5.根据权利要求4所述的方法,其特征在于,所述在所述第一目标SQL语句中筛选满足预设条件的第二目标SQL语句,包括:
通过目标数据库explain命令对各个所述第一目标SQL语句进行扩展,得到各个所述第一目标SQL语句对应的执行计划;
在各个所述执行计划中筛选满足所述预设条件的目标执行计划;
所述将筛选得到的所述第二目标SQL语句作为慢查询语句,包括:
将所述目标执行计划对应的第二目标SQL语句作为慢查询语句。
6.根据权利要求5所述的方法,其特征在于,所述执行计划包括至少一个指标项以及每个所述指标项的特征值;
其中,所述指标项包括:索引项以及访问方式项;所述索引项用于表示所述第一目标SQL语句执行时所使用的索引键;所述访问方式项用于表示所述第一目标SQL语句在所述目标数据库中查找所需行的方式。
7.根据权利要求6所述的方法,其特征在于,所述预设条件包括:
所述索引项的特征值为第一特征值,且所述访问方式项的级别低于预设级别;其中,所述访问方式项的特征值用于表示所述访问方式项的级别。
8.根据权利要求1所述的方法,其特征在于,所述得到第一目标SQL语句之后,还包括:
输出所述第一目标SQL语句。
9.根据权利要求8所述的方法,其特征在于,所述输出所述第一目标SQL语句,包括:
输出目标日志文件,所述目标日志文件包括所述第一目标SQL语句。
10.根据权利要求1所述的方法,其特征在于,所述根据目标方法的标识确定所述目标方法的位置之前,还包括:
通过加载目标应用的配置文件,获取所述目标应用对应的目标方法列表;所述目标方法列表包括用于与所述目标数据库进行交互的各个目标方法的标识。
11.根据权利要求1或10所述的方法,其特征在于,所述目标方法的标识包括所述目标方法的方法名以及所述目标方法所属的类名。
12.一种语句查询装置,其特征在于,包括:
位置确定模块,用于根据目标方法的标识确定所述目标方法的位置;所述目标方法为用于与目标数据库进行交互的方法;
插入模块,用于在所述目标方法的预设位置处插入目标代码;
查询模块,用于在所述目标方法与所述目标数据库进行交互的过程中,通过所述目标代码查询结构化查询语言SQL语句,得到第一目标SQL语句;其中,所述第一目标SQL语句为所述目标数据库根据所述交互执行的SQL语句。
13.一种语句查询设备,其特征在于,所述设备包括:处理器以及存储有计算机程序指令的存储器;
所述处理器执行所述计算机程序指令时实现如权利要求1-11中任意一项所述的语句查询方法。
14.一种计算机存储介质,其特征在于,所述计算机存储介质上存储有计算机程序指令,所述计算机程序指令被处理器执行时实现如权利要求1-11中任意一项所述的语句查询方法。
CN202010352273.8A 2020-04-28 2020-04-28 语句查询方法、装置、设备、介质 Pending CN111597203A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010352273.8A CN111597203A (zh) 2020-04-28 2020-04-28 语句查询方法、装置、设备、介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010352273.8A CN111597203A (zh) 2020-04-28 2020-04-28 语句查询方法、装置、设备、介质

Publications (1)

Publication Number Publication Date
CN111597203A true CN111597203A (zh) 2020-08-28

Family

ID=72192129

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010352273.8A Pending CN111597203A (zh) 2020-04-28 2020-04-28 语句查询方法、装置、设备、介质

Country Status (1)

Country Link
CN (1) CN111597203A (zh)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108509530A (zh) * 2018-03-14 2018-09-07 武汉斗鱼网络科技有限公司 一种MySQL慢查询语句自动优化方法、计算机设备和存储介质
CN109992502A (zh) * 2017-12-30 2019-07-09 中国移动通信集团四川有限公司 应用软件性能自动检测分析方法、装置、设备及介质
CN110019349A (zh) * 2019-04-02 2019-07-16 深圳前海微众银行股份有限公司 语句预警方法、装置、设备及计算机可读存储介质
CN110688659A (zh) * 2019-09-10 2020-01-14 深圳开源互联网安全技术有限公司 基于iast测试工具动态检测水平越权的方法及系统

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109992502A (zh) * 2017-12-30 2019-07-09 中国移动通信集团四川有限公司 应用软件性能自动检测分析方法、装置、设备及介质
CN108509530A (zh) * 2018-03-14 2018-09-07 武汉斗鱼网络科技有限公司 一种MySQL慢查询语句自动优化方法、计算机设备和存储介质
CN110019349A (zh) * 2019-04-02 2019-07-16 深圳前海微众银行股份有限公司 语句预警方法、装置、设备及计算机可读存储介质
CN110688659A (zh) * 2019-09-10 2020-01-14 深圳开源互联网安全技术有限公司 基于iast测试工具动态检测水平越权的方法及系统

Similar Documents

Publication Publication Date Title
CN108984389B (zh) 一种应用程序测试方法及终端设备
WO2020019490A1 (zh) 一种接口测试方法、电子设备及存储介质
US9158639B2 (en) Method and apparatus for correlating input and output messages of system under test
CN105022694A (zh) 用于移动终端测试的测试用例生成方法及系统
CN109144852A (zh) 静态代码的扫描方法、装置、计算机设备及存储介质
CN115309831B (zh) 一种本地数据库状态同步方法、电子设备及存储介质
CN111338692A (zh) 基于漏洞代码的漏洞分类方法、装置及电子设备
CN110008462B (zh) 一种命令序列检测方法及命令序列处理方法
CN112671878B (zh) 一种区块链的信息订阅方法、装置、服务器和存储介质
CN111597203A (zh) 语句查询方法、装置、设备、介质
CN113821496B (zh) 数据库迁移方法、系统、设备及计算机可读存储介质
CN115794752A (zh) 一种数据处理方法、装置、设备、介质及产品
CN110442370B (zh) 一种测试用例查询方法及装置
CN114297664A (zh) 一种基于Gradle的开源组件漏洞检测方法
CN113037521B (zh) 识别通讯设备状态的方法、通讯系统及存储介质
CN113760754A (zh) 基于图搜索的测试案例生成的方法、系统及存储介质
CN113591147A (zh) 一种数据抽取的方法、装置、计算机设备及存储介质
CN112187708B (zh) 数字证书的证书链的自动补全方法及设备
CN108132971B (zh) 数据库碎片文件的分析方法和装置
CN111338956A (zh) 一种自动化的压测方法、装置、设备和存储介质
CN105391602A (zh) 一种数据采集测试方法和装置
CN112925754B (zh) 文件描述符溢出上报方法、装置及计算机可读介质
CN111258997B (zh) 基于NiFi的数据处理方法和装置
CN110795297B (zh) 一种电子设备的测试方法及装置
CN117675635A (zh) 一种流量回放测试的方法、系统、设备及存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination