CN106445795B - 一种数据库sql效率检测方法及装置 - Google Patents
一种数据库sql效率检测方法及装置 Download PDFInfo
- Publication number
- CN106445795B CN106445795B CN201610851274.0A CN201610851274A CN106445795B CN 106445795 B CN106445795 B CN 106445795B CN 201610851274 A CN201610851274 A CN 201610851274A CN 106445795 B CN106445795 B CN 106445795B
- Authority
- CN
- China
- Prior art keywords
- sql statement
- sql
- program
- source code
- analyzed
- 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.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3447—Performance evaluation by modeling
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Life Sciences & Earth Sciences (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Bioinformatics & Computational Biology (AREA)
- Evolutionary Biology (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种数据库SQL效率检测方法及装置,其中,方法包括:配置参数;根据所述参数获取待检测程序的程序源码,对所述程序源码进行解析,获得SQL语句,将所述SQL语句与历史基线表比对,确定待分析的SQL语句;对所述待分析的SQL语句进行分析,将结果记录在分析明细表中;根据评估模型,对所述分析明细表中记录的结果进行评估。本技术方案可以快速有效的覆盖目标范围,不需要实际执行SQL语句,不影响业务数据,适用于数据库存储过程程序的检测。并且,本技术方案能够基于旧程序的数据快速检查评估新版本程序的SQL效率情况,提高版本升级的运行安全和性能。
Description
技术领域
本发明涉及数据库技术领域,特别涉及一种数据库SQL效率检测方法及装置。
背景技术
数据库SQL语句的执行效率是常见的影响生产系统性能的突出因素。在软件测试阶段,一方面,往往由于SQL动态性能测试过程人力消耗较大,针对性能方面的测试覆盖面不够,另一方面,数据分布差异等原因,导致SQL语句在测试环境跟生产环境的执行方法不同,效率出现较大差异,因此部分数据库SQL性能问题无法在测试阶段发现,而只能在生产实际运行时才发现,如此,很多原本容易解决的问题,由于没有提前检测发现,缺乏解决问题的时间窗口,解决不及时,会造成影响广度、深度的升级。
发明内容
本发明实施例的主要目的在于提出一种数据库SQL效率检测方法及装置,
为实现上述目的,本发明提供了一种数据库SQL效率检测方法,包括:
配置参数;
根据所述参数获取待检测程序的程序源码,对所述程序源码进行解析,获得SQL语句,将所述SQL语句与历史基线表比对,确定待分析的SQL语句;
对所述待分析的SQL语句进行分析,将结果记录在分析明细表中;
根据评估模型,对所述分析明细表中记录的结果进行评估。
可选的,在本发明一实施例中,所述参数包括:目标应用数据库的IP、端口、用户、密码、实例、检查范围、程序单元调度频率表中的调度频率以及操作类型。
可选的,在本发明一实施例中,所述确定待分析的SQL语句的步骤包括:
根据所述参数获得程序源码范围;
从所述程序源码范围中读入程序源码;
根据所述程序源码对应的程序语言规则,对所述程序源码进行解析,获得SQL语句;
在保留识别SQL语句的必要特征的基础上,对所述SQL语句进行格式化;
根据格式化后的SQL语句获得SQL语句的特征ID;
根据SQL语句的特征ID和SQL的位置信息,对历史基线表进行查询;如果在所述历史基线表中没有查询到相应的SQL语句,则相应的SQL语句为待分析的SQL语句。
可选的,在本发明一实施例中,所述对所述待分析的SQL语句进行分析的步骤包括:
将标准格式化后的待分析SQL语句通过JDBC提交目标应用数据库,获取执行计划;
从所述执行计划中获取单次执行成本Ci,根据SQL语句所在的程序单元的调用频率表中获取调用频率Qi,根据单次执行成本Ci与调用频率Qi确定单位时间总成本,根据单位时间总成本判断SQL的影响程度;
根据SQL的影响程度定制的基于SQL语句本身特征的检查规则,对待分析的SQL语句进行特征模型匹配,按匹配到的特征进行检查诊断;
根据SQL的影响程度定制的基于SQL语句执行计划特征的检查规则,对所述执行计划进行特征模型匹配,按匹配到的特征进行检查诊断。
可选的,在本发明一实施例中,所述评估模型用于比较新、旧完整版本程序的性能差异;其中,所述评估模型的表达式为:
Dall=(Wnew-Wold/Wold)×100%
式中,Dall表示新完整版本程序相对旧完整版本程序整体消耗增加比例;Wnew、Wold:分别是新、旧完整版本性能评估值。
可选的,在本发明一实施例中,所述评估模型用于版本程序性能评估;其中,所述评估模型的表达式为:
式中,i表示SQL语句的序列数,Ci表示第i个SQL语句的执行成本,从所述分析明细表中获取;Qi表示第i个SQL语句的执行频率,从所述参数中的程序单元调度频率表中获取;n表示需评估的SQL语句的条数。
为实现上述目的,本发明还提供了一种数据库SQL效率检测装置,包括:
参数配置单元,用于配置参数;
SQL采集单元,用于根据所述参数获取待检测程序的程序源码,对所述程序源码进行解析,获得SQL语句,将所述SQL语句与历史基线表比对,确定待分析的SQL语句;
分析单元,用于对所述待分析的SQL语句进行分析,将结果记录在分析明细表中;
评估单元,用于根据评估模型,对所述分析明细表中记录的结果进行评估。
可选的,在本发明一实施例中,所述参数配置单元配置的参数包括:目标应用数据库的IP、端口、用户、密码、实例、检查范围、程序单元调度频率表中的调度频率以及操作类型。
可选的,在本发明一实施例中,所述SQL采集单元包括:
程序源码范围确定模块,用于根据所述参数获得程序源码范围;
程序源码获取模块,用于从所述程序源码范围中读入程序源码;
SQL语句确定模块,用于根据所述程序源码对应的程序语言规则,对所述程序源码进行解析,获得SQL语句;
格式化模块,用于在保留识别SQL语句的必要特征的基础上,对所述SQL语句进行格式化;
特征提取模块,用于根据格式化后的SQL语句获得SQL语句的特征ID;
待分析的SQL语句确定模块,用于根据SQL语句的特征ID和SQL的位置信息,对历史基线表进行查询;如果在所述历史基线表中没有查询到相应的SQL语句,则相应的SQL语句为待分析的SQL语句。
可选的,在本发明一实施例中,所述分析单元包括:
执行计划获取模块,用于将标准格式化后的待分析SQL语句通过JDBC提交目标应用数据库,获取执行计划;
执行成本确定模块,用于从所述执行计划中获取单次执行成本Ci,根据SQL语句所在的程序单元的调用频率表中获取调用频率Qi,根据单次执行成本Ci与调用频率Qi确定单位时间总成本,根据单位时间总成本判断SQL的影响程度;
第一检查诊断模块,用于根据SQL的影响程度定制的基于SQL语句本身特征的检查规则,对待分析的SQL语句进行特征模型匹配,按匹配到的特征进行检查诊断;
第二检查诊断模块,用于根据SQL的影响程度定制的基于SQL语句执行计划特征的检查规则,对所述执行计划进行特征模型匹配,按匹配到的特征进行检查诊断。
可选的,在本发明一实施例中,所述评估单元用于比较新、旧完整版本程序的性能差异;其中,所述评估单元的评估模型的表达式为:
Dall=(Wnew-Wold/Wold)×100%
式中,Dall表示新完整版本程序相对旧完整版本程序整体消耗增加比例;Wnew、Wold:分别是新、旧完整版本性能评估值。
可选的,在本发明一实施例中,所述评估单元用于版本程序性能评估;其中,所述评估单元的评估模型的表达式为:
式中,i表示SQL语句的序列数,Ci表示第i个SQL语句的执行成本,从所述分析明细表中获取;Qi表示第i个SQL语句的执行频率,从所述参数中的程序单元调度频率表中获取;n表示需评估的SQL语句的条数。
上述技术方案具有如下有益效果:
本技术方案可以快速有效的覆盖目标范围,不需要实际执行SQL语句,不影响业务数据,适用于数据库存储过程程序的检测。并且,本技术方案能够基于旧程序的数据快速检查评估新版本程序的SQL效率情况,提高版本升级的运行安全和性能。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明提出的一种数据库SQL效率检测方法流程图;
图2为本发明提出的一种数据库SQL效率检测装置框图;
图3为数据库SQL效率检测装置中SQL采集单元的功能框图;
图4为数据库SQL效率检测装置中分析单元的功能框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本技术方案的工作原理为:本技术方案是基于SQL语句执行计划的特征对SQL效率问题进行检查识别,该特征包含一些常见的低效的SQL执行方式,包含但不限于大表全表扫描,低效的跳跃扫描,笛卡尔联合等。
本技术方案基于SQL特征的增量进行检测,其主要的SQL特证包括对SQL语句进行标准格式化后生成的唯一标示(SQL特征ID),辅助特证为SQL语句的程序单元位置信息。投产前,基于原有程序版本建立的基于SQL特证的历史版本基线,投产后通过新版本程序与历史版本基线进行比对获得增量SQL。这里的标准格式化,涉及去除多余注释、去除冗余空白字符,绑定变量类型替换,统一大小写等一系列操作。
本技术方案引入程序单元调度频率作为SQL效率影响范围的重要评估因素。SQL语句的调度是以过程或函数的程序单元作为单位进行调度,一个SQL语句的效率问题影响范围评估模型需要结合SQL本身的处理效率和程序单元调度频率综合计算得到。程序单元调度频率对于已有的程序单元(过程或函数)可以从生产数据库日常运行中进行统计得到,对于新增的程序单元,需要进行结合业务特征进行预估。
基于上述工作原理,本发明提出一种数据库SQL效率检测方法,如图1所示。包括:
步骤101):配置参数;
在本步骤中,参数包括目标应用数据库的IP、端口、用户、密码、实例、检查范围、程序单元调度频率以及操作类型。其中,操作类型的编号为0,表示建立历史版本基线;操作类型的编号为1,表示对当前版本进行分析评估。
步骤102):根据所述参数获取待检测程序的程序源码,对所述程序源码进行解析,获得SQL语句,将所述SQL语句与历史基线表比对,确定待分析的SQL语句;
在本步骤中,具体包括:
步骤1:根据配置的参数获取到程序源码范围(程序单元),最常见的有存储过程包名,存储过程名,函数名等,这里获取方式可以是从安装脚本里解析获取,也可以通过配置的方式定义需要检查的源码单元对象。
步骤2:读入程序源码,通常可以通过版本的安装脚本或者连到目标数据库获取。如通过oracle可通过user_source视图进行获取:
SELECT text FROM User_Source t WHERE t.name='CIDP_PCKG_GEN_QUERY'ANDt.TYPE='PACKAGE'ORDER BY t.line
步骤3:根据源码对应的程序语言规则,对源码进行解析,包括拆分出SQL语句,对全局变量、局部变量、游标变量等的变量、类型、作用域范围的识别。
步骤4:对得到的SQL语句进行格式化,保留识别SQL语句的必要特征。操作包括,识别SQL语句的输入变量,根据步骤403识别到的变量类型,按相应的类型对变量进行替换,大小写转换,冗余空白字符消除等等。
变量替换涉及如下表1,表1为变量替换规则表,即将变量替换为变量类型对应的绑定变量标识加变量出现顺序号,如V1,其中1为变量第一次出现的顺序号。
表1
步骤5:对新版本SQL语句与旧版本进行比对,生成SQL语句的特征ID,最常见的是通过MD5方法生成。
步骤6:一般程序投产前,需要建立历史版本的基线,此时只记录历史版本中SQL的特征,获取执行成本,不进行具体性能分析,配置中设置参数"仅建基线=是"。在本实施例中,将SQL的特征记录到一存储单元的历史基线表中,信息主要包括SQL语句特征ID、SQL的位置信息(如包名)、执行成本、未做任何处理的SQL语句、格式化后的SQL语句等。
步骤7:当"仅建基线=否",一般是投产后进行检查分析,此时需要与投产前建立的历史版本基线进行对比,通过SQL语句特征ID、SQL的位置信息对历史基线表进行查询,如果找到记录,则认为SQL语句为历史存在语句;否则认为是新增或修改的语句,需要进行分析。
步骤8:将SQL语句信息(主要包括SQL语句特征ID、SQL的位置信息(如包名)、未做任何处理的SQL语句、格式化后的SQL语句等)记录到存储单元的待分析表中。
在本实施例中,存储单元的数据库表结构至少包括以下部分:
A、程序单元调用频率表:用于存储程序单元的调用频率,在参数配置时产生。
B、历史基线表:用于存储步骤102第一阶段收集到的投产前版本的SQL特征数据,包括SQL的特征ID,所属的程序单元、子程序单元等位置信息。
C、分析表:用于存储步骤102确定的待分析的SQL语句,该语句包括SQL的特征ID、所属的程序单元、子程序单元、标准格式化后的SQL语句。
D、分析明细表:通过SQL的特征ID与分析表关联,用于存储分析结果,包括问题类型、问题描述等。
E、数据增长情况表:记录目标数据库中各表数据的增长情况,可以通过定期从ORACLE统计视图采集进行比较获得。
步骤103):对所述待分析的SQL语句进行分析,将结果记录在分析明细表中;
在本步骤中,具体包括:
步骤1’:从存储单元中的分析表中依次取出已经进行标准格式化后的待分析SQL语句、SQL所在的程序单元等信息。
步骤2’:将SQL语句通过JDBC提交目标应用数据库,获取执行计划。
步骤3’:执行成本检查,从执行计划中获取单次执行成本Ci,根据SQL所在的程序单元从程序单元调用频率表中获取调用频率Qi,计算单位时间总成本COST合计=Ci×Qi,根据下表2的对照关系,判断SQL的影响程度。
表2
步骤4’:根据SQL的影响程度定制基于SQL语句本身特征的检查规则,包括匹配特征和诊断方法两部分,常见的可通过正则表达式对SQL语句进行特征模型匹配,按匹配到的特征进行检查诊断。
例如:全表删除的特征模型正则表达式:
DELETE\s+FROM\s+\w+(\s+\w+){0,1};
检查诊断操作:从统计视图user_tables中查询表包含的数据块数量BLOCKS,当BLOCKS大于阀值(可通过主控单元1配置),系统建议改用TRUNCATE的方式进行删除,否则忽略影响。
步骤5’:根据SQL的影响程度定制基于SQL语句执行计划特征的检查规则,包括匹配特征和诊断方法两部分,此步骤对执行计划进行特征模型匹配,按匹配到的特征进行检查诊断。例如:全表扫描特征模型:
正则表达式:TABLE ACCESS FULL
检查诊断操作:
1)、查询数据增长情况表,获取涉及全表扫描的表的数据块数量及月增长速率,按照下表3确定影响级别。
表3
2)、如果1)中结果非“忽略”级别,则取全表扫描表对象的条件字段,依次检查表对象的索引是否包含该字段,如果表对象的所有索引均未包含该字段,则定位原因为索引未包含条件字段。
3)、依次通过统计表检查条件字段的选择性,比较不同字段选择性,即字段取不同值的个数的多少,以多者为建议索引字段。
步骤6’:更新分析表记录状态为完成,同时将上述步骤3’、步骤4’、步骤5’的结果更新到分析明细表。
步骤104):根据评估模型,对所述分析明细表中记录的结果进行评估。
在本步骤中,包括两种评估方法。其中,第一种方法为:
根据评估模型,对所述分析明细表中记录的结果进行评估。
所述评估模型用于比较新、旧完整版本程序的性能差异;其中,所述评估模型的表达式为:
Dall=(Wnew-Wold/Wold)×100%
式中,Dall表示新完整版本程序相对旧完整版本程序整体消耗增加比例;Wnew、Wold:分别是新、旧完整版本性能评估值。
在这种方法中,可以实现两种方式的版本性能差异评估。场景一:分析比较前后版本完整版本的差异;对Wold、Wnew的计算分别涉及数据库的所有程序单元的所有SQL语句,常用于程序发生大量修改或者数据量变化较大的情形。场景二:分析比较前后版本增量版本的差异;对Wold、Wnew的计算仅涉及检查范围的程序单元的所有SQL语句,常用于程序少量修改或者数据量比较稳定的情形。
第二种方法为:所述评估模型用于版本程序性能评估;其中,所述评估模型的表达式为:
式中,i表示SQL语句的序列数,Ci表示第i个SQL语句的执行成本,从所述分析明细表中获取;Qi表示第i个SQL语句的执行频率,从所述参数中的程序单元调度频率表中获取;n表示需评估的SQL语句的条数。
在本技术方案中,可以将步骤104评估的结果生成文件形式提供给用户。比如:将整体评估结果和存在问题的SQL明细以文档形式输出或输出到主控单元1的用户交互界面。存在问题的SQL明细包括以下基本要素:SQL的位置(程序单元名、子单元名)、未标准化的原始SQL、性能风险等级、存在问题或初步诊断结果等。
如图2所示,为本发明提出的一种数据库SQL效率检测装置的框图。包括:
参数配置单元201,用于配置参数;
在本实施例中,所述参数配置单元配置的参数包括:目标应用数据库的IP、端口、用户、密码、实例、检查范围、程序单元调度频率表中的调度频率以及操作类型。
SQL采集单元202,用于根据所述参数获取待检测程序的程序源码,对所述程序源码进行解析,获得SQL语句,将所述SQL语句与历史基线表比对,确定待分析的SQL语句;
分析单元203,用于对所述待分析的SQL语句进行分析,将结果记录在分析明细表中;
评估单元204,用于根据评估模型,对所述分析明细表中记录的结果进行评估。
在本实施例中,如图3所示,为检测装置中SQL采集单元的功能框图。包括:
程序源码范围确定模块2021,用于根据所述参数获得程序源码范围;
程序源码获取模块2022,用于从所述程序源码范围中读入程序源码;
SQL语句确定模块2023,用于根据所述程序源码对应的程序语言规则,对所述程序源码进行解析,获得SQL语句;
格式化模块2024,用于在保留识别SQL语句的必要特征的基础上,对所述SQL语句进行格式化;
特征提取模块2025,用于根据格式化后的SQL语句获得SQL语句的特征ID;
待分析的SQL语句确定模块2026,用于根据SQL语句的特征ID和SQL的位置信息,对历史基线表进行查询;如果在所述历史基线表中没有查询到相应的SQL语句,则相应的SQL语句为待分析的SQL语句。
如图4所示,为检测装置中分析单元的功能框图。包括:
执行计划获取模块2031,用于将标准格式化后的待分析SQL语句通过JDBC提交目标应用数据库,获取执行计划;
执行成本确定模块2032,用于从所述执行计划中获取单次执行成本Ci,根据SQL语句所在的程序单元的调用频率表中获取调用频率Qi,根据单次执行成本Ci与调用频率Qi确定单位时间总成本,根据单位时间总成本判断SQL的影响程度;
第一检查诊断模块2033,用于根据SQL的影响程度定制的基于SQL语句本身特征的检查规则,对待分析的SQL语句进行特征模型匹配,按匹配到的特征进行检查诊断;
第二检查诊断模块2034,用于根据SQL的影响程度定制的基于SQL语句执行计划特征的检查规则,对所述执行计划进行特征模型匹配,按匹配到的特征进行检查诊断。
以下是应用本发明的一个实施例:版本涉及对存储过程PROC_AI4405等进行修改,这里仅以PROC_AI4405作为例子进行说明。
修改前的功能是根据传入参数手机号码和业务日期,查询返回业务申请编号APP_NUMBER。
修改后的功能是参数增加身份证号,如果传入的手机号码为空,则根据用户身份证号,从用户表中查出手机号码,再根据传入的手机号码和业务日期,查询返回业务申请编号APP_NUMBER。
修改前存储过程源码如下:
修改后存储过程源码如下:
应用本发明的方法,针对此次版本修改进行评估验证,具体步骤如下:
1、用户确定本次修改范围,首先维护检查范围为"PROC_AI4405;..."(通常可以由版本管理工具导出修改清单,这里不赘述)
2、投产前,用户选择“创建历史基线”,提交执行。
3、连接到目标应用的数据库,获取PROC_AI4405的源码。
4、解析出PROC_AI4405各变量的类型(oracle存储过程不区分大小写),见下表4。
表4
变量名称 | 类型 |
I_PHONE_NUMBER | VARchar2 |
I_TRADE_DATE | VARchar2 |
O_RETCODE | VARchar2 |
O_APP_NUMBER | VARchar2 |
5、根据语法识别到SQL如下语句:
SELECT APP_NUMBER into O_APP_NUMBER FROM TRADE_APP_INFO T WHERET.PHONE_NUM=I_PHONE_NUMBER and APP_DATE=I_TRADE_DATE;
6、对SQL进行标准格式化
1)去除变量赋值部分“into O_APP_NUMBER”语句转换为如下:
SELECT APP_NUMBER FROM TRADE_APP_INFO T WHERE
T.PHONE_NUM=I_PHONE_NUMBER and APP_DATE=I_TRADE_DATE
2)转换为大写,此处涉及“and”字符串
SELECT APP_NUMBER FROM TRADE_APP_INFO T WHERE T.PHONE_NUM=I_PHONE_NUMBER AND APP_DATE=I_TRADE_DATE
3)替换变量为绑定变量格式
由上述步骤4,可以知道I_PHONE_NUMBER、I_TRADE_DATE均为对应字符型VARCHAR2,根据变量替换规则表进行替换,结果如下
SELECT APP_NUMBER FROM TRADE_APP_INFO T WHERE
T.PHONE_NUM=:V1 AND APP_DATE=:V2
4)对无意义的空白字符进行格式化,统一任意多个空白字符为单个空白字符。处理后语句如下:
SELECT APP_NUMBER FROM TRADE_APP_INFO T WHERE T.PHONE_NUM=:V1ANDAPP_DATE=:V2
7、根据格式化后的标准语句生成SQL特征ID(SQL_ID),此处使用MD5,
8、将结果存入历史基线表中,主要信息如下表5。
表5
9、投产后,检查评估操作。
10、通过目标应用的数据库,获取版本投产后PROC_AI4405的源码。
11、解析出PROC_AI4405各变量的类型(oracle存储过程不区分大小写),见下表6。
表6
变量名称 | 类型 | 备注说明 |
I_PHONE_NUMBER | VARchar2 | |
I_TRADE_DATE | VARchar2 | |
I_IDENTITY_ID | VARchar2 | 版本新增的输入变量 |
O_RETCODE | VARchar2 | |
O_APP_NUMBER | VARchar2 | |
V_PHONE_NUMBER | VARchar2 | 版本新增的新增过程变量 |
12、根据语法识别到2个SQL语句,其中语句B与投产前版本在变量使用上有变化,如下:
语句A:
SELECT phone_num INTO V_PHONE_NUMBER
FROM USER_INFO T
WHERE IDENTITY_NUM=I_IDENTITY_ID
语句B:
SELECT APP_NUMBER INTO O_APP_NUMBER FROM TRADE_APP_INFO T WHERET.PHONE_NUM=V_PHONE_NUMBER AND APP_DATE=I_TRADE_DATE
13、对SQL进行标准格式化
1)去除变量赋值部分,语句转换为如下:
语句A:
SELECT phone_num
FROM USER_INFO T
WHERE IDENTITY_NUM=I_IDENTITY_ID
语句B:
SELECT APP_NUMBER FROM TRADE_APP_INFO T WHERE T.PHONE_NUM=V_PHONE_NUMBER AND APP_DATE=I_TRADE_DATE
2)转换为大写,此处涉及“phone_num”,“and”字符串
语句A:
SELECT PHONE_NUM
FROM USER_INFO T
WHERE IDENTITY_NUM=I_IDENTITY_ID
语句B:
SELECT APP_NUMBER FROM TRADE_APP_INFO T WHERE T.PHONE_NUM=V_PHONE_NUMBER AND APP_DATE=I_TRADE_DATE
3)替换变量为绑定变量格式
由上述步骤4,可以知道V_PHONE_NUMBER、I_TRADE_DATE、I_IDENTITY_ID均为对应字符型VARCHAR2,根据变量替换规则表进行替换,结果如下:
语句A:
SELECT PHONE_NUM
FROM USER_INFO T
WHERE IDENTITY_NUM=:V1
语句B:
SELECT APP_NUMBER FROM TRADE_APP_INFO T WHERE T.PHONE_NUM=:V1ANDAPP_DATE=:V2
4)对无意义的空白字符进行格式化,统一任意多个空白字符为单个空白字符。处理后语句如下:
语句A:
SELECT PHONE_NUM FROM USER_INFO T WHERE IDENTITY_NUM=:V1
语句B:
SELECT APP_NUMBER FROM TRADE_APP_INFO T WHERE T.PHONE_NUM=:V1ANDAPP_DATE=:V2
14、根据格式化后的标准语句生成SQL特征ID,此处使用MD5。可以看到此处可以看到语句B虽然跟上个版本略有变化,但这种变化并不影响执行计划,切标准格式化后,与上个版本一致。
SQL特征ID:892E43A66B62137B9802D4D930A19458
语句B:
SQL特征ID:F2B4AA3BFA522D3141E747AABEA0CBA9
语句A:
15、针对语句A、B分别执行查询语句,从历史基线表中判断是否存在
语句A:SELECT COUNT(1)FROM HISTORY_LINE T WHERE T.SQL_ID='892E43A66B62137B9802D4D930A19458'and program_unit=’PROC_AI4405’;
返回0,表示历史基线表中不存在,需要进入下一步检查。
语句B:SELECT COUNT(1)FROM HISTORY_LINE T WHERE T.SQL_ID='F2B4AA3BFA522D3141E747AABEA0CBA9'and program_unit=’PROC_AI4405’;
返回1,表示历史基线表中存在此SQL,无需要进一步检查。
16、对待分析SQL,依次执行步骤17、18、19;
17、通过JDBC连接到目标应用数据库,生成执行计划,如下:
18、获取总的执行成本COST,记为Ci=1961,根据SQL所在的源程序单元查询程序单元调用频率表,取得SQL每分钟的执行频率Qi=1000,COST合计=Ci×Qi=1961*1000=1961000,参照以下表7获得影响级别“严重”。
表7
登记分析明细表,内容如下表8:
表8
ID | 问题类型 | 问题描述 |
语句A | 分钟执行成本高 | COST=1961,频率=1000,达到“严重”级别 |
获取总的执行成本COST,遍历执行计划匹配特征模型,匹配到“TABLE ACCESSFULL”,即全表扫描。
从存储单元的数据增长情况表查询表对象USER_INFO的表的数据块数量(5000)和增长速度(15%),依照下表9获取影响级别“警告”。
表9
登记分析明细表,内容如下表10:
表10
19、更新语句A的分析表状态为分析完毕。
20、对所有SQL语句分析完毕之后对整个版本进行评估。
21、按照版本性能差异评估方法,计算出整体评估值
Dall=100%×(Wnew-Wold)/Wold
=100%*((50*1000+1961*1000)-50*1000)/(50*1000)
=3922%
即差异39倍,在本次小样本的修改中,影响明显。这里仅为举例说明,样本比较小,故差异比较大。
22、最后输出分析的结果。
由上述实施例可知,本技术方案能够在版本安装后、且实际业务上线之前,快速检查评估新版本程序的SQL效率情况,提高版本升级的运行安全和性能。
以上具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (8)
1.一种数据库SQL效率检测方法,其特征在于,包括:
配置参数;
根据所述参数获取待检测程序的程序源码,对所述程序源码进行解析,获得SQL语句,将所述SQL语句与历史基线表比对,确定待分析的SQL语句;
对所述待分析的SQL语句进行分析,将结果记录在分析明细表中;
根据评估模型,对所述分析明细表中记录的结果进行评估;
其中,所述确定待分析的SQL语句的步骤包括:
根据所述参数获得程序源码范围;
从所述程序源码范围中读入程序源码;
根据所述程序源码对应的程序语言规则,对所述程序源码进行解析,获得SQL语句;
在保留识别SQL语句的必要特征的基础上,对所述SQL语句进行格式化;
根据格式化后的SQL语句获得SQL语句的特征ID;
根据SQL语句的特征ID和SQL的位置信息,对历史基线表进行查询;如果在所述历史基线表中没有查询到相应的SQL语句,则相应的SQL语句为待分析的SQL语句;
所述对所述待分析的SQL语句进行分析的步骤包括:
将标准格式化后的待分析SQL语句通过JDBC提交目标应用数据库,获取执行计划;
从所述执行计划中获取单次执行成本Ci,根据SQL语句所在的程序单元的调用频率表中获取调用频率Qi,根据单次执行成本Ci与调用频率Qi确定单位时间总成本,根据单位时间总成本判断SQL的影响程度;
根据SQL的影响程度定制的基于SQL语句本身特征的检查规则,对待分析的SQL语句进行特征模型匹配,按匹配到的特征进行检查诊断;
根据SQL的影响程度定制的基于SQL语句执行计划特征的检查规则,对所述执行计划进行特征模型匹配,按匹配到的特征进行检查诊断。
2.如权利要求1所述的方法,其特征在于,所述参数包括:目标应用数据库的IP、端口、用户、密码、实例、检查范围、程序单元调度频率表中的调度频率以及操作类型。
3.如权利要求1的所述方法,其特征在于,所述评估模型用于比较新、旧完整版本程序的性能差异;其中,所述评估模型的表达式为:
Dall=(Wnew-Wold/Wold)×100%
式中,Dall表示新完整版本程序相对旧完整版本程序整体消耗增加比例;Wnew、Wold:分别是新、旧完整版本性能评估值。
4.如权利要求1所述的方法,其特征在于,所述评估模型用于版本程序性能评估;其中,所述评估模型的表达式为:
式中,i表示SQL语句的序列数,Ci表示第i个SQL语句的执行成本,从所述分析明细表中获取;Qi表示第i个SQL语句的执行频率,从所述参数中的程序单元调度频率表中获取;n表示需评估的SQL语句的条数。
5.一种数据库SQL效率检测装置,其特征在于,包括:
参数配置单元,用于配置参数;
SQL采集单元,用于根据所述参数获取待检测程序的程序源码,对所述程序源码进行解析,获得SQL语句,将所述SQL语句与历史基线表比对,确定待分析的SQL语句;
分析单元,用于对所述待分析的SQL语句进行分析,将结果记录在分析明细表中;
评估单元,用于根据评估模型,对所述分析明细表中记录的结果进行评估;
其中,所述SQL采集单元包括:
程序源码范围确定模块,用于根据所述参数获得程序源码范围;
程序源码获取模块,用于从所述程序源码范围中读入程序源码;
SQL语句确定模块,用于根据所述程序源码对应的程序语言规则,对所述程序源码进行解析,获得SQL语句;
格式化模块,用于在保留识别SQL语句的必要特征的基础上,对所述SQL语句进行格式化;
特征提取模块,用于根据格式化后的SQL语句获得SQL语句的特征ID;
待分析的SQL语句确定模块,用于根据SQL语句的特征ID和SQL的位置信息,对历史基线表进行查询;如果在所述历史基线表中没有查询到相应的SQL语句,则相应的SQL语句为待分析的SQL语句;
所述分析单元包括:
执行计划获取模块,用于将标准格式化后的待分析SQL语句通过JDBC提交目标应用数据库,获取执行计划;
执行成本确定模块,用于从所述执行计划中获取单次执行成本Ci,根据SQL语句所在的程序单元的调用频率表中获取调用频率Qi,根据单次执行成本Ci与调用频率Qi确定单位时间总成本,根据单位时间总成本判断SQL的影响程度;
第一检查诊断模块,用于根据SQL的影响程度定制的基于SQL语句本身特征的检查规则,对待分析的SQL语句进行特征模型匹配,按匹配到的特征进行检查诊断;
第二检查诊断模块,用于根据SQL的影响程度定制的基于SQL语句执行计划特征的检查规则,对所述执行计划进行特征模型匹配,按匹配到的特征进行检查诊断。
6.如权利要求5所述的装置,其特征在于,所述参数配置单元配置的参数包括:目标应用数据库的IP、端口、用户、密码、实例、检查范围、程序单元调度频率表中的调度频率以及操作类型。
7.如权利要求5所述的装置,其特征在于,所述评估单元用于比较新、旧完整版本程序的性能差异;其中,所述评估单元的评估模型的表达式为:
Dall=(Wnew-Wold/Wold)×100%
式中,Dall表示新完整版本程序相对旧完整版本程序整体消耗增加比例;Wnew、Wold:分别是新、旧完整版本性能评估值。
8.如权利要求5所述的装置,其特征在于,所述评估单元用于版本程序性能评估;其中,所述评估单元的评估模型的表达式为:
式中,i表示SQL语句的序列数,Ci表示第i个SQL语句的执行成本,从所述分析明细表中获取;Qi表示第i个SQL语句的执行频率,从所述参数中的程序单元调度频率表中获取;n表示需评估的SQL语句的条数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610851274.0A CN106445795B (zh) | 2016-09-26 | 2016-09-26 | 一种数据库sql效率检测方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610851274.0A CN106445795B (zh) | 2016-09-26 | 2016-09-26 | 一种数据库sql效率检测方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106445795A CN106445795A (zh) | 2017-02-22 |
CN106445795B true CN106445795B (zh) | 2019-03-22 |
Family
ID=58170186
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610851274.0A Active CN106445795B (zh) | 2016-09-26 | 2016-09-26 | 一种数据库sql效率检测方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106445795B (zh) |
Families Citing this family (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108984374B (zh) * | 2017-06-01 | 2021-05-07 | 腾讯科技(深圳)有限公司 | 一种数据库性能的测试方法和系统 |
CN107688531B (zh) * | 2017-06-20 | 2019-02-22 | 平安科技(深圳)有限公司 | 数据库集成测试方法、装置、计算机设备及存储介质 |
CN107633030B (zh) * | 2017-09-04 | 2020-11-27 | 深圳市华傲数据技术有限公司 | 基于数据模型的信用评估方法及装置 |
CN107766466A (zh) * | 2017-09-29 | 2018-03-06 | 上海望友信息科技有限公司 | 数据类型的识别方法、系统、计算机可读存储介质及设备 |
CN108197306B (zh) * | 2018-01-30 | 2020-08-25 | 平安科技(深圳)有限公司 | Sql语句处理方法、装置、计算机设备和存储介质 |
CN110633290A (zh) * | 2018-06-20 | 2019-12-31 | 苏宁易购集团股份有限公司 | 一种sql语句分析方法及分析装置 |
CN108984408B (zh) * | 2018-07-13 | 2021-11-30 | 中国银行股份有限公司 | 一种应用系统中sql代码的检测方法和装置 |
CN109344166B (zh) * | 2018-08-14 | 2023-06-09 | 中国平安人寿保险股份有限公司 | 数据库的监控方法、计算机可读存储介质和终端设备 |
CN109213664A (zh) * | 2018-08-23 | 2019-01-15 | 北京小度信息科技有限公司 | Sql语句的性能分析方法、装置、存储介质和电子设备 |
CN109240901B (zh) * | 2018-08-28 | 2023-01-17 | 北京星选科技有限公司 | 性能分析方法、性能分析装置、存储介质和电子设备 |
CN110888909B (zh) * | 2018-09-07 | 2022-09-23 | 大唐移动通信设备有限公司 | 一种评估内容的数据统计处理方法及装置 |
CN109165130B (zh) * | 2018-09-30 | 2022-01-25 | 福建星瑞格软件有限公司 | 一种验证解码数据库封包的测试方法及装置 |
CN111046059B (zh) * | 2019-12-09 | 2023-06-30 | 中国建设银行股份有限公司 | 基于分布式数据库集群的低效sql语句分析方法及系统 |
CN111090671B (zh) * | 2019-12-19 | 2023-06-23 | 山大地纬软件股份有限公司 | 消除数据库中空字符串和无效字符串差异的方法和装置 |
CN111258989B (zh) * | 2020-02-14 | 2023-04-07 | 腾讯云计算(长沙)有限责任公司 | 数据库迁移评估方法、装置、存储介质和计算机设备 |
CN111309581B (zh) * | 2020-02-28 | 2023-09-12 | 中国工商银行股份有限公司 | 一种数据库升级场景下的应用性能检测方法及装置 |
CN113360362B (zh) * | 2020-03-03 | 2024-06-18 | 北京沃东天骏信息技术有限公司 | 一种动态sql效率检查方法及插件 |
CN112069202A (zh) * | 2020-09-09 | 2020-12-11 | 上海携程商务有限公司 | 基于追踪技术的sql性能分析方法、系统、设备及介质 |
CN114443009A (zh) * | 2020-10-30 | 2022-05-06 | 菜鸟智能物流控股有限公司 | 一种数据库代码的处理方法、装置、设备和机器可读介质 |
CN112395305B (zh) * | 2020-11-11 | 2024-04-16 | 中国人寿保险股份有限公司 | 一种sql语句分析方法、装置、电子设备及存储介质 |
CN114356896B (zh) * | 2022-03-18 | 2022-07-01 | 中信建投证券股份有限公司 | 一种数据库检测方法及装置 |
CN117171367B (zh) * | 2023-09-26 | 2024-04-12 | 北京泰策科技有限公司 | 一种对不同数据库表的指定属性值的规范检测方法 |
CN117827684B (zh) * | 2024-03-05 | 2024-05-24 | 数翊科技(北京)有限公司武汉分公司 | 数据计算作业的预警方法、装置、电子设备及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102053961A (zh) * | 2009-10-27 | 2011-05-11 | 中兴通讯股份有限公司 | Sql语句的检验方法、装置及提高数据库可靠性的系统 |
CN103514166A (zh) * | 2012-06-15 | 2014-01-15 | 阿里巴巴集团控股有限公司 | Sql检查方法与装置 |
CN103902565A (zh) * | 2012-12-26 | 2014-07-02 | 阿里巴巴集团控股有限公司 | 一种数据访问关系的确定方法及装置 |
CN105808413A (zh) * | 2016-03-02 | 2016-07-27 | 上海新炬网络信息技术有限公司 | 基于业务流程可视化的sql性能监控方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7979384B2 (en) * | 2003-11-06 | 2011-07-12 | Oracle International Corporation | Analytic enhancements to model clause in structured query language (SQL) |
-
2016
- 2016-09-26 CN CN201610851274.0A patent/CN106445795B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102053961A (zh) * | 2009-10-27 | 2011-05-11 | 中兴通讯股份有限公司 | Sql语句的检验方法、装置及提高数据库可靠性的系统 |
CN103514166A (zh) * | 2012-06-15 | 2014-01-15 | 阿里巴巴集团控股有限公司 | Sql检查方法与装置 |
CN103902565A (zh) * | 2012-12-26 | 2014-07-02 | 阿里巴巴集团控股有限公司 | 一种数据访问关系的确定方法及装置 |
CN105808413A (zh) * | 2016-03-02 | 2016-07-27 | 上海新炬网络信息技术有限公司 | 基于业务流程可视化的sql性能监控方法 |
Non-Patent Citations (1)
Title |
---|
SQL Server数据库应用程序性能优化方法;谷震离;《计算机工程与设计》;20060816;第27卷(第15期);2884-2886 |
Also Published As
Publication number | Publication date |
---|---|
CN106445795A (zh) | 2017-02-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106445795B (zh) | 一种数据库sql效率检测方法及装置 | |
CN108256074B (zh) | 校验处理的方法、装置、电子设备和存储介质 | |
CN106201643B (zh) | 数据解析方法及装置 | |
CN111210842B (zh) | 语音质检方法、装置、终端及计算机可读存储介质 | |
CN106980637A (zh) | Sql审核方法和装置 | |
CN109002391A (zh) | 自动检测嵌入式软件接口测试数据的方法 | |
US8930267B1 (en) | Automated transactions clearing system and method | |
US9910870B2 (en) | System and method for creating data models from complex raw log files | |
CN105373472B (zh) | 一种基于数据库的统计准确性的测试方法及测试系统 | |
CN102497435A (zh) | 数据业务数据的分发方法及装置 | |
CN111736865B (zh) | 一种数据库升级方法及系统 | |
CN111930615A (zh) | 代码质量评估方法及装置 | |
CN113806343B (zh) | 一种车联网数据质量的评估方法和系统 | |
CN107943785B (zh) | 一种基于大数据的pdf文档处理方法及装置 | |
CN110609982A (zh) | Pdf文件数据解析系统及方法 | |
CN113821554A (zh) | 一种实现异构数据库数据采集的方法 | |
CN110956030B (zh) | 变电站远动机组态配置信息比对方法及系统 | |
CN112486841A (zh) | 埋点采集数据校验的方法及装置 | |
WO2023180343A1 (en) | Analysing communications data | |
CN108959574A (zh) | 一种测试数据分析方法及系统 | |
CN101425141B (zh) | 图像识别装置和图像识别方法 | |
CN106294433B (zh) | 设备信息处理方法及装置 | |
CN112181903A (zh) | 一种用于控制板的文件检索对比系统 | |
CN111352818A (zh) | 应用程序性能分析方法、装置、存储介质及电子设备 | |
CN113377801A (zh) | 数据检验方法、装置、电子设备及计算机存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |