CN109684351B - 一种执行计划查看方法、装置、服务器及存储介质 - Google Patents
一种执行计划查看方法、装置、服务器及存储介质 Download PDFInfo
- Publication number
- CN109684351B CN109684351B CN201811550294.XA CN201811550294A CN109684351B CN 109684351 B CN109684351 B CN 109684351B CN 201811550294 A CN201811550294 A CN 201811550294A CN 109684351 B CN109684351 B CN 109684351B
- Authority
- CN
- China
- Prior art keywords
- statement
- execution plan
- offset position
- handle
- line number
- 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
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明实施例提供了一种执行计划查看方法、装置、服务器及存储介质,该方法包括:获取调试客户端的执行计划查看指令,所述执行计划查看指令包括语句行号和句柄ID;根据所述语句行号和所述句柄ID确定待查看的执行计划的偏移位置;根据所述待查看的执行计划的偏移位置显示对应的执行计划。通过采用上述技术方案,实现了查看PLSQL语句块中单条SQL语句对应的执行计划。
Description
技术领域
本发明实施例涉及数据库技术领域,尤其涉及一种执行计划查看方法、装置、服务器及存储介质。
背景技术
过程化SQL语言(Procedural Language/SQL,PLSQL)是一种数据库中经常用到的语言,是对标准SQL语句的扩展,将数据操纵和SQL查询语句组织在PLSQL语句块中,目前的主流数据库基本都提供了PLSQL语句块的调试功能。当数据库接收到PLSQL语句块后,需要根据其访问任务和目的,制定可执行的、用以返回用户所期望的结果的程序实例,即执行计划。也就是说,用户输入了PLSQL语句块,但并不知道数据库会执行怎样的具体操作以完成此任务,因此通常需要查看具体的执行计划。
在实际应用中,用户常常期望确认PLSQL语句块中的某一条SQL语句使用的是什么执行计划,但执行计划是根据PLSQL语句块生成的整体的执行计划,现有的方法无法提供查看PLSQL语句块中单条SQL语句对应的执行计划的功能。
发明内容
本发明提供了一种执行计划查看方法、装置、服务器及存储介质及系统,以实现查看PLSQL语句块中单条SQL语句对应的执行计划。
第一方面,本发明实施例提供了一种执行计划查看方法,包括:获取调试客户端的执行计划查看指令,所述执行计划查看指令包括语句行号和句柄ID;
根据所述语句行号和所述句柄ID确定待查看的执行计划的偏移位置;
根据所述待查看的执行计划的偏移位置显示对应的执行计划。
进一步的,所述根据所述语句行号确定待查看的执行计划的偏移位置,包括:
查找所述句柄ID对应的调试语句句柄;
如果所述语句行号为特殊值,通过所述调试语句句柄读取所述语句行号对应的指令流偏移位置;
根据所述指令流偏移位置确定待查看的执行计划的偏移位置。
进一步的,所述通过所述调试语句句柄读取所述语句行号对应的指令流偏移位置,包括:
通过所述对应的调试语句句柄读取当前正在执行的指令流偏移位置;
在所述调试语句句柄的缓存属性中查找满足第一预设条件的属性值,作为所述语句行号对应的指令流偏移位置,所述第一预设条件为比所述当前正在执行的指令流偏移位置小的属性值中的最大值。
进一步的,所述通过所述调试语句句柄读取所述语句行号对应的指令流偏移位置,还包括:
如果所述调试语句句柄的缓存属性中的属性值是按照由小到大的顺序排列的,则查找满足第二预设条件的属性值,并将所述满足第二预设条件的属性值的前一个属性值作为所述与所述语句行号对应的指令流偏移位置,所述第二预设条件为比所述当前正在执行的指令流偏移位置大的属性值中的最小值。
进一步的,所述方法还包括:
如果所述语句行号为非特殊值,在所述调试语句句柄的缓存属性中查找与所述语句行号对应的属性值,作为所述与所述语句行号对应的指令流偏移位置。
进一步的,所述方法还包括:
如果所述语句行号为非特殊值,且对应的调试语句为跨行语句时,在所述调试语句句柄的缓存属性中查找满足第三预设条件的属性值,作为所述与所述语句行号对应的指令流偏移位置,所述第三预设条件为与所述语句行号对应的属性值,或大于所述语句行号的最小语句行号对应的属性值。
进一步的,所述根据所述待查看的执行计划的偏移位置显示对应的执行计划,包括:
如果所述待查看的执行计划的偏移位置为特殊值,则向调试客户端发送无法查看执行计划的提示信息;
如果所述待查看的执行计划的偏移位置为非特殊值,则根据所述待查看的执行计划的偏移位置从整体执行计划中查找对应的执行计划并发送至所述调试客户端进行显示。
第二方面,本发明实施例提供了一种执行计划查看装置,包括:
指令获取模块,用于获取调试客户端的执行计划查看指令,所述执行计划查看指令包括语句行号和句柄ID;
执行计划偏移位置确定模块,用于根据所述语句行号和所述句柄ID确定待查看的执行计划的偏移位置;
显示模块,用于根据所述待查看的执行计划的偏移位置显示对应的执行计划。
第三方面,本发明实施例提供了一种服务器,包括:
一个或多个处理器;
存储器,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如第一方面所述的执行计划查看方法。
第四方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如第一方面所述的执行计划查看方法。
本发明实施例提供了一种执行计划查看方法、装置、服务器及存储介质,该方法包括:获取调试客户端的执行计划查看指令,所述执行计划查看指令包括语句行号和句柄ID;根据所述语句行号和所述句柄ID确定待查看的执行计划的偏移位置;根据所述待查看的执行计划的偏移位置显示对应的执行计划。通过采用上述技术方案,实现了查看PLSQL语句块中单条SQL语句对应的执行计划。
附图说明
图1为本发明实施例一提供的一种执行计划查看方法的流程图;
图2为本发明实施例一提供的一种执行计划查看方法应用场景的示意图;
图3为本发明实施例一提供的调试客户端与服务器数据库语句句柄关系的示意图;
图4为本发明实施例二提供的一种执行计划查看方法的流程图;
图5为本发明实施例二提供的一种执行计划查看方法的实现流程图;
图6为本发明实施例三提供的一种执行计划查看装置的结构示意图;
图7为本发明实施例四提供的一种服务器的硬件结构示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
实施例一
图1为本发明实施例一提供的一种执行计划查看方法的流程图,本实施例可适用于对PLSQL语句块中的单条SQL语句查看执行计划的情况。具体的,该执行计划查看方法可以由执行计划查看装置执行,该执行计划查看装置可以通过软件和/或硬件的方式实现,并集成在服务器中。进一步的,服务器包括但不限定于:工业集成服务器、系统后台服务器以及云端服务器。
图2为本发明实施例一提供的一种执行计划查看方法应用场景的示意图。如图2所示,PLSQL调试功能包含调试客户端101和服务器102两部分,调试客户端101接收用户输入的调试语句和调试指令,服务器102作为调试服务器执行用户输入的调试语句,并根据调试指令返回对应消息给用户;当用户需要查看执行计划时,调试客户端101将用户输入的执行计划查看指令发送至服务器102,服务器102在调试语句句柄的缓存数据中查找到对应的执行计划并返回至调试客户端进行显示。
需要说明的是,在对PLSQL语句块中的单条SQL语句查看执行计划之前,首先要进行PLSQL调试功能环境的初始化。具体的,当调试客户端与服务器成功连接后,在调试客户端创建了两种全局语句句柄:执行PLSQL语句块的语句句柄(exec_stmt)和辅助获取调试信息的语句句柄(aid_stmt);对应的,服务器创建了两种语句句柄:调试语句句柄(dbg_stmt)和非调试语句句柄(stmt)。
图3为本发明实施例一提供的调试客户端与服务器数据库语句句柄关系的示意图。如图3所示,调试语句句柄用以执行PLSQL语句块并向执行语句句柄返回执行结果;非调试语句句柄用以执行辅助语句句柄的辅助信息指令并返回响应信息。为了区分调试语句句柄和非调试语句句柄,服务器为dbg_stmt添加调试标识。示例性的,为各dbg_stmt分别添加一个句柄ID,句柄ID可唯一标识各dbg_stmt,并在调试客户端保存服务器中与之对应的dbg_stmt的句柄ID,以此明确该调试客户端与dbg_stmt的唯一映射关系。stmt为非调试语句句柄,不需要添加调试标识。
进一步的,服务器在接收到exec_stmt发送的PLSQL语句块执行或调试命令后,先对PLSQL语句块进行解析,生成整个PLSQL语句块的整体执行计划;在后续的执行过程中,当服务器接收到aid_stmt发送的对单条SQL语句查看执行计划的指令时,在对应的dbg_stmt的缓存数据中可查找到该单条SQL语句对应的执行计划,并通过stmt将查找到的执行计划返回给aid_stmt以在客户端进行显示。
具体的,参考图1,该方法包括如下步骤:
S110、获取调试客户端的执行计划查看指令,所述执行计划查看指令包括语句行号和句柄ID。
具体的,服务器对PLSQL语句块进行解析后,已经生成了整体执行计划,此时需要查看PLSQL语句块中的单条SQL语句对应的执行计划,则服务器获取调试客户端aid_stmt发送的执行计划查看指令,所述执行计划查看指令为本实施例为调试客户端新增的一种查看执行计划的指令,其形式可为“EXPLAIN”或“EXPLAIN lineno”,“EXPLAIN”表示查看当前行正在执行的SQL语句对应的执行计划,“EXPLAIN lineno”表示查看语句行号“lineno”对应的SQL语句对应的执行计划。执行计划查看指令由调试客户端的“aid_stmt”向服务器发送。执行计划查看指令包括语句行号和句柄ID,语句行号即为lineno(lineno为自然数),用于限定要查看的目标语句在语句块中的行位置,句柄ID用于标识该调试客户端的语句块在服务器中被哪个dbg_stmt解析,便于查找对应的dbg_stmt,进一步在该dbg_stmt的缓存数据中读取对应的执行计划。
需要说明的是,执行计划查看指令也可以不指定语句行号,此时,通过“EXPLAIN”指令查看当前正在执行的SQL语句的执行计划,即lineno为空,也可以设置为其他的特殊值(如-1),以区分指定语句行号的执行计划查看指令。
S120、根据所述语句行号和所述句柄ID确定待查看的执行计划的偏移位置
具体的,调试客户端的辅助语句句柄aid_stmt向服务器发送的执行计划查看指令为EXPLAIN形式,包含了调试语句句柄的句柄ID和语句行号lineno。当服务器的非调试语句句柄stmt接收到执行计划查看指令时,从中获取dbg_stmt的句柄ID和语句行号lineno,根据句柄ID遍历服务器中的所有调试语句句柄,找到与该句柄ID对应的dbg_stmt,dbg_stmt执行PLSQL语句块时已经生成了整体执行计划存储在缓存数据中,并且整体执行计划是在解析SQL语句的过程中按照各行SQL语句逐条生成的,每生成一条执行计划都会产生一个执行计划的偏移位置,根据语句行号可确定待查看的执行计划的偏移位置。具体的,确定待查看的执行计划的偏移位置分为两种情况,当语句行号为非特殊值时,根据语句行号即可在dbg_stmt的缓存数据中确定对应的待查看的执行计划的偏移位置;当语句行号为特殊值(即不指定行号)时,需要先确定当前正在执行的指令流偏移位置,才能进一步确定待查看的执行计划的偏移位置。
S130、根据所述待查看的执行计划的偏移位置显示对应的执行计划。
具体的,根据待查看的执行计划的偏移位置可在整体执行计划中定位到该偏移位置上对应的执行计划,并返回给调试客户端进行显示。
本发明实施例一提供的一种执行计划查看方法,包括:获取调试客户端的执行计划查看指令,所述执行计划查看指令包括语句行号和句柄ID;根据所述语句行号和所述句柄ID确定待查看的执行计划的偏移位置;根据所述待查看的执行计划的偏移位置显示对应的执行计划。通过采用上述技术方案,实现了查看PLSQL语句块中单条SQL语句对应的执行计划。
实施例二
图4本发明实施例二提供的一种执行计划查看方法的流程图,本实施例是在上述实施例的基础上,进行具体优化,对PLSQL语句块的整体执行计划和执行指令流的生成以及确定待查看的执行计划的偏移位置进行具体说明,未在本实施例中详尽描述的技术细节可参见上述任意实施例。
需要说明的是,在查看执行计划之前,服务器在接收到PLSQL语句块的执行或调试命令后,首先由调试语句句柄dbg_stmt对PLSQL语句块进行解析,生成PLSQL语句块的整体执行计划和执行指令流,并在此过程中生成新增属性,将新增属性记为X,X由一系列的成员Y组成,成员Y包括语句行号、执行计划偏移位置、指令流偏移位置三部分,生成过程具体如下:
(1)调试语句句柄dbg_stmt的调试环境初始化:PLSQL语句块的执行计划和执行指令流初始为空,新增属性X也初始化为空。
(2)逐条解析PLSQL语句块中的每条SQL语句:当PLSQL语句块的解析进行到某一条SQL语句时,将当前的语句行号、当前执行计划的偏移位置、当前执行指令流的偏移位置组成一个成员Y,并将成员Y添加到新增属性X中。如果当前语句不是增、删、改、查等SQL语句则没有执行计划,将当前执行计划的偏移位置设置为特殊值(如-1)。重复执行步骤(2),直到整个PLSQL语句块解析完成,生成了PLSQL语句块的整体执行计划、执行指令流以及新增属性X,存储在调试语句句柄dbg_stmt的缓存数据中。
示例性的,表1为某PLSQL语句块新增属性X中存储的Y属性值,包括语句行号、执行计划偏移位置及指令流偏移位置的映射关系。对PLSQL语句块解析完成后,在该dbg_stmt的缓存数据中存储了整体执行计划、执行指令流以及新增属性,新增属性如表1所示,每一行都是一个成员Y,各成员Y共同构成了新增属性X并存储在dbg_stmt的缓存数据中,表1反映了语句行号、执行计划偏移位置及指令流偏移位置的映射关系。
表1某PLSQL语句块新增属性X中存储的Y属性值
需要说明的是,执行计划和执行指令流初始为空,在解析PLSQL语句块时,依次逐条解析每一条SQL语句,并根据每一条SQL语句生成执行计划和执行指令流,同时,记录所生成的这条语句对应的执行计划和执行指令流时的偏移位置。表1可以理解为,对于第4行SQL语句进行解析,生成的执行计划的偏移位置为0,指令流的偏移位置为14(该行语句对应的指令流偏移位置为14-23,起始位置为14);对于第5行SQL语句进行解析,生成的执行计划的偏移位置为1,指令流的偏移位置为24(该行语句对应的指令流偏移位置为24-33,起始位置为24);对于第6行SQL语句进行解析,生成的执行计划的偏移位置为-1(该语句为非增、删、改、查等的语句,没有执行计划),指令流的偏移位置为34(该行语句对应的指令流偏移位置为34-67,起始位置为34);对于第7行SQL语句进行解析,生成的执行计划的偏移位置为2,指令流的偏移位置为68(该行语句对应的指令流偏移位置的起始位置为68)。当需要查看执行计划时,利用新增属性可以定位到单条语句的语句行号在被解析的过程中生成的对应执行计划偏移位置,或者利用新增属性X根据当前正在执行的指令流偏移位置定位到执行计划偏移位置,从而在整体执行计划中确定待查看的执行计划。
具体的,参考图4,该执行计划查看方法具体包括如下步骤:
S210、获取调试客户端的执行计划查看指令,所述执行计划查看指令包括语句行号和句柄ID。
S220、查找所述句柄ID对应的调试语句句柄。
S230、所述语句行号是否为特殊值,如果是,则执行步骤S240;如果否,则执行步骤S260。
S240、通过所述调试语句句柄读取所述语句行号对应的指令流偏移位置。
具体的,如果所述语句行号为特殊值,即未指定行号,则需要先根据语句行号确定对应的指令流偏移位置,才能进一步根据指令流偏移位置确定执行计划的偏移位置。例如,所述语句行号为特殊值(-1),则无法根据表1读取执行计划的偏移位置,此时必须先读取所述语句行号对应的指令流偏移位置。
具体的,所述通过所述调试语句句柄读取所述语句行号对应的指令流偏移位置,包括:通过所述对应的调试语句句柄读取当前正在执行的指令流偏移位置;
在所述调试语句句柄的缓存属性中查找满足第一预设条件的属性值,作为所述语句行号对应的指令流偏移位置,所述第一预设条件为比所述当前正在执行的指令流偏移位置小的属性值中的最大值。
具体的,当执行计划查看指令中的语句行号为空或者为特殊值(-1)时,读取接收到该执行计划查看指令时服务器当前正在执行的指令流偏移位置,记为cmd_offset,cmd_offset不一定为各行语句对应的起始位置,因此,根据一定的预设规则,确定cmd_offset应划分在哪一个起始位置所在的指令流中。缓存属性是指缓存数据中的新增属性X,在缓存属性中查找满足第一预设条件的属性值,所述属性值主要指成员Y中的指令流偏移位置,第一预设条件可以理解为:比cmd_offset小的属性值中的最大值。示例性的,当服务器接收到调试客户端的“EXPLAIN”指令(未指定行号)时,读取服务器当前正在执行的指令流偏移位置,假设为20,即cmd_offset=20,则查找满足第一预设条件的属性值,即查找小于20的属性值中的最大值,即14,将14作为与所述语句行号对应的指令流偏移位置。进而在新增属性中可确定对应的执行计划的偏移位置为0,则在整体执行计划中查找偏移位置0上所对应的执行计划,返回给调试客户端进行显示。
进一步的,所述通过所述调试语句句柄读取所述语句行号对应的指令流偏移位置,还包括:如果所述调试语句句柄的缓存属性中的属性值是按照由小到大的顺序排列的,则查找满足第二预设条件的属性值,并将所述满足第二预设条件的属性值的前一个属性值作为所述与所述语句行号对应的指令流偏移位置,所述第二预设条件为比所述当前正在执行的指令流偏移位置大的属性值中的最小值。
具体的,如果属性值是按照由小到大的顺序排列(如表1所示,指令流的偏移位置是由小到大的顺序),则查找比cmd_offset大的属性值中的最小值,并将前一个属性值作为与所述语句行号对应的指令流偏移位置。示例性的,cmd_offset=20,则在成员Y的指令流偏移位置中查找大于20的最小值,即24,并将前一个属性值14作为与所述语句行号对应的指令流偏移位置。由此可知,根据第一预设条件、第二预设条件两种方法最终确定的指令流偏移位置一致。
需要说明的是,如果在新增属性X中定位不到对应的属性值,则无法显示执行计划,例如,cmd_offset=13,小于表1中所缓存的最小执行指令流的偏移位置,则无法显示执行计划。
S250、根据所述指令流偏移位置确定待查看的执行计划的偏移位置,执行步骤S270。
具体的,当语句行号为特殊值时,根据调试语句句柄的缓存属性中的执行计划偏移位置与指令流偏移位置的映射关系,可确定待查看的执行计划的偏移位置。
S260、根据所述语句行号确定待查看的执行计划的偏移位置。
具体的,如果所述语句行号为非特殊值,即指定了行号,则可在调试语句句柄缓存的新增属性中直接读取该语句行号对应的执行计划的偏移位置即可,无需读取指令流偏移位置。例如,语句行号为4,则根据表1可读取对应的执行计划的偏移位置为0;语句行号为5,则读取对应的执行计划的偏移位置为1。
S270、根据所述待查看的执行计划的偏移位置显示对应的执行计划。
具体的,在整体执行计划中定位到待查看的执行计划的偏移位置,将该位置上的执行计划发送至调试客户端进行显示。
进一步的,如果所述待查看的执行计划的偏移位置为特殊值,则向调试客户端发送无法查看执行计划的提示信息;如果所述待查看的执行计划的偏移位置为非特殊值,则根据所述待查看的执行计划的偏移位置从整体执行计划中查找对应的执行计划并发送至所述调试客户端进行显示。
具体的,如果待查看的执行计划的偏移位置为特殊值(如表1所示的第6行语句对应的执行计划的偏移位置为-1),则说明该单条语句为非增、删、改、查等的SQL语句,没有执行计划,此时,向调试客户端发送无法查看执行计划的提示信息;如果待查看的执行计划的偏移位置为非特殊值,则根据待查看的执行计划的偏移位置从整体执行计划中查找对应的执行计划并发送至调试客户端进行显示。
进一步的,如果所述语句行号为非特殊值,在所述调试语句句柄的缓存属性中查找与所述语句行号对应的属性值,作为所述与所述语句行号对应的指令流偏移位置。
具体的,如果语句行号为非特殊值,可直接根据新增属性X定位到对应的执行计划的偏移位置,与此同时,可查找与所述语句行号对应的属性值,作为对应的指令流偏移位置。例如,当接收到“EXPLAIN 5”的查看指令时,根据表1可确定对应的执行计划的偏移位置为1,同时确定第5行语句对应的指令流偏移位置为24。
需要说明的是,当语句行号为非特殊值时,根据语句行号可从如表1所示的缓存属性中直接确定执行计划的偏移位置,同时也可利用表1确定对应的指令流的偏移位置,查找到完善的缓存属性;但当语句行号为特殊值时,执行计划查看指令没有指定语句行号,所以必须先读取当前正在执行的指令流偏移位置cmd_offset、确定对应的指令流的偏移位置,再进一步确定待查看的执行计划的偏移位置。
进一步的,如果所述语句行号为非特殊值,且对应的调试语句为跨行语句时,在所述调试语句句柄的缓存属性中查找满足第三预设条件的属性值,作为所述与所述语句行号对应的指令流偏移位置,所述第三预设条件为与所述语句行号对应的属性值,或大于所述语句行号的最小语句行号对应的属性值。
具体的,当调试语句为跨行语句时,与所述语句行号对应的指令流偏移位置可能有两种情况。示例性的,假设某条跨行的SQL语句为语句块中的第8行和第9行,缓存数据中存储的是这条SQL语句的最后一行对应的成员Y,即“9、3、100”,则当接收到“EXPLAIN 9”的指令时,只需查找语句行号9对应的指令流偏移位置,即100;而当接收到“EXPLAIN 8”的指令时,需查找大于语句行号8中的最小语句行号对应的指令流偏移位置,即语句行号9对应的指令流偏移位置100,进而确定待查看的执行计划的偏移位置为3。
同理,假设跨行的SQL语句对应的缓存数据中存储的是这条SQL语句的第一行对应的成员Y,则在所述调试语句句柄的缓存属性中查找满足第四预设条件的属性值,作为所述与所述语句行号对应的指令流偏移位置,所述第四预设条件为与所述语句行号对应的属性值,或小于所述语句行号的最大语句行号对应的属性值。
示例性的,假设某条跨行的SQL语句为语句块中的第8行和第9行,缓存数据中存储的是这条SQL语句的第一行对应的成员Y,即“8、3、90”,则当接收到“EXPLAIN 8”的指令时,只需查找语句行号8对应的指令流偏移位置,即90;而当接收到“EXPLAIN 9”的指令时,需查找小于语句行号9中的最大语句行号对应的指令流偏移位置,即语句行号8对应的指令流偏移位置90,进而确定待查看的执行计划的偏移位置为3。
在上述实施例的基础上图5为本发明实施例二提供的一种执行计划查看方法的实现流程图。参照图5,具体实现流程如下:
a)获取调试客户端的执行计划查看指令,即EXPLAIN指令,EXPLAIN指令中包括语句行号lineno和句柄ID;
b)查找所述句柄ID对应的调试语句句柄dbg_stmt;
c)判断lineno是否为特殊值,如果是,则执行d);如果否,则执行i);
d)通过dbg_stmt读取当前正在执行的指令流偏移位置cmd_offset;
e)判断dbg_stmt的缓存属性中的属性值是否为按照由小到大的顺序排列,如果是,则执行f);如果否,则执行g);
f)在dbg_stmt的缓存属性中查找满足第一预设条件的属性值,即比cmd_offset小的属性值中的最大值,作为所述语句行号对应的指令流偏移位置,执行h);
g)查找满足第二预设条件的属性值,即比cmd_offset大的属性值中的最小值,并将所述满足第二预设条件的属性值的前一个属性值作为所述与所述语句行号对应的指令流偏移位置,执行h);
h)根据所述指令流偏移位置确定待查看的执行计划的偏移位置,执行j);
i)根据所述语句行号和所述句柄ID确定待查看的执行计划的偏移位置,执行j);
j)待查看的执行计划的偏移位置是否为特殊值,如果是,则执行k);如果否,则执行l);
k)向调试客户端发送无法查看执行计划的提示信息;
l)根据所述待查看的执行计划的偏移位置从整体执行计划中查找对应的执行计划并发送至所述调试客户端进行显示。
在上述实施例的基础上,本实施例通过一段示例性的代码对执行计划的查看方法进行说明,具体如下:
第一步:准备PLSQL调试的环境,创建PLSQL语句需要用到的数据表对象,具体为:
SQL>DROP TABLE T;
操作已执行
已用时间:643.349(毫秒).执行号:7.
SQL>CREATE TABLE T(C1 INT,C2 INT);
操作已执行
已用时间:81.530(毫秒).执行号:8.
第二步:设置PLSQL语句块,该PLSQL语句块由exec_stmt发送至服务器,并由服务器中具有特定句柄ID的dbg_stmt进行解析,解析过程中生成PLSQL语句块的整体执行计划和执行指令流,具体为:
DBG>SQL DECLARE
2 A INT;
3 BEGIN
4 INSERT INTO T VALUES(1,1);
5 SELECT C1 INTO A FROM T;
6 DBMS_OUTPUT.PUT_LINE(A);
7 DELETE FROM T WHERE C1=1;
8 END;
9 /
第三步:设置断点,运行时在第6行语句会产生中断,具体为:
DBG>B 6
Breakpoint 1 at@dbg_main,line:6@{DBMS_OUTPUT.PUT_LINE(A);}
第四步:开始执行,此执行过程是按照第二步中所生成的执行计划进行的,具体为:
DBG>R
Breakpoint 1,line:6@{DBMS_OUTPUT.PUT_LINE(A);}
第五步:在执行到第6行语句时中断,此时可利用EXPLAIN指令查看第5行语句的执行计划,具体为:
第六步:查看第6行语句的执行计划,由于第6行语句不是增、删、改、查语句而无法显示执行计划,具体为:
DBG>EXPLAIN 6
Current statement is not INSERT/DELETE/UPDATE/SELECT sql.
第七步:单步执行第7行语句,具体为:
DBG>N
line:7 @{DELETE FROM T WHERE C1=1;}
第八步:单步执行完第7行语句,利用不指定行号的EXPLAIN指令查看当前正在执行的语句(第7行语句)的执行计划,具体为:
需要说明的是,在上述实例中,第6行语句的执行计划的偏移位置为“-1”,表示该行语句没有执行计划,因此“EXPLAIN 6”指令之后,显示的是无法显示执行计划的提示信息,而“EXPLAIN 5”、“EXPLAIN 7”之后显示的是执行计划的查看结果。
本发明实施例二提供的一种执行计划查看方法,在上述实施例的基础上进行优化,通过对PLSQL语句块的整体执行计划和执行指令流的生成以及确定待查看的执行计划的偏移位置进行具体说明,明确了语句行号、执行计划的偏移位置、指令流的偏移位置的映射关系,并且为多种情况设定了全面的预设规则,使执行计划查看方法更加完善高效。
实施例三
图6为本发明实施例三提供的一种执行计划查看装置的结构图。本实施例提供的执行计划查看装置包括:
指令获取模块310,用于获取调试客户端的执行计划查看指令,所述执行计划查看指令包括语句行号和句柄ID;
执行计划偏移位置确定模块320,用于根据所述语句行号和所述句柄ID确定待查看的执行计划的偏移位置;
显示模块330,用于根据所述待查看的执行计划的偏移位置显示对应的执行计划。
本发明实施例三提供的一种执行计划查看装置,通过指令获取模块获取调试客户端的执行计划查看指令,所述执行计划查看指令包括语句行号和句柄ID;通过执行计划偏移位置确定模块根据所述语句行号和所述句柄ID确定待查看的执行计划的偏移位置;通过显示模块根据所述待查看的执行计划的偏移位置显示对应的执行计划。通过采用上述技术方案,实现了查看PLSQL语句块中单条SQL语句对应的执行计划。
在上述实施例的基础上,所述装置还包括:
新增属性生成模块,用于在逐条解析SQL语句的过程中,将当前的语句行号、当前执行计划的偏移位置、当前执行指令流的偏移位置组成一个成员Y,并将成员Y添加到新增属性X,并存储在调试语句句柄dbg_stmt的缓存数据中。
进一步的,所述执行计划偏移位置确定模块320,包括:
句柄查找单元,用于查找所述句柄ID对应的调试语句句柄;
指令流偏移位置读取单元,用于如果所述语句行号为特殊值,通过所述调试语句句柄读取所述语句行号对应的指令流偏移位置;
执行计划偏移位置确定单元,用于根据所述指令流偏移位置确定待查看的执行计划的偏移位置。
进一步的,所述指令流偏移位置读取单元,包括:
当前偏移位置读取单元,用于通过所述对应的调试语句句柄读取当前正在执行的指令流偏移位置;
第一查找单元,用于在所述调试语句句柄的缓存属性中查找满足第一预设条件的属性值,作为所述语句行号对应的指令流偏移位置,所述第一预设条件为比所述当前正在执行的指令流偏移位置小的属性值中的最大值。
进一步的,所述指令流偏移位置读取单元,还包括:
第二查找单元,用于如果所述调试语句句柄的缓存属性中的属性值是按照由小到大的顺序排列的,则查找满足第二预设条件的属性值,并将所述满足第二预设条件的属性值的前一个属性值作为所述与所述语句行号对应的指令流偏移位置,所述第二预设条件为比所述当前正在执行的指令流偏移位置大的属性值中的最小值。
进一步的,所述指令流偏移位置读取单元,还包括:
第三查找单元,用于如果所述语句行号为非特殊值,在所述调试语句句柄的缓存属性中查找与所述语句行号对应的属性值,作为所述与所述语句行号对应的指令流偏移位置。
进一步的,所述指令流偏移位置读取单元,还包括:
第四查找单元,用于如果所述语句行号为非特殊值,且对应的调试语句为跨行语句时,在所述调试语句句柄的缓存属性中查找满足第三预设条件的属性值,作为所述与所述语句行号对应的指令流偏移位置,所述第三预设条件为与所述语句行号对应的属性值,或大于所述语句行号的最小语句行号对应的属性值。
进一步的,所述显示模块330包括:
提示单元,用于如果所述待查看的执行计划的偏移位置为特殊值,则向调试客户端发送无法查看执行计划的提示信息;
执行计划显示单元,用于如果所述待查看的执行计划的偏移位置为非特殊值,则根据所述待查看的执行计划的偏移位置从整体执行计划中查找对应的执行计划并发送至所述调试客户端进行显示。
本发明实施例三提供的执行计划查看装置可以用于执行上述任意实施例提供的执行计划查看方法,具备相应的功能和有益效果。
实施例四
图7为本发明实施例四提供的一种服务器的硬件结构示意图。如图7所示,本实施例提供的一种服务器,包括:处理器410和存储装置420。该服务器中的处理器可以是一个或多个,图7中以一个处理器410为例,所述服务器中的处理器410和存储装置420可以通过总线或其他方式连接,图7中以通过总线连接为例。
所述一个或多个程序被所述一个或多个处理器410执行,使得所述一个或多个处理器实现上述实施例中任意所述的执行计划查看方法。
该服务器中的存储装置420作为一种计算机可读存储介质,可用于存储一个或多个程序,所述程序可以是软件程序、计算机可执行程序以及模块,如本发明实施例中执行计划查看方法对应的程序指令/模块(例如,附图5所示的执行计划查看装置中的模块,包括:指令获取模块310、执行计划偏移位置确定模块320以及显示模块330)。处理器410通过运行存储在存储装置420中的软件程序、指令以及模块,从而执行服务器的各种功能应用以及数据处理,即实现上述方法实施例中的执行计划查看方法。
存储装置420主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据服务器的使用所创建的数据等(如上述实施例中的语句行号、句柄ID、缓存属性等)。此外,存储装置420可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储装置420可进一步包括相对于处理器410远程设置的存储器,这些远程存储器可以通过网络连接至服务器。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
并且,当上述服务器中所包括一个或者多个程序被所述一个或者多个处理器410执行时,程序进行如下操作:
获取调试客户端的执行计划查看指令,所述执行计划查看指令包括语句行号和句柄ID;根据所述语句行号和所述句柄ID确定待查看的执行计划的偏移位置;根据所述待查看的执行计划的偏移位置显示对应的执行计划。
本实施例提出的服务器与上述实施例提出的执行计划查看方法属于同一发明构思,未在本实施例中详尽描述的技术细节可参见上述任意实施例,并且本实施例具备与执行计划查看方法相同的有益效果。
在上述实施例的基础上,本实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被一旦开始活动就不会冷。装置执行时实现本发明上述任意实施例中的执行计划查看方法,该方法包括:
获取调试客户端的执行计划查看指令,所述执行计划查看指令包括语句行号和句柄ID;根据所述语句行号和所述句柄ID确定待查看的执行计划的偏移位置;根据所述待查看的执行计划的偏移位置显示对应的执行计划。
当然,本发明实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上所述的执行计划查看方法操作,还可以执行本发明任意实施例所提供的执行计划查看方法中的相关操作,且具备相应的功能和有益效果。
通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本发明可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、闪存(FLASH)、硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的执行计划查看方法。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
Claims (9)
1.一种执行计划查看方法,其特征在于,应用于服务器,包括:
获取调试客户端的执行计划查看指令,所述执行计划查看指令包括PLSQL语句块中的单条SQL目标语句对应的语句行号和句柄ID;
根据所述语句行号和所述句柄ID确定待查看的执行计划的偏移位置,包括:查找所述句柄ID对应的调试语句句柄;如果所述语句行号为特殊值,通过所述调试语句句柄读取所述语句行号对应的指令流偏移位置;根据所述指令流偏移位置确定待查看的执行计划的偏移位置;
根据所述待查看的执行计划的偏移位置显示对应的执行计划;
其中,所述调试客户端中创建有执行语句句柄和辅助语句句柄,所述服务器中根据所述执行语句句柄和辅助语句句柄创建有相应的调试语句句柄和非调试语句句柄。
2.根据权利要求1所述的方法,其特征在于,所述通过所述调试语句句柄读取所述语句行号对应的指令流偏移位置,包括:
通过所述对应的调试语句句柄读取当前正在执行的指令流偏移位置;
在所述调试语句句柄的缓存属性中查找满足第一预设条件的属性值,作为所述语句行号对应的指令流偏移位置,所述第一预设条件为比所述当前正在执行的指令流偏移位置小的属性值中的最大值。
3.根据权利要求2所述的方法,其特征在于,所述通过所述调试语句句柄读取所述语句行号对应的指令流偏移位置,还包括:
如果所述调试语句句柄的缓存属性中的属性值是按照由小到大的顺序排列的,则查找满足第二预设条件的属性值,并将所述满足第二预设条件的属性值的前一个属性值作为所述与所述语句行号对应的指令流偏移位置,所述第二预设条件为比所述当前正在执行的指令流偏移位置大的属性值中的最小值。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
如果所述语句行号为非特殊值,在所述调试语句句柄的缓存属性中查找与所述语句行号对应的属性值,作为所述与所述语句行号对应的指令流偏移位置。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
如果所述语句行号为非特殊值,且对应的调试语句为跨行语句时,在所述调试语句句柄的缓存属性中查找满足第三预设条件的属性值,作为所述与所述语句行号对应的指令流偏移位置,所述第三预设条件为与所述语句行号对应的属性值,或大于所述语句行号的最小语句行号对应的属性值。
6.根据权利要求1所述的方法,其特征在于,所述根据所述待查看的执行计划的偏移位置显示对应的执行计划,包括:
如果所述待查看的执行计划的偏移位置为特殊值,则向调试客户端发送无法查看执行计划的提示信息;
如果所述待查看的执行计划的偏移位置为非特殊值,则根据所述待查看的执行计划的偏移位置从整体执行计划中查找对应的执行计划并发送至所述调试客户端进行显示。
7.一种执行计划查看装置,其特征在于,设置于服务器,包括:
指令获取模块,用于获取调试客户端的执行计划查看指令,所述执行计划查看指令包括PLSQL语句块中的单条SQL目标语句对应的语句行号和句柄ID;
执行计划偏移位置确定模块,用于根据所述语句行号和所述句柄ID确定待查看的执行计划的偏移位置,其中,所述执行计划偏移位置确定模块包括:句柄查找单元,用于查找所述句柄ID对应的调试语句句柄;指令流偏移位置读取单元,用于如果所述语句行号为特殊值,通过所述调试语句句柄读取所述语句行号对应的指令流偏移位置;执行计划偏移位置确定单元,用于根据所述指令流偏移位置确定待查看的执行计划的偏移位置;
显示模块,用于根据所述待查看的执行计划的偏移位置显示对应的执行计划;
其中,所述调试客户端中创建有执行语句句柄和辅助语句句柄,所述服务器中根据所述执行语句句柄和辅助语句句柄创建有相应的调试语句句柄和非调试语句句柄。
8.一种服务器,其特征在于,包括:
一个或多个处理器;
存储器,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-6中任一所述的执行计划查看方法。
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-6中任一所述的执行计划查看方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811550294.XA CN109684351B (zh) | 2018-12-18 | 2018-12-18 | 一种执行计划查看方法、装置、服务器及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811550294.XA CN109684351B (zh) | 2018-12-18 | 2018-12-18 | 一种执行计划查看方法、装置、服务器及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109684351A CN109684351A (zh) | 2019-04-26 |
CN109684351B true CN109684351B (zh) | 2020-11-06 |
Family
ID=66186436
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811550294.XA Active CN109684351B (zh) | 2018-12-18 | 2018-12-18 | 一种执行计划查看方法、装置、服务器及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109684351B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111177098B (zh) * | 2019-12-27 | 2023-09-22 | 中信百信银行股份有限公司 | 查看系统日志上下文的方法及系统 |
CN117076314A (zh) * | 2023-08-22 | 2023-11-17 | 深圳计算科学研究院 | 一种轻量级的pl/sql语言调试器实现方法 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080140622A1 (en) * | 2006-12-12 | 2008-06-12 | Bestgen Robert J | Displaying Explain Data for a SQL Query of a Database |
CN103226598B (zh) * | 2013-04-22 | 2016-06-22 | 华为技术有限公司 | 访问数据库的方法和装置以及数据库管理系统 |
CN106897343B (zh) * | 2016-07-20 | 2020-08-07 | 阿里巴巴集团控股有限公司 | 执行计划的查找方法、存储方法及装置 |
CN108363746B (zh) * | 2018-01-26 | 2022-07-26 | 福建星瑞格软件有限公司 | 一种支持多源异构数据的统一sql查询系统 |
-
2018
- 2018-12-18 CN CN201811550294.XA patent/CN109684351B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN109684351A (zh) | 2019-04-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102407510B1 (ko) | 데이터 저장 및 조회 방법, 장치, 기기 및 매체 | |
CN109766345B (zh) | 元数据处理方法及装置、设备、可读存储介质 | |
WO2014113273A2 (en) | Variable duration windows on continuous data streams | |
WO2020238597A1 (zh) | 基于Hadoop的数据更新方法、装置、系统及介质 | |
CN110046170B (zh) | 基于多文件管理的语句执行方法、装置、设备和介质 | |
CN107480260B (zh) | 大数据实时分析方法、装置、计算设备及计算机存储介质 | |
CN109684351B (zh) | 一种执行计划查看方法、装置、服务器及存储介质 | |
WO2019161620A1 (zh) | 应用依赖关系更新方法、终端、设备及存储介质 | |
CN109299101B (zh) | 数据检索方法、装置、服务器和存储介质 | |
CN112883030A (zh) | 数据收集方法、装置、计算机设备和存储介质 | |
RU2674886C2 (ru) | Способ и устройство для определения плана исполнения sql | |
US20180150486A1 (en) | Linking datasets | |
CN111813803B (zh) | 语句块执行计划的生成方法、装置、设备和存储介质 | |
CN105302827A (zh) | 一种事件的搜索方法和设备 | |
CN111797095B (zh) | 索引构建方法和json数据查询方法 | |
CN110955712A (zh) | 基于多数据源的开发api处理方法及装置 | |
CN110580170A (zh) | 软件性能风险的识别方法及装置 | |
CN111339170A (zh) | 数据处理方法、装置、计算机设备及存储介质 | |
CN110647314B (zh) | 技能生成方法、装置及电子设备 | |
CN108694219B (zh) | 一种数据处理方法及装置 | |
US20140149419A1 (en) | Complex event processing apparatus for referring to table within external database as external reference object | |
JP2001222452A (ja) | リレーショナルデータベースシステムにおける問い合わせ処理最適化装置 | |
CN112000661B (zh) | 一种表结构上下文的快速生成方法及系统 | |
CN117573730B (zh) | 数据处理方法、装置、设备、可读存储介质及程序产品 | |
CN113961637B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |