2022年2022年监控Hibernate执行SQL .pdf

上传人:Che****ry 文档编号:27233496 上传时间:2022-07-23 格式:PDF 页数:6 大小:328.26KB
返回 下载 相关 举报
2022年2022年监控Hibernate执行SQL .pdf_第1页
第1页 / 共6页
2022年2022年监控Hibernate执行SQL .pdf_第2页
第2页 / 共6页
点击查看更多>>
资源描述

《2022年2022年监控Hibernate执行SQL .pdf》由会员分享,可在线阅读,更多相关《2022年2022年监控Hibernate执行SQL .pdf(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、1 监控 Hibernate 执行 SQL 1引言几乎80% - 85% 的数据库性能问题是由于应用数据库的设计或者应用程序本身的代码所引起的。 因此良好的事务处理能力需要在设计应用程序的时候,在设计数据库的时候就考虑到性能和伸缩性。在我们使用Java EE开发企业级应用程序的过程中,总会涉及到系统的性能问题,并且都会与数据库进行打交道。当我们碰到数据库性能优化时,最有效的就是直接跟踪SQL 语句的执行情况,对SQL 语句写法进行优化、对索引进行优化,效果往往非常显著。Hibernate 是当前非常流行的数据库DAO 组件,在使用Hibernate 的时候,有一个参数可以在控制台打印出SQL

2、: 但是即便如此,对于参数化SQL ,依然没有办法全部显示出来,下述的情况想必大家都遇到过吧:Hibernate: select * from ( select dictgroup0_.group_id as group1_0_, dictgroup0_.delete_flag as delete2_0_, dictgroup0_.group_code as group3_0_, dictgroup0_.group_desc as group4_0_, dictgroup0_.group_name as group5_0_, dictgroup0_.test_mode as test6_0_

3、from dict_table_group dictgroup0_ where dictgroup0_.delete_flag=? and dictgroup0_.test_mode=? ) where rownum = ? 因为 “?”处没有具体数值,其实这样的语句对开发,调整SQL语句及程序的帮助是非常有限的,拷贝到类似于PLSQL Developer或者 TOAD中无法看到SQL执行的结果。本文通过在Java IDE工具中集成SQL语句拦截工具和SQL语句显示工具完成监控参数化SQL 。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - -

4、- - - 名师精心整理 - - - - - - - 第 1 页,共 6 页 - - - - - - - - - 2 1.1预期读者1、开发人员:使用Java进行应用系统服务层、数据访问层开发。能够使用Java IDE工具,如 Eclipse、IntelliJ IDEA 等。2工具介绍P6Spy :本文使用P6Spy作为拦截 SQL的工具, 是一个可以用来在应用程序中拦截和修改数据操作语句的开源框架,相当于一个SQL 语句的记录器, P6Spy 用 Log4J 来记录JDBC 调用的日记信息。本文只使用P6Log,不使用P6Outage。该软件工作原理如下:P6Spy 就是一个代理, 它只做了

5、一层对JDBC 驱动的拦截, 然后转发出去, 与实际的应用程序没有任何的耦合性,除了在配置中将驱动程序改成P6Spy 的拦截驱动外,程序其他地方并不需要做任何的改变。这层拦截器可能会给系统带来略微的性能下降,但对程序其他方面没有任何的影响。相对于这一点点的性能下降,相比它所带来的好处,在开发环境中对于开发人员来说是完全可以忽略不计的。Sqlprofiler :这个小工具可以实时地显示数据库查询的情况,并能够和P6Spy 关联。其它的信息也会进行收集和显示,比如: 单个数据库请求的时间、一类请求的时间以及所有请求的时间。此外,该工具能够建立统计分析,并生成索引脚本,不过这个特性不在本文的讨论范畴

6、名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 6 页 - - - - - - - - - 3 3安装与设置准备工作如下:1、 下载 P6Spy,下载地址: http:/ 2、 下载 Sqlprofiler ,下载地址:http:/ 3、 一个能够运行Hibernate 程序的 Java工程。本文使用的P6Spy版本为 1.3,sqlprofiler 版本为 0.3。安装 P6Spy:1、 打开 p6spy-install.jar 把 p6spy.jar 放到 /WEB-

7、INF/lib/ 目录下,或IDE能够识别jar 文件的位置2、 把 spy.properties 放到 Java工程的 src 目录下,或者是IDE编译后能够拷贝到classess/目录下的位置。3、 将 应 用 系 统 中 的 原 来 数 据 库 驱 动 名 称 改 为 为P6Spy 的 驱 动 程 序 名 称com.p6spy.engine.spy.P6SpyDriver ,其它的全部使用默认值。4、 打开配置文件spy.properties,找到realdriver,把它的值改为你的应用系统的真正的数据库驱动名称。# 提前加载驱动deregisterdrivers=true 标准控制台

8、输出: appender=com.p6spy.engine.logging.appender.StdoutLogger log4j.logger.p6spy=INFO,STDOUT 在集成 Tomcat 环境下 Spring 框架下可以忽略第3 步,按以下范例修改:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 6 页 - - - - - - - - - 4 运行你的应用程序或Web 应用程序,可以在spy.log 里看到P6Spy 监测到的SQL 详细的执行与操作的记录

9、信息了,包含有完整的SQL 执行参数, 只不过所有信息都在一行上,看着比较困难。4扩展4.1减少无用数据的输出P6Spy将其能够拦截到的SQL数据都拦截下来,并输出到控制台,造成我们获取和程序关联信息的困难。在调试时主要关注,替换绑定变量后真实SQL ,来检验业务的正确性,对其他的 SQL , 并不是太在意。 我们通过修改配置文件和提供扩展代码完成只输出有用的信息,当需要展示全部信息的时候,也可以通过修改配置进行调整。打开配置文件spy.properties ,修改如下信息:module.log= com.p6spy.engine.logging.P6LogFactory 改为自定义的Fact

10、ory (在这里体现了P6Spy的在设计上的灵活性) , 继承自 P6LogFactory,并重载:public ResultSet getResultSet(ResultSet real, P6Statement statement, String preparedQuery, String query) throws SQLException 方法返回定制的基于P6LogResultSet的 ResultSet。在定制的ResultSet中重载:public boolean next() throws SQLException方法,代码从P6LogResultSet拷贝对应代码,修改如下:

11、if (currRow -1) long startTime = System.currentTimeMillis(); StringBuffer buffer = new StringBuffer(); String comma = ; for (Iterator itr = resultMap.keySet().iterator(); itr.hasNext();) String index = (String) itr.next(); buffer.append(comma); buffer.append(index); buffer.append( = ); buffer.append

12、(String) resultMap.get(index); comma = , ; P6Connection p6connection = (P6Connection) this.statement .getConnection(); P6LogQuery.logElapsed(p6connection.getId(), startTime, resultset, preparedQuery, query); resultMap.clear(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - -

13、 - - 第 4 页,共 6 页 - - - - - - - - - 5 currRow+; return passthru.next(); 这时候打在控制台的就是清理后实际执行的SQL语句了。4.2输出到Sqlprofiler看格式化结果Sqlprofiler 以监听的模式获取P6Spy的 SQL输出,并根据 P6Spy的输出格式将SQL拆解显示,一般来说我们并不需要关注P6Spy的 SQL格式,只需要按照以下步骤进行配置:1、 把 Log4j 配置为 Server 模式appender=com.p6spy.engine.logging.appender.Log4jLogger log4j.

14、appender.SQLPROFILER_CLIENT=.SocketAppender log4j.appender.SQLPROFILER_CLIENT.RemoteHost=localhost log4j.appender.SQLPROFILER_CLIENT.Port=4445log4j.appender.SQLPROFILER_CLIENT.LocationInfo=true log4j.logger.p6spy=INFO,SQLPROFILER_CLIENT 注:请注意Sqlprofiler 对应的端口号为4445 2、 打开 Sqlprofiler ,接收 SQL脚本下图为 Sqlprofiler 正常工作下的截图:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 6 页 - - - - - - - - - 6 按照本文所述内容已经可以满足相关扩展开发,若还需要原文对应代码,请向fitit_订阅。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 6 页 - - - - - - - - -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁