对java操作数据库的监控系统的制作方法

文档序号:6381221阅读:1507来源:国知局
专利名称:对java操作数据库的监控系统的制作方法
技术领域
一种涉及数据库操作的系统,具体为一种数据库监控系统。
现有技术基于数据库系统的应用十分广泛,各种工商业和科研单位都需要稳定安全的数据库作系统为支撑。例如一般商业公司的数据库系统主要用于为用户提供客户信息,数据库中的数据包括客户的个人信息、客户通过各种途径订购和使用公司业务的数据。客服人员为用户提供语音咨询服务时,需要快速查询客户信息,以及客户订购和使用业务的情况,对数据库系统的调用极为频繁,对数据库系统的稳定性有着极高的要求。在此情况下,数据库连接池作为一个存放了一定数量的与数据库服务器的物理连接的容器,一旦未释放连接将会导致数据库连接池满而无法提供可用连接,使得应用程序操作数据库失败,严重影响系统稳定性。查找未释放连接的代码目前还没有简单、有效的解决办法,通常需要查找所有使用数据库连接的代码程序,这种方法不仅非常耗时,而且不容易找出具体的有问题的代码。执行一个差的SQL语句有时会导致数据库系统的堵塞甚至崩溃,如果要找出这条SQL语句非常难,需要由专项通过数据库工具可以找出来,普通程序员要解决这个问题往往束手无策。同时目前还没有好的拦截和记录应用程序执行的所有SQL语句的方法。

发明内容
为了解决上述技术问题,本发明所提供一种可以对java操作数据库的行为进行监控的系统。本发明所提出的一种数据监控系统,包数据库计算机组,监控计算机组,数据库计算机组和监控计算机组通过网络连接,数据库计算机组包括一台以上的计算机。其中,所述数据库计算机运行一数据库,所述数据库包括一连接池,监控计算机组I使用JAVA的JDBC接口,通过JAVA的代理模式对DataSource进行代理,获得DataSourceProxy,调用 DataSourceProxy 的 getConnection 方法获得 ConnectionProxy,在 getConnection 过程中,DataSourceProxy 将真实的 Connection 注入 ConnectionProxy,并通过Monitor类记录获取连接的时间,Connection和当前线程堆栈;通过java的代理模式对 Connection, Statement 和 PreparedStatement 进行代理,获得 ConnectionProxy,StatementProxy 和 PreparedStatementProxy,拦截 ConnectionProxy, StatementProxy 和PreparedStatementProxy中的SQL语句,将SQL语句记录到日志或Monitor类的一个静态属性中在执行SQL语句前记录执行开始时间,在SQL语句执行结束后,清除Monitor类静态属性中的SQL语句和执行开始时间,比较执行开始时间与执行结束时间即可得出执行时间,并记录到日志文件。其中,监控计算机组用于查看Monitor类的静态属性,查看到数据库连接的使用情况,使用数据库连接的方法,占用数据库连接的时间。
其中,监控计算机组用于查看Monitor类的静态属性,定位未释放连接的代码,释放连接。其中,监控计算机组用于查看Monitor类的静态属性,确定数据库正在执行的SQL语句,SQL语句经执行时间。本发明通过设置监控计算组对数据库计算机组的运行的数据库进行监控,特别是监控java对数据库的操作行为,使得普通程序员可以及时发现问题,例如一个导致数据库系统的堵塞的SQL语句,或未释放数据库连接。进而使得数据库稳定性提高,减少了运行数据库的计算机组为了处理数据库堵塞或奔溃的峰值运算时间及运行数据库的计算机组的处理器的负载。


图1为对java操作数据库的监控系统的示意图。图例说明1.数据库计算机组2.监控计算机组
具体实施例方式在本发明设计的一项优选例中,如附图1所示运行数据库的数据库计算机组1、监控计算机组2,监控计算机组2通过局域网与数据库计算机组I连接。在监控计算机组2 端,安装 java 客户端,对 DataSource, Connection, Statement和PreparedStatement的代理,在代理方法里实现对数据库连接的监控,SQL语句执行时间的监控和SQL语句的拦截,编辑和记录。通过对DataSource和Connection的代理实现。应用程序通过调用DataSourceProxy的getConnection方法获得ConnectionProxy,在 getConnection 方法里,DataSourceProxy 会将真实的 Connection 注入ConnectionProxy,并通过Monitor类记录获取连接的时间,Connection和当前线程的堆栈,通过对堆栈的分析还可以只记录某些包下的某些类及类下的某些方法。当应用程序调用ConnectionProxy的close方法释放连接时,ConnectionProxy先调用所代理的Connection的close方法,释放连接,然后清除Monitor类中当前线程获取连接的时间,Connection和堆栈记录。当数据库连接池满了时,只需检查未清除记录的堆栈信息,即可知道未释放连接的代码的大致位置。SQL语句执行时间的监控和SQL语句的拦截,编辑和记录。通过对Connection, Statement 和 PreparedStatement 的代理,在所有带有 sql参数的方法里实现代理方法,即可拦截得到SQL语句,此时可以将SQL语句记录到日志或Monitor类的一个静态属性中,或者编辑SQL语句,再将编辑后的SQL语句作为真正执行的SQL语句。在执行SQL语句前记录执行开始时间,在SQL语句执行后,清除Monitor类静态属性中的SQL语句和执行时间,比较开始时间即可得出执行时间,并记录到日志文件,在释放连接时清除SQL语句和执行时间。当数据库堵塞时,检查未清除的SQL语句,即可知道哪些SQL语句可能导致数据库堵塞。使用本发明提供的方案后,通过监控计算机组I监控系统对数据库访问,提供的监控功能包括
显示数据库计算机组I正在使用的数据库连接数和空闲连接数。显示数据库计算机组I正在执行的sql语句、执行的时间点、执行了多长时间、以及执行sql的应用系统账号。显示数据库计算机组I正在使用数据库连接的代码堆栈信息和获取数据库连接的时间。该系统上线一段时间后运行稳定高效,在测试和正式上线初期,因为使用本发明提供的数据库操作监控方案,迅速解决了所有未释放数据库连接导致系统不稳定的问题,同时因为能监控sql语句的执行时间,为优化系统提供有力的帮助,大大提高了系统的性倉泛。以上所述仅为本发明的具体实施例而已,并不用于限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种数据监控系统,包括数据库,监控计算机组,所述数据库计算机组和所述监控计算机组通过网络连接,所述数据库计算机组包括一台以上的计算机,其特征在于所述数据库计算机运行一数据库,所述数据库包括一连接池,监控计算机组使用JAVA的 JDBC接口,通过JAVA的代理模式对DataSource进行代理,获得DataSourceProxy,调用 DataSourceProxy 的 getConnection 方法获得 ConnectionProxy,在 getConnection 过程中,DataSourceProxy 将真实的 Connection 注入 ConnectionProxy,并通过 Monitor类记录获取连接的时间,Connection和当前线程堆栈;通过java的代理模式对 Connection, Statement 和 PreparedStatement 进行代理,获得 ConnectionProxy, StatementProxy 和 PreparedStatementProxy,拦截 ConnectionProxy, StatementProxy 和 PreparedStatementProxy中的SQL语句,将SQL语句记录到日志或Monitor类的一个静态属性中在执行SQL语句前记录执行开始时间,在SQL语句执行结束后,清除Monitor类静态属性中的SQL语句和执行开始时间,比较执行开始时间与执行结束时间即可得出执行时间,并记录到日志文件。
2.根据权利要求1所述的一种数据库监控系统,其特征在于所述监控计算机组用于查看Monitor类的静态属性,查看到数据库连接的使用情况,使用数据库连接的方法,占用数据库连接的时间。
3.根据权利要求1所述的一种数据库监控系统,其特征在于所述监控计算机组用于查看Monitor类的静态属性,定位未释放连接的代码,释放连接。
4.根据权利要求1所述的一种数据库监控系统,其特征在于所述监控计算机组用于查看Monitor类的静态属性,确定数据库正在执行的SQL语句,SQL语句经执行时间。
全文摘要
一种数据库监控系统,包数据库计算机组1,监控计算机组2,数据库计算机组1和监控计算机组2通过网络连接。其中所述数据库计算机组1运行一数据库,所述数据库包括一连接池,监控计算机组2使用JAVA数据库连接JDBC接口通过getConnection获得ConnectionProxy,在getConnection过程中,DataSourceProxy将真实的Connection注入ConnectionProxy,并通过Monitor类记录获取连接的时间,Connection和当前线程堆栈。通过设置监控计算组对数据库计算机组的运行的数据库进行监控,使得普通程序员可以及时发现问题,例如一个导致数据库系统的堵塞的SQL语句,或未释放数据库连接。进而使得数据库稳定性提高,减少了运行数据库的计算机组为了处理数据库堵塞或奔溃的峰值运算时间及运行数据库的计算机组的处理器的负载。
文档编号G06F11/34GK103034679SQ20121045634
公开日2013年4月10日 申请日期2012年11月14日 优先权日2012年11月14日
发明者曾应玉 申请人:上海百事通信息技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1