一种实现SQL数据库监控的方法和装置制造方法及图纸

技术编号:6066172 阅读:331 留言:0更新日期:2012-04-11 18:40
本申请实施例公开了一种实现SQL数据库监控的方法和装置。其中,所述方法包括:当虚拟机装载获取数据库连接的数据库驱动类时,更换所述驱动类中原方法的方法名;重新生成与所述驱动类中的原方法名相同的方法,并在重新生成的方法中调用所述驱动类中更换了方法名的原方法;修改方法的返回值,将获取的数据库连接修改为代理连接类来完成业务系统对数据库访问操作的监控。根据本申请实施例,可以在运行期对数据库操作进行监控,采用字节码注入方式提高了执行效率,无需修改业务应用的驱动包。

Method and device for implementing monitoring of SQL database

The embodiment of the present application discloses a method and a device for implementing SQL database monitoring. Among them, the method includes: when the virtual machine load access database connection driver class, method of replacing the drive type central method; method to generate the original methods in a class with the same name with the driver, the original method and call the method in re generation of driving class replacement methods; modify the returned value, the database connection class to modify the connection agent to complete the monitoring service system access to the database. According to the embodiment of the present application, the operation of the database can be monitored during the run time, and the execution efficiency is improved by using a byte code injection mode without modifying the driving package of the service application.

【技术实现步骤摘要】

本申请涉及计算机
,特别是涉及一种实现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 等。由上述实施例可以看出本文档来自技高网
...

【技术保护点】
1.一种实现SQL执行监控的方法,其特征在于,包括:当虚拟机装载用于获取数据库连接的驱动类时,更换所述驱动类中原方法的方法名;重新生成与所述驱动类中的原方法名相同的方法,并在重新生成的方法中调用所述驱动类中更换了方法名的原方法;修改方法的返回值,将获取的数据库连接对象修改为代理连接对象;在所述原方法的连接对象、通过所述连接对象获取的用于执行SQL的对象和执行结果集对象中添加监控代码,生成相应的代理对象,以便通过代理对象实现SQL执行的监控。

【技术特征摘要】

【专利技术属性】
技术研发人员:杨宁王能张晶李莹张敏杰
申请(专利权)人:北京中电普华信息技术有限公司
类型:发明
国别省市:11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1