﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-砖头-文章分类-日志</title><link>http://www.blogjava.net/yaozhuan/category/13678.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 02 Mar 2007 02:54:48 GMT</lastBuildDate><pubDate>Fri, 02 Mar 2007 02:54:48 GMT</pubDate><ttl>60</ttl><item><title>SQL Profiler + P6Spy 完全配置手册(搞定数据库执行日志 )(转)</title><link>http://www.blogjava.net/yaozhuan/articles/61276.html</link><dc:creator>砖头</dc:creator><author>砖头</author><pubDate>Wed, 02 Aug 2006 00:47:00 GMT</pubDate><guid>http://www.blogjava.net/yaozhuan/articles/61276.html</guid><wfw:comment>http://www.blogjava.net/yaozhuan/comments/61276.html</wfw:comment><comments>http://www.blogjava.net/yaozhuan/articles/61276.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yaozhuan/comments/commentRss/61276.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yaozhuan/services/trackbacks/61276.html</trackback:ping><description><![CDATA[以前在项目中使用iBatis，最痛苦的莫过于看到的sql为PreparedStatment输出的一串串"？"的东东。当时也没多想，认为自己写的pstmt就是这么个模样，难不成人家还会自动照顾到你？ 
<p>   这几天才“忽然”发现P6Spy这么个好东西，拿来一试，果真不错。</p><p>   一般使用步骤，言简意赅吧：</p><p>  1、下载：</p><p>    p6spy: <a href="http://www.p6spy.com/">http://www.p6spy.com</a><br />    SQL Profile: <a href="http://www.jahia.net/jahia/page597.html">http://www.jahia.net/jahia/page597.html</a></p><p>  2、安装：</p><p>    很简单，把p6spy-1.x.jar和sqlprofiler.jar拷贝到自己的应用的WEB-INF/lib下即可。</p><p>  3、配置：</p><p>    1）修改你 原有 JDBC Driver为：com.p6spy.engine.spy.P6SpyDriver，如果你用了连接池，一回事，把driver换掉；<br />    2）修改 spy.properties 中的 realdriver 值为 原有 的JDBC Driver，比如我的是：realdriver=com.ibm.db2.jcc.DB2Driver<br />    3) 还有，注意把appender设置正确：<br />#The following are for log4j logging only<br />#log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender<br />#log4j.appender.STDOUT.layout=org.apache.log4j.PatternLayout<br />#log4j.appender.STDOUT.layout.ConversionPattern=p6spy - %m%n</p><p>log4j.appender.SQLPROFILER_CLIENT=org.apache.log4j.net.SocketAppender<br />log4j.appender.SQLPROFILER_CLIENT.RemoteHost=localhost<br />log4j.appender.SQLPROFILER_CLIENT.Port=4445<br />log4j.appender.SQLPROFILER_CLIENT.LocationInfo=true</p><p>#log4j.logger.p6spy=INFO,STDOUT<br />log4j.logger.p6spy=DEBUG, SQLPROFILER_CLIENT<br /><br />  4、一般使用：</p><p>    1）在DOS命令行切换到刚才的WEB-INF/lib目录下，运行：java -jar sqlprofiler.jar，即可启动SQL Profiler的GUI界面；<br />    2）正常启动服务，允许web server，即可在SQL Profiler的GUI界面看到所有的JDBC操作。</p><p>  5、高级应用SQL Profiler：</p><p>    1）可以生成SQL执行情况报表：点击“pause”按钮，即可产生profiler result；<br />    2）很cool的是，点击最左边的按钮，可以根据整个运行情况生成数据库索引的创建脚本，我们可以根据这些脚本生成自己的数据库索引，数据库tuning的工作是不是变得越来越简单or傻瓜了呢？呵呵。<br />    3）其他的包括图形分析报表，自己挖掘吧；<br />    4）如果用loadRunner、web stress tool等压力测试工具run一把，那么这个报表和索引创建建议就更加逼真和有效了。</p><p><br />  FAQ：</p><p>    1）开始配置好后，着急想看效果，结果老是发现connection refused的错误，郁闷了半天，找了半天资料才发现必须先启动SQL Profiler（参考步骤4-1），再启动应用才是正确的步骤。why?好奇人多了，简单的答案就是SQL Profiler把JDBC WRAP了一下，此时会先行与数据库建立一个socket连接，否则这些SQL怎么来，就是这么回事。</p><p class="postfoot">posted on 2006-05-30 14:01 <a href="/itstarting/">花落知多少</a> 阅读(145) <a href="/itstarting/articles/48969.html#Post">评论(1)</a>  <a href="/itstarting/admin/EditArticles.aspx?postid=48969">编辑</a> <a href="/itstarting/AddToFavorite.aspx?id=48969">收藏</a><a title="功能强大的网络收藏夹，一秒钟操作就可以轻松实现保存带来的价值、分享带来的快乐" href="javascript:d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&amp;u='+escape(d.location.href)+'&amp;c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();">收藏至365Key</a> 所属分类: <a href="/itstarting/category/11638.html">Java Tips</a></p><img height="1" src="/itstarting/aggbug/48969.html?webview=1" width="1" /><!--
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
<rdf:Description
rdf:about="http://www.blogjava.net/itstarting/articles/48969.html"
dc:identifier="http://www.blogjava.net/itstarting/articles/48969.html"
dc:title="SQL Profiler + P6Spy 完全配置手册 "
trackback:ping="http://www.blogjava.net/itstarting/services/trackbacks/48969.aspx" />
</rdf:RDF>
--><a name="评论"><div id="comments"><h3>评论</h3><h4><a title="permalink: re: SQL Profiler + P6Spy 完全配置手册 " href="/itstarting/articles/48969.html#49020">#</a> <a name="49020"></a>re: SQL Profiler + P6Spy 完全配置手册 <a name="Post"></a><span>2006-05-30 15:46 </span><a id="Comments1_CommentList_ctl00_NameLink" target="_blank">lizongbo</a></h4><p>//简单的答案就是SQL Profiler把JDBC WRAP了一下，此时会先行与数据库建立一个socket连接. <br /><br />错的太离谱了！！！ <br /><br />那是因为SQL Profiler的spy.properties里把logger设置成log4j的SocketAppender。 <br />这样p6spy在启动的时候就会让Appender去连接SQL Profiler开启的端口， <br />如果连接失败，之后不会再创建socket。因此必须先启动SQL Profiler. <br />仔细看spy.properties的配置代码，不要乱误导。 <br /><br /><br />log4j.appender.SQLPROFILER_CLIENT=org.apache.log4j.net.SocketAppender <br />log4j.appender.SQLPROFILER_CLIENT.RemoteHost=localhost <br />log4j.appender.SQLPROFILER_CLIENT.Port=4445 <br />log4j.appender.SQLPROFILER_CLIENT.LocationInfo=true</p></div></a><img src ="http://www.blogjava.net/yaozhuan/aggbug/61276.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yaozhuan/" target="_blank">砖头</a> 2006-08-02 08:47 <a href="http://www.blogjava.net/yaozhuan/articles/61276.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>