CN109542868A - 定位异常sql语句的方法、装置、电子设备及存储介质 - Google Patents

定位异常sql语句的方法、装置、电子设备及存储介质 Download PDF

Info

Publication number
CN109542868A
CN109542868A CN201811142669.9A CN201811142669A CN109542868A CN 109542868 A CN109542868 A CN 109542868A CN 201811142669 A CN201811142669 A CN 201811142669A CN 109542868 A CN109542868 A CN 109542868A
Authority
CN
China
Prior art keywords
sql statement
sql
statement
execution
branches
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
CN201811142669.9A
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.)
Ping An Life Insurance Company of China Ltd
Original Assignee
Ping An Life Insurance Company of China 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 Ping An Life Insurance Company of China Ltd filed Critical Ping An Life Insurance Company of China Ltd
Priority to CN201811142669.9A priority Critical patent/CN109542868A/zh
Publication of CN109542868A publication Critical patent/CN109542868A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

一种定位异常SQL语句的方法,包括:确定包存储过程中需调用的入口语句;根据所述入口语句采集预设周期内执行存储过程的SQL语句的历史消息;从所述历史消息中抓取所述SQL语句中执行次数靠前的预设条数SQL语句;以及分析所述预设条数SQL语句,定位出效率异常的SQL语句。本发明还提供一种定位异常SQL语句的装置、电子设备及存储介质。本发明可以根据SQL语句执行的历史消息定位效率异常的SQL语句,能及时发现并定位数据库pkg过程运行效率问题,从而实现业务过程优化。

Description

定位异常SQL语句的方法、装置、电子设备及存储介质
技术领域
本发明涉及计算机技术领域,具体涉及一种定位异常SQL语句的方法、装置、电子设备及存储介质。
背景技术
数据库是指长期保存在计算机的存储设备上、并按照某种模型组织起来的、可以被各种用户或应用共享的数据的集合。数据库在日常工作和生产中的作用日趋显著,相关的数据库技术也得到迅猛发展。
目前,企业级信息系统的体系架构一般至少包括:展示层、业务逻辑层、数据层等多个层次,其中数据层一般采用成熟的数据库产品,如Oracle数据库。Oracle数据库是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。广泛应用于各行各业,如政府、交通、公安、电信、金融、能源等部门,并已逐渐成为企业信息化建设的重要数据库平台。信息系统的各类应用通过数据库访问语句,如结构化查询语言(SQL,Structured Query Language),访问数据库。企业中的业务系统大都需要与数据库进行交互,保存数据或查询结果,这些操作底层都是通过数据库的结构化查询语言(StructuredQuery Language,SQL)语句来完成的。
随着系统业务的复杂性和数据量的增大,SQL语句的执行效率越来越成为系统性能的瓶颈。并且通常来讲数据库80%的性能问题是由于低效的结构化查询语言(Structured Query Language,简称SQL)引起的。因此,如何能定位系统中执行效率异常的SQL语句成为了亟待解决的问题。
发明内容
鉴于以上内容,有必要提出一种定位异常SQL语句的方法、装置、电子设备及存储介质,可以及时发现并定位数据库pkg过程运行效率问题。
本发明的第一方面提供一种定位异常SQL语句的方法,所述方法包括:
确定包存储过程中需调用的入口语句;
根据所述入口语句采集预设周期内执行存储过程的SQL语句的历史消息;
从所述历史消息中抓取所述SQL语句中执行次数靠前的预设条数SQL语句;以及
分析所述预设条数SQL语句,定位出效率异常的SQL语句。
优选地,所述SQL语句的历史消息包括所述SQL语句的sql_id、单次执行时间、执行总时长及执行次数,所述根据所述入口语句采集预设周期内正在执行存储过程的SQL语句的历史消息的步骤包括:
采集预设周期内正在执行存储过程的SQL语句,并输出所述SQL语句的sql_id;
根据所述sql_id获取所述预设周期内所述SQL语句的单次执行时间、执行总时长及执行次数。
优选地,所述分析所述预设条数SQL语句,定位出效率异常的SQL语句的步骤包括:
根据所述历史消息中的执行次数中每次执行时的单次执行时间生成一以执行次数为横轴以单次执行时间为纵轴的曲线图;
当所述曲线图中所述SQL语句当前执行时间与平均执行时间之间的差值的绝对值大于等于预设值时,确认所述SQL语句在执行过程中出现效率异常。
优选地,从所述历史消息中抓取所述SQL语句中执行次数靠前的预设条数SQL语句的方法包括:
通过查询V$SQLAREA或V$SQL的EXECUTIONS来查看所述SQL语句的执行次数,再抓取所述SQL语句中执行次数靠前的预设条数SQL语句;
通过DBA_HIST_SQLSTAT关联DBA_HIST_SNAPSHOT找出所述SQL语句的执行次数,再抓取所述SQL语句中执行次数靠前的预设条数SQL语句;及
通过AWR报告查看所述SQL语句的执行次数后抓取所述SQL语句中执行次数靠前的预设条数SQL语句中的至少一种。
优选地,所述方法还包括:
当定位到效率异常的SQL语句时,通过查看执行计划变更查找引起所述SQL语句效率异常的原因。
优选地,通过查看执行计划变更查找引起所述SQL语句效率异常的原因包括:
根据sql_id的值来获得所述sql_id对应的sql语句;
查询所述sql_id历史执行信息,确认是否有执行计划变更;
当确认有执行计划变更时,比对变更前后的执行计划,得到变更前后执行计划的不同点;及
根据变更前后执行计划的不同点查找原因。
优选地,所述方法还包括:
当定位到效率异常的SQL语句时,通过绑定变量来提升所述SQL语句执行效率。
本发明的第二方面提供一种定位异常SQL语句的装置,所述装置包括:
确定模块,用于确定包存储过程中需调用的入口语句;
采集模块,用于根据所述入口语句采集预设周期内执行存储过程的SQL语句的历史消息;
处理模块,用于从所述历史消息中抓取所述SQL语句中执行次数靠前的预设条数SQL语句;以及
定位模块,用于分析所述预设条数SQL语句,定位出效率异常的SQL语句。
本发明的第三方面提供一种电子设备,所述电子设备包括处理器和存储器,所述处理器用于执行所述存储器中存储的计算机程序时实现所述定位异常SQL语句的方法。
本发明的第四方面提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现所述定位异常SQL语句的方法。
本发明所述的定位异常SQL语句的方法、装置、电子设备及存储介质。可以根据SQL语句执行的历史消息定位效率异常的SQL语句,及时发现并定位数据库pkg过程运行效率问题,帮助解决数据库执行效率低下而影响业务系统运行的问题,故障定位精准度变高,运维成本大幅度下降。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1是本发明实施例一提供的定位异常SQL语句的方法的流程图。
图2是本发明实施例一提供的定位异常SQL语句的方法中步骤S2的细化流程图。
图3是本发明实施例二提供的定位异常SQL语句的装置的功能模块图。
图4是本发明实施例三提供的电子设备的示意图。
如下具体实施方式将结合上述附图进一步说明本发明。
具体实施方式
为了能够更清楚地理解本发明的上述目的、特征和优点,下面结合附图和具体实施例对本发明进行详细描述。需要说明的是,在不冲突的情况下,本发明的实施例及实施例中的特征可以相互组合。
在下面的描述中阐述了很多具体细节以便于充分理解本发明,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
除非另有定义,本文所使用的所有的技术和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同。本文中在本发明的说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在于限制本发明。
本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”和“第三”等是用于区别不同对象,而非用于描述特定顺序。此外,术语“包括”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。
本发明实施例的定位异常SQL语句的方法应用在一个或者多个电子设备中。所述定位异常SQL语句的方法也可以应用于由电子设备和通过网络与所述电子设备进行连接的服务器所构成的硬件环境中。网络包括但不限于:广域网、城域网或局域网。本发明实施例的定位异常SQL语句方法可以由服务器来执行,也可以由电子设备来执行;还可以是由服务器和电子设备共同执行。
所述对于需要进行定位异常SQL语句的方法的电子设备,可以直接在电子设备上集成本发明的方法所提供的定位功能,或者安装用于实现本发明的方法的客户端。再如,本发明所提供的方法还可以以软件开发工具包(Software Development Kit,SDK)的形式运行在服务器等设备上,以SDK的形式提供定位异常SQL语句功能的接口,电子设备或其他设备通过提供的接口即可实现对异常SQL语句的定位。
实施例一
图1是本发明实施例一提供的定位异常SQL语句的方法的流程图。根据不同的需求,所述流程图中的执行顺序可以改变,某些步骤可以省略。
步骤S1,确定包(package)存储过程中需调用的入口语句。
现有技术中,PL/SQL为了满足程序模块化的需要,除了块(block)和子程序结构外,还引入了包(package)的构造。
包是一种数据库对象,将逻辑上相关的PL/SQL类型、对象和子程序组合成一个更大的单位。包有两个部分:包说明(specification)和包体(body)。包说明部分是为应用程序的接口,它申明类型、常量、例外、游标和可用的子程序。包体定义游标和子程序,实现说明。应用程序仅对包说明中的申明是可见的和可存取。如果ORACLE具有Procedure选件,包可以编译、存贮在ORACLE数据库中,其内容可为许多应用共享。当用户第一次调用一包装的子程序时,整个包装入到内存,所以在以后对包中子程序调用时,不再需要I/O操作,故包可提高效率和改进性能。
在本实施方式中,通过在v$sql中查找对应数据库的包存储过程的入口语句。
例如,开发提供调用网销package如下:
undw_ap_rule_package_sub02.check_netsale_rule_test(p_ctrl_id in
uws_rulecheck_app_form.ctrl_id%type,
p_unpass_flag out varchar2,
p_update_appnos out varchar2)
在v$sql表中找到对应的包存储过程入口语句如下:
BEGIN undw_ap_rule_package_sub02.check_netsale_rule_test(:1,:2,:3);END;
步骤S2,根据所述入口语句采集预设周期内执行存储过程的SQL语句的历史消息。
在本实施方式中,所述SQL语句的历史消息包括,但不限于,所述SQL语句的sql_id、单次执行时间、执行总时长及执行次数。
具体地,如图2所示,根据所述入口语句采集所述预设周期内正在执行存储过程的SQL语句的历史消息的步骤包括:
步骤S21,采集预设周期内正在执行存储过程的SQL语句,并输出所述SQL语句的sql_id。
具体地,通过V$ACTIVE_SESSION_HISTORY和gv$session采集预设周期内(采集周期可自行设定,例如30分钟)正在执行存储过程的SQL语句输出sql_id和TIME_TAKEN。所述V$ACTIVE_SESSION_HISTORY表示近几个小时内活动的会话信息,所述gv$session表示当前连接数据库的会话信息。
可以理解的是,v$active_session_history每秒钟记录当前各会话的情况,一般只会保留过去几个小时的数据,历史的数据会归档到dba_hist_active_sess_history表中,dba_hist_active_sess_history表不会归档所有v$active_session_history视图的内容,只有数据库快照snapshot认为对数据库贡献较高的才会归档到dba_hist_active_sess_history表中。如果需要统计历史时间段内的SQL语句,且v$active_session_history表中所述历史时间段的数据已经被归档,则可以在dba_hist_active_sess_history表中查询所述SQL语句。
步骤S22,根据所述sql_id获取所述预设周期内所述SQL语句的单次执行时间、执行总时长及执行次数。
具体地,利用v$sql(SQL语句执行效率情况当前信息)、dba_hist_sqlstat(SQL语句执行效率情况历史信息)获取过往历史所述SQL语句的单次执行时间、执行总时长及执行次数。从而关联生成SQL语句的单次执行时间、执行总时长及执行次数,并输出sql_id、执行总时长及执行次数。
步骤S3,从所述历史消息中抓取所述SQL语句中执行次数靠前的预设条数SQL语句。
在本实施方式中,可以通过以下方法抓取所述SQL语句中执行次数靠前的预设条数SQL语句。
在一实施方式中,可以通过查询V$SQLAREA或V$SQL的EXECUTIONS来查看所述SQL语句的执行次数。但是所述执行次数的有效性需要结合FIRST_LOAD_TIME来判断。由于V$SQLAREA或V$SQL中不保存历史数据,具有一定的时效性,所以如果要查询很久以前的某个SQL执行次数,所述方法是办不到的。
在另一实施方式中,可以通过DBA_HIST_SQLSTAT关联DBA_HIST_SNAPSHOT(快照)找出所述SQL语句的执行次数。所述部分快照的方法可能会存在捕获不到所述SQL语句的情况,这样也就无法通过所述SQL语句查看执行次数。不过可以理解的是,执行越频繁的语句,也越容易被SNAPSHOT抓取到。
在另一实施方式中,可以通过AWR报告查看所述SQL语句的执行次数。
步骤S4,分析所述预设条数SQL语句,定位出效率异常的SQL语句。
在一实施方式中,可以根据所述历史消息中的执行次数与单次执行时间来定位效率异常的SQL语句。具体而言,可以根据执行次数中每次对应的单次执行时间生成一以执行次数为横轴以每次对应的单次执行时间为纵轴的曲线图。由此,可以从曲线图中观察SQL语句执行的时间变化波动情况,当所述曲线图中所述SQL语句当前执行时间与平均执行时间之间的差值的绝对值大于等于预设值时,确认所述SQL语句在执行过程中出现效率异常。当所述曲线图中所述SQL语句当前执行时间与平均执行时间之间的差值的绝对值小于所述预设值时,确认所述SQL语句无异常。所述平均执行时间为执行总时长与执行次数之间的比值。
在另一实施方式中,可以根据所述预设条数SQL语句的历史消息,结合执行计划来定位所述效率异常的SQL语句。
一般地,数据库系统需要根据与访问任务对应的SQL语句,制定如何达到所述访问任务的目的的执行过程,这个过程被称为“执行计划”(execution plan),“执行计划”是一个可以用来被执行以返回用户所希望的结果的程序实例。在本实施方式中,可以结合执行计划查看所述预设条数SQL语句是否可以返回用户希望的结果来确定所述SQL语句是否异常。
当所述SQL语句通过执行计划返回的结果与用户预设的期望结果不一致时,确认所述SQL语句异常;
当所述SQL语句通过执行计划返回的结果与用户预设的期望结果一致时,确认所述SQL语句正常。
优选地,所述方法还可以查找所述SQL语句出现异常的原因。
具体地,当定位到异常SQL语句时,还可以查找所述SQL语句出现异常的原因。例如,当定位到异常SQL语句时,可以通过查看执行计划变更来查找引起所述SQL异常的原因,具体而言包括:
根据sql_id的值来获得此sql_id对应的sql语句;
查询此sql_id历史执行信息,确认是否有执行计划变更;
查询并比对变更前后的执行计划,得到更前后执行计划的不同点;例如,索引不同。
根据变更前后执行计划的不同点查找原因。
优选地,所述方法还可以提升所述SQL语句执行效率。当定位到异常SQL语句时,所述方法还可以通过绑定变量(Bind Any Variables)来提升SQL语句执行效率。
具体而言,当客户端与数据库建立连接后,所述客户端会向数据库发出操作请求,即向数据库发送SQL语句。所述数据库在接收到这些SQL语句后,先对所述SQL语句进行hash函数运算得到一个Hash值,然后到共享池中寻找是否有和这个hash值匹配的SQL语句存在。如果找到了,所述数据库将直接使用已经存在的SQL语句的执行计划去执行当前的SQL语句,然后将执行结果返回给所述客户端。如果在共享池中没有找到相同Hash值的SQL语句,所述数据库会认为这是一条新的SQL语句,并开始对所述新的SQL语句进行解析。解析的步骤包括(1)语法解析;(2)语义解析;(3)生成执行计划;及(4)SQL语句的执行。所述生成执行计划可以分成软解析和硬解析,所述硬解析是非常耗资源的。绑定变量的本质就是本来需要做硬解析的SQL语句变成软解析,以减少数据库花费在SQL语句解析上的时间和资源。绑定变量可以用一个变量来代替谓词常量,让所述数据库每次对客户端发送的SQL语句做hash运算时,运算出的结果都是同样的Hash值,于是将所有的客户端发来的SQL语句看作是同一个SQL语句来处理,由此提升SQL语句执行效率。
综上所述,本发明提供的定位异常SQL语句的方法,通过确定包存储过程中需调用的入口语句;根据所述入口语句采集预设周期内执行存储过程的SQL语句的历史消息;从所述历史消息中抓取所述SQL语句中执行次数靠前的预设条数SQL语句;以及分析所述预设条数SQL语句,定位出效率异常的SQL语句。所述方法根据SQL语句执行的历史消息定位效率异常的SQL语句,能及时发现并定位数据库pkg过程运行效率问题,帮助解决数据库执行效率低下而影响业务系统运行的问题,故障定位精准度变高,运维成本大幅度下降。
以上所述,仅是本发明的具体实施方式,但本发明的保护范围并不局限于此,对于本领域的普通技术人员来说,在不脱离本发明创造构思的前提下,还可以做出改进,但这些均属于本发明的保护范围。
下面结合第3至4图,分别对实现上述定位异常SQL语句的方法的电子设备的功能模块及硬件结构进行介绍。
实施例二
图3为本发明定位异常SQL语句的装置较佳实施例中的功能模块图。
在一些实施例中,所述定位异常SQL语句的装置20(下文简称为“定位装置20”)运行于电子设备中。所述定位装置20可以包括多个由程序代码段所组成的功能模块。所述定位装置20中的各个程序段的程序代码可以存储于存储器中,并由至少一个处理器所执行,以执行(详见图1及其相关描述)异常SQL语句的定位。
本实施例中,所述电子设备的定位装置20根据其所执行的功能,可以被划分为多个功能模块。所述功能模块可以包括:确定模块201、采集模块202、处理模块203及定位模块204。本发明所称的模块是指一种能够被至少一个处理器所执行并且能够完成固定功能的一系列计算机程序段,其存储在存储器中。在一些实施例中,关于各模块的功能将在后续的实施例中详述。
所述确定模块201用于确定包(package)存储过程中需调用的入口语句。
现有技术中,PL/SQL为了满足程序模块化的需要,除了块(block)和子程序结构外,还引入了包(package)的构造。
包是一种数据库对象,将逻辑上相关的PL/SQL类型、对象和子程序组合成一个更大的单位。包有两个部分:包说明(specification)和包体(body)。包说明部分是为应用程序的接口,它申明类型、常量、例外、游标和可用的子程序。包体定义游标和子程序,实现说明。应用程序仅对包说明中的申明是可见的和可存取。如果ORACLE具有Procedure选件,包可以编译、存贮在ORACLE数据库中,其内容可为许多应用共享。当用户第一次调用一包装的子程序时,整个包装入到内存,所以在以后对包中子程序调用时,不再需要I/O操作,故包可提高效率和改进性能。
在本实施方式中,通过在v$sql中查找对应数据库的包存储过程的入口语句。
例如,开发提供调用网销package如下:
undw_ap_rule_package_sub02.check_netsale_rule_test(p_ctrl_id in
uws_rulecheck_app_form.ctrl_id%type,
p_unpass_flag out varchar2,
p_update_appnos out varchar2)
在v$sql表中找到对应的包存储过程入口语句如下:
BEGIN undw_ap_rule_package_sub02.check_netsale_rule_test(:1,:2,:3);END;
所述采集模块202用于根据所述入口语句采集预设周期内执行存储过程的SQL语句的历史消息。
在本实施方式中,所述SQL语句的历史消息包括,但不限于,所述SQL语句的sql_id、单次执行时间、执行总时长及执行次数。
具体地,根据所述入口语句采集所述预设周期内正在执行存储过程的SQL语句的历史消息的步骤包括:
采集预设周期内正在执行存储过程的SQL语句,并输出所述SQL语句的sql_id。
具体地,通过V$ACTIVE_SESSION_HISTORY和gv$session采集预设周期内(采集周期可自行设定,例如30分钟)正在执行存储过程的SQL语句输出sql_id和TIME_TAKEN。所述V$ACTIVE_SESSION_HISTORY表示近几个小时内活动的会话信息,所述gv$session表示当前连接数据库的会话信息。
可以理解的是,v$active_session_history每秒钟记录当前各会话的情况,一般只会保留过去几个小时的数据,历史的数据会归档到dba_hist_active_sess_history表中,dba_hist_active_sess_history表不会归档所有v$active_session_history视图的内容,只有数据库快照snapshot认为对数据库贡献较高的才会归档到dba_hist_active_sess_history表中。如果需要统计历史时间段内的SQL语句,且v$active_session_history表中所述历史时间段的数据已经被归档,则可以在dba_hist_active_sess_history表中查询所述SQL语句。
根据所述sql_id获取所述预设周期内所述SQL语句的单次执行时间、执行总时长及执行次数。
具体地,利用v$sql(SQL语句执行效率情况当前信息)、dba_hist_sqlstat(SQL语句执行效率情况历史信息)获取过往历史所述SQL语句的单次执行时间、执行总时长及执行次数。从而关联生成SQL语句的单次执行时间、执行总时长及执行次数,并输出sql_id、执行总时长及执行次数。
处理模块203用于从所述历史消息中抓取所述SQL语句中执行次数靠前的预设条数SQL语句。
在本实施方式中,可以通过以下方法抓取所述SQL语句中执行次数靠前的预设条数SQL语句。
在一实施方式中,可以通过查询V$SQLAREA或V$SQL的EXECUTIONS来查看所述SQL语句的执行次数。但是所述执行次数的有效性需要结合FIRST_LOAD_TIME来判断。因为V$SQLAREA或V$SQL中不保存历史数据,具有一定的时效性,所以如果要查询很久以前的某个SQL执行次数,所述方法是办不到的。
在另一实施方式中,可以通过DBA_HIST_SQLSTAT关联DBA_HIST_SNAPSHOT(快照)找出所述SQL语句的执行次数。所述部分快照的方法可能会存在捕获不到所述SQL语句的情况,这样也就无法通过所述SQL语句查看执行次数。不过可以理解的是,执行越频繁的语句,也越容易被SNAPSHOT抓取到。
在另一实施方式中,可以通过AWR报告查看所述SQL语句的执行次数。
所述定位模块204用于分析所述预设条数SQL语句,定位出效率异常的SQL语句。
在一实施方式中,可以根据所述历史消息中的执行次数与单次执行时间来定位效率异常的SQL语句。具体而言,可以根据执行次数中每次对应的单次执行时间生成一以执行次数为横轴以每次对应的单次执行时间为纵轴的曲线图。由此,可以从曲线图中观察SQL语句执行的时间变化波动情况,若出现某次执行时间远大于一平均执行时间,说明所述SQL语句在执行过程中出现效率异常。所述平均执行时间为执行总时长与执行次数之间的比值。
在另一实施方式中,可以根据所述预设条数SQL语句的历史消息,结合执行计划来定位所述效率异常的SQL语句。
一般地,数据库系统需要根据与访问任务对应的SQL语句,制定如何达到所述访问任务的目的的执行过程,这个过程被称为“执行计划”(execution plan),“执行计划”是一个可以用来被执行以返回用户所希望的结果的程序实例。在本实施方式中,可以结合执行计划查看所述预设条数SQL语句是否可以返回用户希望的结果来确定所述SQL语句是否异常。
当所述SQL语句通过执行计划返回的结果与用户预设的期望结果不一致时,确认所述SQL语句异常;
当所述SQL语句通过执行计划返回的结果与用户预设的期望结果一致时,确认所述SQL语句正常。
优选地,所述定位装置20还可以查找所述SQL语句出现异常的原因。
具体地,当定位到异常SQL语句时,还可以查找所述SQL语句出现异常的原因。例如,当定位到异常SQL语句时,可以通过查看执行计划变更来查找引起所述SQL异常的原因,具体而言包括:
根据sql_id的值来获得此sql_id对应的sql语句;
查询此sql_id历史执行信息,确认是否有执行计划变更;
查询并比对变更前后的执行计划,得到更前后执行计划的不同点;例如,索引不同。
根据变更前后执行计划的不同点查找原因。
优选地,所述定位装置20还可以提升所述SQL语句执行效率。当定位到异常SQL语句时,所述定位装置20还可以通过绑定变量(Bind Any Variables)来提升SQL语句执行效率。
具体而言,当客户端与数据库建立连接后,所述客户端会向数据库发出操作请求,即向数据库发送SQL语句。所述数据库在接收到这些SQL语句后,先对所述SQL语句进行hash函数运算得到一个Hash值,然后到共享池中寻找是否有和这个hash值匹配的SQL语句存在。如果找到了,所述数据库将直接使用已经存在的SQL语句的执行计划去执行当前的SQL语句,然后将执行结果返回给所述客户端。如果在共享池中没有找到相同Hash值的SQL语句,所述数据库会认为这是一条新的SQL语句,并开始对所述新的SQL语句进行解析。解析的步骤包括(1)语法解析;(2)语义解析;(3)生成执行计划;及(4)SQL语句的执行。所述生成执行计划可以分成软解析和硬解析,所述硬解析是非常耗资源的。绑定变量的本质就是本来需要做硬解析的SQL语句变成软解析,以减少数据库花费在SQL语句解析上的时间和资源。绑定变量可以用一个变量来代替谓词常量,让所述数据库每次对客户端发送的SQL语句做hash运算时,运算出的结果都是同样的Hash值,于是将所有的客户端发来的SQL语句看作是同一个SQL语句来处理,由此提升SQL语句执行效率。
综上所述,本发明所述的定位异常SQL语句的装置20,包括确定模块201、采集模块202、处理模块203及定位模块204。所述确定模块201用于确定包存储过程中需调用的入口语句;所述采集模块202用于根据所述入口语句采集预设周期内执行存储过程的SQL语句的历史消息;所述处理模块203用于从所述历史消息中抓取所述SQL语句中执行次数靠前的预设条数SQL语句;以及所述定位模块204用于分析所述预设条数SQL语句,定位出效率异常的SQL语句。从而可以根据SQL语句执行的历史消息定位效率异常的SQL语句,及时发现并定位数据库pkg过程运行效率问题,帮助解决数据库执行效率低下而影响业务系统运行的问题,故障定位精准度变高,运维成本大幅度下降。
上述以软件功能模块的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能模块存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,双屏设备,或者网络设备等)或处理器(processor)执行本发明各个实施例所述方法的部分。
实施例三
图4为本发明实施例三提供的电子设备的示意图。
所述电子设备3包括:存储器31、至少一个处理器32、存储在所述存储器31中并可在所述至少一个处理器32上运行的计算机程序33及至少一条通讯总线34。
所述至少一个处理器32执行所述计算机程序33时实现上述定位异常SQL语句的方法实施例中的步骤。
示例性的,所述计算机程序33可以被分割成一个或多个模块/单元,所述一个或者多个模块/单元被存储在所述存储器31中,并由所述至少一个处理器32执行,以完成本发明。所述一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,所述指令段用于描述所述计算机程序33在所述电子设备3中的执行过程。
所述电子设备3可以是手机、平板电脑、个人数字助理(Personal DigitalAssistant,PDA)等安装有应用程序的设备。本领域技术人员可以理解,所述示意图3仅仅是电子设备3的示例,并不构成对电子设备3的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述电子设备3还可以包括输入输出设备、网络接入设备、总线等。
所述至少一个处理器32可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。所述处理器32可以是微处理器或者所述处理器32也可以是任何常规的处理器等,所述处理器32是所述电子设备3的控制中心,利用各种接口和线路连接整个电子设备3的各个部分。
所述存储器31可用于存储所述计算机程序33和/或模块/单元,所述处理器32通过运行或执行存储在所述存储器31内的计算机程序和/或模块/单元,以及调用存储在存储器31内的数据,实现所述电子设备3的各种功能。所述存储器31可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据电子设备3的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器31可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
所述存储器31中存储有程序代码,且所述至少一个处理器32可调用所述存储器31中存储的程序代码以执行相关的功能。例如,图3中所述的各个模块(确定模块201、采集模块202、处理模块203及定位模块204)是存储在所述存储器31中的程序代码,并由所述至少一个处理器32所执行,从而实现所述各个模块的功能达到定位效率异常的SQL语句的目的。
所述电子设备3集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,所述计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
在本发明所提供的几个实施例中,应所述理解到,所揭露的电子设备和方法,可以通过其它的方式实现。例如,以上所描述的电子设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
另外,在本发明各个实施例中的各功能单元可以集成在相同处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在相同单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能模块的形式实现。
对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本发明内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或,单数不排除复数。系统权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。
最后应说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或等同替换,而不脱离本发明技术方案的精神范围。

Claims (10)

1.一种定位异常SQL语句的方法,其特征在于,所述方法包括:
确定包存储过程中需调用的入口语句;
根据所述入口语句采集预设周期内执行存储过程的SQL语句的历史消息;
从所述历史消息中抓取所述SQL语句中执行次数靠前的预设条数SQL语句;以及
分析所述预设条数SQL语句,定位出效率异常的SQL语句。
2.如权利要求1所述的定位异常SQL语句的方法,其特征在于,所述SQL语句的历史消息包括所述SQL语句的sql_id、单次执行时间、执行总时长及执行次数,所述根据所述入口语句采集预设周期内正在执行存储过程的SQL语句的历史消息的步骤包括:
采集预设周期内正在执行存储过程的SQL语句,并输出所述SQL语句的sql_id;
根据所述sql_id获取所述预设周期内所述SQL语句的单次执行时间、执行总时长及执行次数。
3.如权利要求2所述的定位异常SQL语句的方法,其特征在于,所述分析所述预设条数SQL语句,定位出效率异常的SQL语句的步骤包括:
根据所述历史消息中的执行次数中每次执行时的单次执行时间生成一以执行次数为横轴以单次执行时间为纵轴的曲线图;
当所述曲线图中所述SQL语句当前执行时间与平均执行时间之间的差值的绝对值大于等于预设值时,确认所述SQL语句在执行过程中出现效率异常。
4.如权利要求1所述的定位异常SQL语句的方法,其特征在于,从所述历史消息中抓取所述SQL语句中执行次数靠前的预设条数SQL语句的方法包括:
通过查询V$SQLAREA或V$SQL的EXECUTIONS来查看所述SQL语句的执行次数,再抓取所述SQL语句中执行次数靠前的预设条数SQL语句;
通过DBA_HIST_SQLSTAT关联DBA_HIST_SNAPSHOT找出所述SQL语句的执行次数,再抓取所述SQL语句中执行次数靠前的预设条数SQL语句;及
通过AWR报告查看所述SQL语句的执行次数后抓取所述SQL语句中执行次数靠前的预设条数SQL语句中的至少一种。
5.如权利要求1所述的定位异常SQL语句的方法,其特征在于,所述方法还包括:
当定位到效率异常的SQL语句时,通过查看执行计划变更查找引起所述SQL语句效率异常的原因。
6.如权利要求5所述的定位异常SQL语句的方法,其特征在于,通过查看执行计划变更查找引起所述SQL语句效率异常的原因包括:
根据sql_id的值来获得所述sql_id对应的sql语句;
查询所述sql_id历史执行信息,确认是否有执行计划变更;
当确认有执行计划变更时,比对变更前后的执行计划,得到变更前后执行计划的不同点;及
根据变更前后执行计划的不同点查找原因。
7.如权利要求1所述的定位异常SQL语句的方法,其特征在于,所述方法还包括:
当定位到效率异常的SQL语句时,通过绑定变量来提升所述SQL语句执行效率。
8.一种定位异常SQL语句的装置,其特征在于,所述装置包括:
确定模块,用于确定包存储过程中需调用的入口语句;
采集模块,用于根据所述入口语句采集预设周期内执行存储过程的SQL语句的历史消息;
处理模块,用于从所述历史消息中抓取所述SQL语句中执行次数靠前的预设条数SQL语句;以及
定位模块,用于分析所述预设条数SQL语句,定位出效率异常的SQL语句。
9.一种电子设备,其特征在于,所述电子设备包括处理器和存储器,所述处理器用于执行所述存储器中存储的计算机程序时实现如权利要求1至7中任意一项所述的定位异常SQL语句的方法。
10.一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7中任意一项所述的定位异常SQL语句的方法。
CN201811142669.9A 2018-09-28 2018-09-28 定位异常sql语句的方法、装置、电子设备及存储介质 Pending CN109542868A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201811142669.9A CN109542868A (zh) 2018-09-28 2018-09-28 定位异常sql语句的方法、装置、电子设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811142669.9A CN109542868A (zh) 2018-09-28 2018-09-28 定位异常sql语句的方法、装置、电子设备及存储介质

Publications (1)

Publication Number Publication Date
CN109542868A true CN109542868A (zh) 2019-03-29

Family

ID=65841302

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811142669.9A Pending CN109542868A (zh) 2018-09-28 2018-09-28 定位异常sql语句的方法、装置、电子设备及存储介质

Country Status (1)

Country Link
CN (1) CN109542868A (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112307077A (zh) * 2019-12-11 2021-02-02 深圳新阳蓝光能源科技股份有限公司 一种数据归档方法、装置、服务器和系统
CN112818049A (zh) * 2021-01-28 2021-05-18 中国人寿保险股份有限公司上海数据中心 一种信息系统性能全链路分析系统及其方法
CN113419958A (zh) * 2021-06-30 2021-09-21 中国工商银行股份有限公司 一种异常数据库语句检测方法及装置
CN113608909A (zh) * 2021-07-29 2021-11-05 阿里巴巴(中国)有限公司 数据处理方法、装置、设备、系统、存储介质及程序产品
CN113934573A (zh) * 2021-09-17 2022-01-14 南方电网深圳数字电网研究院有限公司 一种内存数据库的数据恢复方法及装置

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102945256A (zh) * 2012-10-18 2013-02-27 福建省海峡信息技术有限公司 海量sql语句合并归类的方法及装置
CN104778185A (zh) * 2014-01-15 2015-07-15 中国移动通信集团北京有限公司 异常结构化查询语言sql语句确定方法及服务器
CN106407246A (zh) * 2016-07-22 2017-02-15 平安科技(深圳)有限公司 Sql执行计划管理的方法及装置
CN106547662A (zh) * 2016-10-21 2017-03-29 长安通信科技有限责任公司 一种用于分布式数据库的性能故障定位方法
CN107247811A (zh) * 2017-07-21 2017-10-13 中国联合网络通信集团有限公司 基于Oracle数据库的SQL语句性能优化方法及装置
CN108197306A (zh) * 2018-01-30 2018-06-22 平安科技(深圳)有限公司 Sql语句处理方法、装置、计算机设备和存储介质

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102945256A (zh) * 2012-10-18 2013-02-27 福建省海峡信息技术有限公司 海量sql语句合并归类的方法及装置
CN104778185A (zh) * 2014-01-15 2015-07-15 中国移动通信集团北京有限公司 异常结构化查询语言sql语句确定方法及服务器
CN106407246A (zh) * 2016-07-22 2017-02-15 平安科技(深圳)有限公司 Sql执行计划管理的方法及装置
CN106547662A (zh) * 2016-10-21 2017-03-29 长安通信科技有限责任公司 一种用于分布式数据库的性能故障定位方法
CN107247811A (zh) * 2017-07-21 2017-10-13 中国联合网络通信集团有限公司 基于Oracle数据库的SQL语句性能优化方法及装置
CN108197306A (zh) * 2018-01-30 2018-06-22 平安科技(深圳)有限公司 Sql语句处理方法、装置、计算机设备和存储介质

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112307077A (zh) * 2019-12-11 2021-02-02 深圳新阳蓝光能源科技股份有限公司 一种数据归档方法、装置、服务器和系统
CN112818049A (zh) * 2021-01-28 2021-05-18 中国人寿保险股份有限公司上海数据中心 一种信息系统性能全链路分析系统及其方法
CN112818049B (zh) * 2021-01-28 2024-04-16 中国人寿保险股份有限公司上海数据中心 一种信息系统性能全链路分析系统及其方法
CN113419958A (zh) * 2021-06-30 2021-09-21 中国工商银行股份有限公司 一种异常数据库语句检测方法及装置
CN113608909A (zh) * 2021-07-29 2021-11-05 阿里巴巴(中国)有限公司 数据处理方法、装置、设备、系统、存储介质及程序产品
CN113608909B (zh) * 2021-07-29 2024-02-02 阿里巴巴(中国)有限公司 数据处理方法、装置、设备、系统、存储介质及程序产品
CN113934573A (zh) * 2021-09-17 2022-01-14 南方电网深圳数字电网研究院有限公司 一种内存数据库的数据恢复方法及装置

Similar Documents

Publication Publication Date Title
CN109542868A (zh) 定位异常sql语句的方法、装置、电子设备及存储介质
CN109739873A (zh) 一种业务数据查询方法、装置、设备及可读存储介质
US11693912B2 (en) Adapting database queries for data virtualization over combined database stores
CN113535777B (zh) 数据库查询方法、装置和系统
CN106792630A (zh) 一种实现移网业务开通的方法及系统
US20210201909A1 (en) Index suggestion engine for relational databases
CN111897643B (zh) 线程池配置系统、方法、装置和存储介质
CN108108445A (zh) 一种智能数据处理方法和系统
CN107085613A (zh) 入库文件的过滤方法和装置
CN111125199B (zh) 一种数据库访问方法、装置及电子设备
CN114238463A (zh) 一种用于分布式指标计算的计算引擎控制方法和装置
CN105138676A (zh) 基于高级语言并发聚合计算的分库分表merge查询方法
US8930352B2 (en) Reliance oriented data stream management system
WO2024001333A1 (en) Improving performance of row table to columnar table replication
CN112631754A (zh) 数据处理方法、装置、存储介质及电子装置
CN116521664A (zh) 数据仓库的数据监控方法及装置、计算设备、存储介质
CN115827646A (zh) 索引配置方法、装置和电子设备
CN116186082A (zh) 基于分布式的数据汇总方法、第一服务器和电子设备
CN105589969A (zh) 一种数据处理方法及装置
CN114860851A (zh) 数据处理方法、装置、设备及存储介质
CN113590651A (zh) 一种基于hql的跨集群数据处理系统及方法
CN111680036B (zh) 一种基于图存储的配置管理数据库
CN113868138A (zh) 测试数据的获取方法、系统、设备及存储介质
US9824566B1 (en) Alert management based on alert rankings
US11616744B2 (en) Context-dependent message extraction and transformation

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
RJ01 Rejection of invention patent application after publication

Application publication date: 20190329