指令处理装置和指令处理方法

文档序号:6427385阅读:189来源:国知局
专利名称:指令处理装置和指令处理方法
技术领域
本发明涉及计算机技术领域,具体而言,涉及一种指令处理装置和一种指令处理方法。
背景技术
ERP以及其他大型企业软件往往由数百人合作而成。尽管通过代码走查和多层测试,但从统计的观点看,软件中仍然存在一些设计不良之处。其中有一类问题,就是将不良的数据库指令交给关系数据库执行,例如SQL语句。这些命令一旦交给关系数据库执行,会带来巨大的IO或内存开销,进而有可能造成整个ERP系统运行效率缓慢,甚至崩溃。目前的解决方案有,使用代码静态扫描程序找到设计不良的SQL语句。此方法虽然有一定效果,但存在两个显而易见的问题1、无法分析运行时动态产生的SQL命令;2、难于估计实际的执行成本(10/内存),因为数据库表内的数据、索引信息都是动态变化的。还有一种方法,就是设定SQL执行超时的时间。当SQL执行超过预先设定的阀值后,切断SQL语句的执行。这个方法可以在一定程度上缓解SQL语句的“单点问题”扩散至整体,但是SQL执行超时不一定是当前SQL语句功能点的设计问题,可能和关系数据库同时执行的其他SQL命令有关,不能准确的限定问题。因此,需要一种新的用于判定数据库查询指令是否存在设计不良的方式,能够准确判断出哪个指令存在不良问题,并能够阻止其发送到数据库执行,防止对数据库相关的整个系统造成影响。

发明内容
本发明所要解决的技术问题在于,提供一种新的用于判定数据库查询指令是否存在设计不良的方式,能够准确判断出哪个指令存在不良问题,并能够阻止其发送到数据库执行,防止对数据库相关的整个系统造成影响。有鉴于此,本发明提供一种指令处理装置,包括信息获取模块,获取数据库的元数据信息;指令执行估算模块,根据元数据信息,估算待发送给数据库的指令在被执行时的资源消耗;指令处理模块,判断资源消耗是否超过预设阈值,并在判断结果为否时,允许指令发送至数据库,在判断结果为是时,禁止指令发送至数据库。通过该技术方案,能够在指令发送到数据库执行前,通过判断其是否占用了太多资源,确认是否允许其执行,防止了不良指令占用太多资源而对基于数据库的整个系统造成影响。在上述技术方案中,优选地,资源消耗包括执行指令所需要的数据量;执行指令将要输出的结果数据量;执行指令所需要占用的内存。在上述技术方案中,优选地,指令处理模块还在判断结果为是时,通过日志记录指令。通过该技术方案,有利于快速找到可能有缺陷的指令,并对其进行改进。在上述技术方案中,优选地,信息获取模块按预定时间或周期,获取元数据信息。在上述技术方案中,优选地,元数据信息包括表描述、字段描述、索引描述以及每个表的数据量、字段数据分布情况统计。本发明还提供一种指令处理方法,包括步骤202,获取数据库的元数据信息;步骤204,根据元数据信息,估算待发送给数据库的指令在被执行时的资源消耗;步骤206,判断资源消耗是否超过预设阈值,并在判断结果为否时,允许指令发送至数据库,在判断结果为是时,禁止指令发送至数据库。通过该技术方案,能够在指令发送到数据库执行前,通过判断其是否占用了太多资源,确认是否允许其执行,防止了不良指令占用太多资源而对基于数据库的整个系统造成影响。在上述技术方案中,优选地,资源消耗包括执行指令所需要的数据量;执行指令将要输出的结果数据量;执行指令所需要占用的内存。在上述技术方案中,优选地,在步骤206中,在判断结果为是时,还包括通过日志记录指令。通过该技术方案,有利于快速找到可能有缺陷的指令,并对其进行改进。在上述技术方案中,优选地,在步骤202中,按预定时间或周期,获取元数据信息。在上述技术方案中,优选地,元数据信息包括表描述、字段描述、索引描述以及每个表的数据量、字段数据分布情况统计。通过以上技术方案,可以实现一种指令处理装置和一种指令处理方法,能够准确判断出哪个指令存在不良问题,并能够阻止其发送到数据库执行,防止对数据库相关的整个系统造成影响。


图1是根据本发明的一个实施例的指令处理装置的框图;图2是根据本发明的一个实施例的指令处理方法的流程图;图3是根据本发明的一个实施例的指令处理装置的工作示意图。
具体实施例方式为了能够更清楚地理解本发明的上述目的、特征和优点,下面结合附图和具体实施方式
对本发明进行进一步的详细描述。在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是,本发明还可以采用其他不同于在此描述的其他方式来实施,因此,本发明并不限于下面公开的具体实施例的限制。图1是根据本发明的一个实施例的指令处理装置的框图。如图1所示,本发明提供一种指令处理装置100,包括信息获取模块102,获取数据库的元数据信息;指令执行估算模块104,根据元数据信息,估算待发送给数据库的指令在被执行时的资源消耗;指令处理模块106,判断资源消耗是否超过预设阈值,并在判断结果为否时,允许指令发送至数据库,在判断结果为是时,禁止指令发送至数据库。通过该技术方案,能够在指令发送到数据库执行前,通过判断其是否占用了太多资源,确认是否允许其执行,防止了不良指令占用太多资源而对基于数据库的整个系统造成影响。在上述技术方案中,资源消耗包括执行指令所需要的数据量;执行指令将要输出的结果数据量;执行指令所需要占用的内存。在上述技术方案中,指令处理模块106还在判断结果为是时,通过日志记录指令。通过该技术方案,有利于快速找到可能有缺陷的指令,并对其进行改进。在上述技术方案中,信息获取模块102按预定时间或周期,获取元数据信息。在上述技术方案中,元数据信息包括表描述、字段描述、索引描述以及每个表的数据量、字段数据分布情况统计。图2是根据本发明的一个实施例的指令处理方法的流程图。如图2所示,本发明还提供一种指令处理方法,包括步骤202,获取数据库的元数据信息;步骤204,根据元数据信息,估算待发送给数据库的指令在被执行时的资源消耗; 步骤206,判断资源消耗是否超过预设阈值,并在判断结果为否时,允许指令发送至数据库, 在判断结果为是时,禁止指令发送至数据库。通过该技术方案,能够在指令发送到数据库执行前,通过判断其是否占用了太多资源,确认是否允许其执行,防止了不良指令占用太多资源而对基于数据库的整个系统造成影响。在上述技术方案中,资源消耗包括执行指令所需要的数据量;执行指令将要输出的结果数据量;执行指令所需要占用的内存。在上述技术方案中,在步骤206中,在判断结果为是时,还包括通过日志记录指令。通过该技术方案,有利于快速找到可能有缺陷的指令,并对其进行改进。在上述技术方案中,在步骤202中,按预定时间或周期,获取元数据信息。在上述技术方案中,元数据信息包括表描述、字段描述、索引描述以及每个表的数据量、字段数据分布情况统计。图3是根据本发明的一个实施例的指令处理装置的工作示意图。以下结合图3,对根据本发明实施例的指令处理装置的工作流程进行说明。1.指令处理装置300调取数据库元数据信息304。首先,指令处理装置300在启动时从数据库302中调取数据库元数据信息304。在该装置运行后,还会周期性同步元数据信息304。其中,缓存在指令处理装置300的数据库元数据信息304包含以下内容“表描述”、“字段描述”、“索引描述”和“每个表的数据量”、“字段数据分布情况统计”等等。这些元数据被用于进行SQL执行计划估计。2.指令处理装置300执行SQL执行计划估计。此处分析需要执行的SQL语句,需要执行的语句可能包括正常SQL语句306和问题SQL语句308。指令处理装置300读取缓存在进程(就是一般操作系统的进程,行业通用术语)内的SQL元数据信息304。执行计划估计,以估算计算消耗。当计算消耗超过预先设定的阀值,则阻断SQL命令向数据库发送。具体分析的数据有I/O分析检查SQL语句的查询条件是否建立在索引基础之上。如果查询可以使用索引信息,允许SQL语句发送至数据库,否则查看查询所需的表的数据量,如果大于指定阀值A (比如1万),则禁止其发送至数据库。内存占用分析检查SQL语句内的Join是否会产生巨大的笛卡儿积。如果Join 产生的笛卡尔积超过了指定阀值B (比如5000)列或者超过了阀值C(比如100万)行,则禁止该SQL语句发送至数据库。阀值A,B,C按照经验根据具体情况设定。这些值的设定并不影响本发明的技术方案。
3.正常的SQL语句306。对于能够通过SQL执行计划估计的SQL语句306,指令处理装置300将其转发到数据库302,数据结果返回并不通过该装置,而是直接交给具体的应用模块,返回给模块中的 SQL语句。4.有问题的SQL语句308。对于不能通过SQL执行计划估计的SQL语句308,指令处理装置300会被阻断这些SQL命令向数据库302的提交,它们不会被数据库302执行。出现问题的语句308和当前执行堆栈(线程的一部分,行业通用术语)被记录在运行日志中,方便日后分析问题SQL 语句308的来源。根据以上指令处理装置300的示例如下
元数据AAI_TransEntryHead表(交易分录表)存在1 万条记录其中包含的字段AttachmentCount (附件数)列没有建立索引输入select * from AAI TransEntryHead where AttachementCount > 2 (查找附件数大于2的交易分录)输出由于AttachementCount没有建立索引,且192万 > 阀值A ( 1 万)。所以指令处理装置阻断这条查询语句的执行。并且在运行曰志中记录相关阻断信息。
权利要求
1.一种指令处理装置,其特征在于,包括 信息获取模块,获取数据库的元数据信息;指令执行估算模块,根据所述元数据信息,估算待发送给所述数据库的指令在被执行时的资源消耗;指令处理模块,判断所述资源消耗是否超过预设阈值,并在判断结果为否时,允许所述指令发送至所述数据库,在判断结果为是时,禁止所述指令发送至所述数据库。
2.根据权利要求1所述的指令处理装置,其特征在于,所述资源消耗包括 执行所述指令所需要的数据量;执行所述指令将要输出的结果数据量; 执行所述指令所需要占用的内存。
3.根据权利要求1所述的指令处理装置,其特征在于,所述指令处理模块还在判断结果为是时,通过日志记录所述指令。
4.根据权利要求1所述的指令处理装置,其特征在于,所述信息获取模块按预定时间或周期,获取所述元数据信息。
5.根据权利要求1至4中任一项所述的指令处理装置,其特征在于,所述元数据信息包括表描述、字段描述、索引描述以及每个表的数据量、字段数据分布情况统计。
6.一种指令处理方法,其特征在于,包括 步骤202,获取数据库的元数据信息;步骤204,根据所述元数据信息,估算待发送给所述数据库的指令在被执行时的资源消耗;步骤206,判断所述资源消耗是否超过预设阈值,并在判断结果为否时,允许所述指令发送至所述数据库,在判断结果为是时,禁止所述指令发送至所述数据库。
7.根据权利要求6所述的指令处理方法,其特征在于,所述资源消耗包括 执行所述指令所需要的数据量;执行所述指令将要输出的结果数据量; 执行所述指令所需要占用的内存。
8.根据权利要求6所述的指令处理方法,其特征在于,在所述步骤206中,在判断结果为是时,还包括通过日志记录所述指令。
9.根据权利要求6所述的指令处理方法,其特征在于,在所述步骤202中,按预定时间或周期,获取所述元数据信息。
10.根据权利要求6至9中任一项所述的指令处理方法,其特征在于,所述元数据信息包括表描述、字段描述、索引描述以及每个表的数据量、字段数据分布情况统计。
全文摘要
本发明提供一种指令处理装置和一种指令处理方法。其中,指令处理装置包括信息获取模块,获取数据库的元数据信息;指令执行估算模块,根据元数据信息,估算待发送给数据库的指令在被执行时的资源消耗;指令处理模块,判断资源消耗是否超过预设阈值,并在判断结果为否时,允许指令发送至数据库,在判断结果为是时,禁止指令发送至数据库。通过本发明,能够在指令发送到数据库执行前,通过判断其是否占用了太多资源,确认是否允许其执行,防止了不良指令占用太多资源而对基于数据库的整个系统造成影响。
文档编号G06F17/30GK102393842SQ201110177239
公开日2012年3月28日 申请日期2011年6月28日 优先权日2011年6月28日
发明者叶琳, 杨历 申请人:用友软件股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1