一种实现sql数据库监控的方法和装置的制作方法

文档序号:6354902阅读:409来源:国知局
专利名称:一种实现sql数据库监控的方法和装置的制作方法
技术领域
本申请涉及计算机技术领域,特别是涉及一种实现SQL数据库监控的方法和装置。
背景技术
随着社会的发展和科技的进步,各个行业的信息化建设正在如火如荼的进行中。 综合各种技术而开发出来的项目良莠不齐,如何实现对各种系统的性能的监控,尤其是对 SQL (Structured Query Language,结构化的查询语言)数据库的执行情况的监控,进一步 发现系统瓶颈,提升系统性能以及稳定性,已成为迫切需要解决的技术问题。目前实现SQL数据库监控的方式可以分为以下几种第一种是从数据库层面监控 SQL数据库的执行,例如,OraclelOg数据库本身就提供了一些监控功能。但是,第一种方式 只能监控数据库内部的执行情况,不能客观地得到在网络环境下,从业务系统发出执行命 令到接收到执行结果这段时间内数据库的执行情况,因此,不能反映应用程序执行数据库 操作的性能。第二种是修改业务代码,即,在执行SQL数据库的业务代码中加入监控代码。虽然 第二种方式可以克服第一种方式中存在的缺陷,但是,在第二种方式中,需要修改原有的业 务代码来加入监控代码使两者混杂在一起,这样增加了业务和监控的耦合性,降低了业务 系统的可维护性。第三种方式是采用动态代理的方式,即,采用动态代理机制来修改数据库驱动类。 请参阅图1,其为现有技术中的动态代理结构示意图。如图1所示,被代理类为数据库操作 驱动类,原执行方法为获取数据库连接的方法,代理类需要实现Evocation Handler接口, 并重写接口中的invoke方法。由于代理类需要采用反射的方式才能调用其中的原执行方 法,因此,代理类在进行监控时的执行效率较低,因此不适合在运行期对SQL进行监控。

发明内容
为了解决上述技术问题,本申请实施例提供了一种实现SQL数据库监控的方法和 装置,以提高代理类在进行监控时的执行效率,同时,保证在运行期对SQL数据库实现监 控。本申请实施例公开了如下技术方案一种实现SQL数据库监控的方法,包括当虚拟机装载用于获取数据库连接的驱 动类时,更换所述驱动类中原方法的方法名;重新生成与所述驱动类中的原方法名相同的 方法,并在重新生成的方法中调用所述驱动类中更换了方法名的原方法;修改方法的返回 值,将获取的数据库连接对象修改为代理连接对象;在所述原方法的连接对象、通过所述连 接对象获取的用于执行SQL的对象和执行结果集对象中添加监控代码,生成相应的代理对 象,以便通过代理对象实现SQL执行的监控。优选的,所述方法还包括在虚拟机装载获取数据库连接的驱动类之前,读取监控配置文件,当所述监控配置文件指示执行监控时,将所述驱动类修改为代理驱动类。优选的,当对SQL数据库的连接或者事务的开启关闭进行监控时,所述驱动类的 连接对象为Connection。一种监控SQL数据库的装置,包括方法名更换单元,用于当虚拟机装载用于获取 数据库连接的驱动类时,更换所述驱动类中原方法的方法名;生成单元,用于重新生成与所 述驱动类中的原方法名相同的方法,并在重新生成的方法中调用所述驱动类中更换了方法 名的原方法;添加单元,用于在所述原方法的连接对象、通过所述连接对象获取的用于执行 SQL的对象和执行结果集对象中添加监控代码,生成相应的代理对象,以便通过代理对象实 现SQL执行的监控。优选的,所述装置还包括读取单元,用于在虚拟机状态执行SQL数据库操作的驱 动类之前,读取监控配置文件,当所述监控配置文件指示执行监控时,将所述驱动类修改为 代理驱动类。优选的,当对SQL数据库的连接或者事务的开启关闭进行监控时,所述驱动类的 连接对象为Connection。由上述实施例可以看出,与现有技术不同,本申请实施例在业务应用执行的过程 中,动态修改数据库操作的驱动类,并对数据库访问相关类进行代理,实现对数据库SQL执 行的监控。因此,具有以下优点本申请实施例在业务应用执行的过程中,能够在运行期通过字节码注入方式修改 应用程序驱动类,没有采用反射方式,提高了代理类在进行监控时的执行效率。可以在真实 的业务系统网络环境下对SQL数据库的性能进行监控,准确反映系统的性能。在不更改已有的业务代码的基础上实现监控,完成监控程序与业务程序的解耦, 不仅减少了监控过程对已有的系统的影响,降低了系统风险,而且也便于维护业务程序,无 需修改业务系统的驱动程序包。


为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现 有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而 言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。图1为现有技术中的动态代理结构示意图;图2为本申请一种实现SQL数据库监控的方法的一个实施例的流程图;图3为本申请一种实现SQL数据库监控的方法的另一个实施例的流程图;图4为本申请一种实现SQL数据库监控的方法的另一个实施例的流程图;图5为本申请一种实现SQL数据库监控的装置的一个实施例的结构示意图;图6为本申请一种实现SQL数据库监控的装置的另一个实施例的结构示意图。
具体实施例方式为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图对本申请 实施例进行详细描述。实施例一
请参阅图2,其为本申请一种实现SQL数据库监控的方法的一个实施例的流程图, 该方法包括以下步骤步骤201 当虚拟机装载获取数据库操作的驱动类时,更换所述驱动类中原方法 的方法名;例如,在采用Spring框架的业务应用系统中,当虚拟机装载执行数据库操作的驱 动类DriverManagerDataSource时,采用字节码注入的方式修改所有获取连接的方法,如 将方法名 getConnectionFromDriverManager,更改成 getConnectionFromDriverManager_ $Monitor。步骤202 重新生成与所述驱动类中的原方法名相同的方法,并在重新生成的方 法中调用所述驱动类中更换了方法名的原方法;仍 旧 以 上 述 DriverManagerDataSource 类 中 的 getConnectionFromDriver-Manager 为例,重新生成与 getConnectionFromDriverManager 这个原方法名相同的方法,并在重新生成的方法中调用DriverManagerDataSource类中更 换了方法名的原方法,即调用 getConnectionFromDriverManager_$Monitor。步骤203 修改方法的返回值,将获取的数据库连接对象修改为代理连接对象;仍以上述 DriverManagerDataSource 类中的 getConnectionFromDriver-Manager 为例,将返回值 Connection 改为 ProxyConnection。步骤204 在所述原方法的连接对象、通过所述连接对象获取的用于执行SQL的对 象和执行结果集对象中添加监控代码,生成相应的代理对象,以便通过代理连接对象实现 SQL执行的监控。如将 Connection 对象修改为 ProxyConnection, Statement 修改为 ProxyStatement 等。由上述实施例可以看出,与现有技术不同,本申请实施例在业务应用执行的过程 中,修改获取数据库连接的驱动类,返回代理连接对象。因此,具有以下优点本申请实施例在业务应用执行的过程中,能够在运行期对SQL数据库的监控。采 用字节码注入的方式来完成对数据库驱动类的修改,避免采用反射的方式调用其中的原执 行方法,植入在驱动类中的监控代码顺序执行,提高了代理类在进行监控时的执行效率。可以在真实的业务系统网络环境下对SQL数据库的性能进行监控,准确反映系统 的性能。在不更改已有的业务代码的基础上实现监控,完成监控程序与业务程序的解耦, 不仅减少了监控过程对已有的系统的影响,降低了系统风险,而且也便于维护业务程序。实施例二本实施例还提供了一种实现SQL数据库监控的方法,本实施例与实施例一的区别 在于在虚拟机装载获取数据库连接的驱动类之前,读取监控配置文件,由于该监控配置文 件指示了是否需要执行监控,因此,虚拟机根据监控配置文件的指示,当需要执行监控时, 才将驱动类修改为代理驱动类。请参阅图3,其为本申请一种实现SQL数据库监控的方法的 另一个实施例的流程图,该方法包括以下步骤步骤301 虚拟机读取监控配置文件;步骤302 当所述监控配置文件指示执行监控时,在虚拟机装载获取数据库连接的驱动类时,更换所述驱动类中原方法的方法名;步骤303 重新生成与所述驱动类中的原方法名相同的方法,并在重新生成的方 法中调用所述驱动类中更换了方法名的原方法;步骤304 在所述原方法的连接对象、通过所述连接对象获取的用于执行SQL的 对象和执行结果集对象中添加监控代码,生成相应的代理对象,以便通过代理对象实现SQL 执行的监控。上述步骤302-步骤304已经在实施例一中进行了说明,故此处不再赘述。需要说明的是,当监控配置文件指示不执行监控时,虚拟机正常装载执行SQL数 据库操作的驱动类。由上述实施例可以看出,与现有技术不同,本申请实施例在业务应用执行的过程 中,在执行SQL数据库操作的驱动类中添加监控代码,实现将驱动类修改为代理驱动类。因 此,具有以下优点本申请实施例在业务应用启动的过程中,能够根据配置文件决定是否对SQL数据 库进行监控。采用字节码注入的方式来完成对数据库驱动类的修改,无需修改业务应用的 数据库驱动包,避免采用反射的方式调用其中的原执行方法,提高了执行效率。可以在真实的业务系统网络环境下对SQL数据库的性能进行监控,准确反映系统 的性能。在不更改已有的业务代码的基础上实现监控,完成监控程序与业务程序的解耦, 不仅减少了监控过程对已有的系统的影响,降低了系统风险,而且也便于维护业务程序。实施例三本实施例提供了一种通过代理数据库的驱动类来完成SQL监控的方法。请参阅图 4,其为本申请一种实现SQL数据库监控的方法的另一个实施例的流程图,该方法包括以下 步骤步骤401 通过修改的数据库驱动类获取代理连接类;步骤402 代理连接类在完成原有连接功能的同时记录监控信息,通过代理连接 类获取的执行对象为代理Matement对象(如,ProxyMatement);步骤403 代理执行对象ftOxyStatement在执行SQL的同时记录监控信息;步骤404 代理结果集对象I^roxyResultSet记录结果集信息。由上述实施例可以看出,与现有技术不同,本申请实施例在业务应用执行的过程 中,修改数据库驱动类,将获取的数据库连接修改为代理连接类,通过数据库操作相关的代 理类来完成对SQL执行的监控。因此,具有以下优点本申请实施例在业务应用执行的过程中,能够在运行期对SQL进行监控,采用字 节码注入的方式来完成对数据库驱动类的修改,避免采用反射的方式调用其中的原执行方 法,植入在驱动类中的监控代码顺序执行,提高了代理类在进行监控时的执行效率。可以在真实的业务系统网络环境下对SQL数据库的性能进行监控,准确反映系统 的性能。在不更改已有的业务代码的基础上实现监控,完成监控程序与业务程序的解耦, 不仅减少了监控过程对已有的系统的影响,降低了系统风险,而且也便于维护业务程序。实施例四
与上述一种实现SQL数据库监控的方法相对应,本申请实施例还提供了一种实现 SQL数据库监控的装置。请参阅图5,其为本申请一种实现SQL数据库监控的装置的一个实 施例的结构示意图,包括方法名更换单元501、生成单元502和添加单元503。下面结合该 装置的工作原理进一步介绍其内部结构以及连接关系。方法名更换单元501,用于当虚拟机装载执行SQL数据库操作的驱动类时,更换所 述驱动类中原方法的方法名;生成单元502,用于重新生成与所述驱动类中的原方法名相同的方法,并在重新生 成的方法中调用所述驱动类中更换了方法名的原方法;添加单元503,用于在所述原方法的连接对象、通过所述连接对象获取的用于执行 SQL的对象和执行结果集对象中添加监控代码,生成相应的代理对象,以便通过代理对象实 现SQL执行的监控。优选的,请参阅图6,其为本申请一种实现SQL数据库监控的装置的一个实施例的 结构示意图,如图6所示,该装置还包括读取单元,用于在虚拟机驱动类之前,读取监控配 置文件,当所述监控配置文件指示执行监控时,将所述驱动类修改为代理驱动类。优选的,当对SQL数据库的连接或者事务的开启关闭进行监控时,所述驱动类的 连接对象为Connection。由上述实施例可以看出,与现有技术不同,本申请实施例在业务应用执行的过程 中,修改数据库驱动类,将获取的数据库连接修改为代理连接类,通过数据库操作相关的代 理类来完成对SQL执行的监控。因此,具有以下优点本申请实施例在业务应用执行的过程中,能够在运行期对SQL进行监控,采用字 节码注入的方式来完成对数据库驱动类的修改,避免采用反射的方式调用其中的原执行方 法,植入在驱动类中的监控代码顺序执行,提高了代理类在进行监控时的执行效率。可以在真实的业务系统网络环境下对SQL数据库的性能进行监控,准确反映系统 的性能。在不更改已有的业务代码的基础上实现监控,完成监控程序与业务程序的解耦, 不仅减少了监控过程对已有的系统的影响,降低了系统风险,而且也便于维护业务程序。需要说明的是,本领域普通技术人员可以理解实现上述实施例方法中的全部或部 分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机 可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的 存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory, ROM)或随机存储记忆体 (Random AccessMemory, RAM)等。以上对本申请所提供的一种实现SQL数据库监控的方法和装置进行了详细介绍, 本文中应用了具体实施例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是 用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请 的思想,在具体实施方式
及应用范围上均会有改变之处,综上所述,本说明书内容不应理解 为对本申请的限制。
权利要求
1.一种实现SQL执行监控的方法,其特征在于,包括当虚拟机装载用于获取数据库连接的驱动类时,更换所述驱动类中原方法的方法名;重新生成与所述驱动类中的原方法名相同的方法,并在重新生成的方法中调用所述驱 动类中更换了方法名的原方法;修改方法的返回值,将获取的数据库连接对象修改为代理连接对象;在所述原方法的连接对象、通过所述连接对象获取的用于执行SQL的对象和执行结果 集对象中添加监控代码,生成相应的代理对象,以便通过代理对象实现SQL执行的监控。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括在虚拟机装载用于获取 数据库连接的驱动类之前,读取监控配置文件,当所述监控配置文件指示执行监控时,修改 所述驱动类。
3.根据权利要求1或2所述的方法,其特征在于,当对SQL数据库的连接或者事务的开 启关闭进行监控时,所述驱动类的连接对象为Connection。
4.一种监控SQL数据库的装置,其特征在于,包括方法名更换单元,用于当虚拟机装载用于获取数据库连接的驱动类时,更换所述驱动 类中原方法的方法名;生成单元,用于重新生成与所述驱动类中的原方法名相同的方法,并在重新生成的方 法中调用所述驱动类中更换了方法名的原方法;添加单元,用于在所述原方法的连接对象、通过所述连接对象获取的用于执行SQL的 对象和执行结果集对象中添加监控代码,生成相应的代理对象,以便通过代理对象实现SQL 执行的监控。
5.根据权利要求4所述的装置,其特征在于,所述装置还包括读取单元,用于在虚拟 机驱动类之前,读取监控配置文件,当所述监控配置文件指示执行监控时,将所述驱动类修 改为代理驱动类。
6.根据权利要求4或5所述的装置,其特征在于,当对SQL数据库的连接或者事务的开 启关闭进行监控时,所述驱动类的连接对象为Connection。
全文摘要
本申请实施例公开了一种实现SQL数据库监控的方法和装置。其中,所述方法包括当虚拟机装载获取数据库连接的数据库驱动类时,更换所述驱动类中原方法的方法名;重新生成与所述驱动类中的原方法名相同的方法,并在重新生成的方法中调用所述驱动类中更换了方法名的原方法;修改方法的返回值,将获取的数据库连接修改为代理连接类来完成业务系统对数据库访问操作的监控。根据本申请实施例,可以在运行期对数据库操作进行监控,采用字节码注入方式提高了执行效率,无需修改业务应用的驱动包。
文档编号G06F17/30GK102110162SQ20111004527
公开日2011年6月29日 申请日期2011年2月24日 优先权日2011年2月24日
发明者张敏杰, 张晶, 李莹, 杨宁, 王能 申请人:北京中电普华信息技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1