天天看點

P6SPY、SQL Profiler結合使用

弄hibernate時,想顯示sql語句,可以設定show_sql為true來達到這個目的,但是參數值全是像PreparedStatement一樣,用?來代替的。 

用p6spy可以達到顯示的那些參數原值的目的,但可讀性差。可以利用SQL Profiler來處理這個事情。 

p6spy: http://sourceforge.net/projects/p6spy/ 

SQL Profile: http://sourceforge.net/projects/sqlprofiler/ 

p6spy安裝: 

* 将p6spy.jar放到WEB-INF/lib目錄下,将spy.properties放到WEB-INF/classes目錄下。 

* 修改你 原有 JDBC Driver為:com.p6spy.engine.spy.P6SpyDriver 

* 修改 spy.properties 中的 realdriver 值為 原有 的JDBC Driver,比如我的是:com.mysql.jdbc.Driver 

* 完成,運作web server。 

我的日志記錄産生在 %TOMCAT_HOME%\logs下,此log位置可以通過修改 logfile  = x:\**\*spy.log 來控制 

打開看看,看裡面的日志是不是看起來比較不爽?下面我們安裝SQL Profiler來讓自已的視線爽一點。 

SQL Profiler安裝:(須p6spy成功安裝) 

* 将SQL Profiler自帶的spy.properties覆寫原來的classes目錄下檔案 

* 修改現在spy.properties中realdriver 值為 原有 的JDBC Driver 

看後看看readme注意這幾句 ^__^ : 

1. Start the GUI 

2. Start the webapp, in starts doing some JDBC requests we will ignore 

3. Press the "reset" button on the GUI 

4. Make a request to the webapp 

5. Press the "pause" button after the request has finished executing 

6. Press the "report" button to save profiling results as a CSV file 

* 我們先用java -jar sqlprofiler.jar 運作 sql profiler 

* 然後啟動web server :-) 

一切盡在眼前了吧? 

當然,p6spy 和 sql profiler 能做的不止這些,sql profiler還能根據你的query來幫你生成建立合适的index功能等等。

詳細配置 spy.properties 說明 

Java代碼  

P6SPY、SQL Profiler結合使用
  1. #### 當'SQLPROFILER_CLIENT'啟用時:  
  2. ####   1.必須為Log4jLogger  
  3. ####   2.必須先運作對應RemoteHost上的sqlprofiler.jar,否則會報socket異常    
  4. #specifies the appender to use for logging  
  5. appender=com.p6spy.engine.logging.appender.Log4jLogger  
  6. #appender=com.p6spy.engine.logging.appender.StdoutLogger  
  7. #appender=com.p6spy.engine.logging.appender.FileLogger  
  8. #...  
  9. #...  
  10. #### p6spy 輸出到 sqlprofiler 終端日志配置   
  11. log4j.appender.SQLPROFILER_CLIENT=org.apache.log4j.net.SocketAppender  
  12. # sqlprofiler 終端所在IP  
  13. log4j.appender.SQLPROFILER_CLIENT.RemoteHost=localhost  
  14. # sqlprofiler 終端所使用端口号  
  15. log4j.appender.SQLPROFILER_CLIENT.Port=4445  
  16. log4j.appender.SQLPROFILER_CLIENT.LocationInfo=true  
  17. log4j.logger.p6spy=DEBUG, SQLPROFILER_CLIENT