?? 以前在項目中使用iBatis,最痛苦的莫過于看到的sql為PreparedStatment輸出的一串串"?"的東東。當時也沒多想,認為自己寫的pstmt就是這么個模樣,難不成人家還會自動照顧到你?
?? 這幾天才“忽然”發現P6Spy這么個好東西,拿來一試,果真不錯。
?? 一般使用步驟,言簡意賅吧:
? 1、下載:
??? p6spy: http://www.p6spy.com
??? SQL Profile: http://www.jahia.net/jahia/page597.html
? 2、安裝:
??? 很簡單,把p6spy-1.x.jar和sqlprofiler.jar拷貝到自己的應用的WEB-INF/lib下即可。
? 3、配置:
??? 1)修改你 原有 JDBC Driver為:com.p6spy.engine.spy.P6SpyDriver,如果你用了連接池,一回事,把driver換掉;
??? 2)修改 spy.properties 中的 realdriver 值為 原有 的JDBC Driver,比如我的是:realdriver=com.ibm.db2.jcc.DB2Driver
? 4、一般使用:
??? 1)在DOS命令行切換到剛才的WEB-INF/lib目錄下,運行:java -jar sqlprofiler.jar,即可啟動SQL Profiler的GUI界面;
??? 2)正常啟動服務,允許web server,即可在SQL Profiler的GUI界面看到所有的JDBC操作。
? 5、高級應用SQL Profiler:
??? 1)可以生成SQL執行情況報表:點擊“pause”按鈕,即可產生profiler result;
??? 2)很cool的是,點擊最左邊的按鈕,可以根據整個運行情況生成數據庫索引的創建腳本,我們可以根據這些腳本生成自己的數據庫索引,數據庫tuning的工作是不是變得越來越簡單or傻瓜了呢?呵呵。
??? 3)其他的包括圖形分析報表,自己挖掘吧;
??? 4)如果用loadRunner、web stress tool等壓力測試工具run一把,那么這個報表和索引創建建議就更加逼真和有效了。
??FAQ:
??? 1)開始配置好后,著急想看效果,結果老是發現connection refused的錯誤,郁悶了半天,找了半天資料才發現必須先啟動SQL Profiler(參考步驟4-1),再啟動應用才是正確的步驟。why?好奇人多了,簡單的答案就是SQL Profiler把JDBC WRAP了一下,此時會先行與數據庫建立一個socket連接,否則這些SQL怎么來,就是這么回事。
REPLY:
//簡單的答案就是SQL Profiler把JDBC WRAP了一下,此時會先行與數據庫建立一個socket連接.
錯的太離譜了!!!
那是因為SQL Profiler的spy.properties里把logger設置成log4j的SocketAppender。
這樣p6spy在啟動的時候就會讓Appender去連接SQL Profiler開啟的端口,
如果連接失敗,之后不會再創建socket。因此必須先啟動SQL Profiler.
仔細看spy.properties的配置代碼,不要亂誤導。
log4j.appender.SQLPROFILER_CLIENT=org.apache.log4j.net.SocketAppender
log4j.appender.SQLPROFILER_CLIENT.RemoteHost=localhost
log4j.appender.SQLPROFILER_CLIENT.Port=4445
log4j.appender.SQLPROFILER_CLIENT.LocationInfo=true?