一般來說,我們的JavaEE - JDBC企業應用程式的主要瓶頸之一就是在通路資料庫,而資料庫的瓶頸又主要在海量資料的查詢上。如何解決這個問題?最簡單的方法就是為資料庫表建立精确的索引。
從 p6spy-install.jar 中得到p6spy.jar,這就是監測程式的軟體包,将其加入您的用程式classpath中。
将應用程式的資料庫驅動改換成由P6Spy提供的代理驅動,在Spring中可以這樣配置: <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<!—這是你原來的資料庫驅動:com.microsoft.jdbc.sqlserver.SQLServerDriver -->
<property name="driverClassName">
<!--這是P6Spy的代理驅動-->
<value>com.p6spy.engine.spy.P6SpyDriver</value>
</property>
<property name="url">
<value>jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=sample</value>
<property name="username"><value>sa</value></property>
<property name="password"><value>sa</value></property>
</bean>
修改 spy.properties 檔案,在其中配置你真正的資料庫驅動程式(詳細下面說)。
通過以上的步驟,你就完成的P6Spy的配置,啟動應用後,P6Spy就會對您的應用進行監測并産生相應的日志檔案。
以下,我們将通過配置 SQL Profiler 對P6Spy的監測資料進行收集和分析:
替代上面的步驟 4,從sqlprofiler-0.3-bin.zip中擷取 spy.properties 配置檔案,這就是P6Spy監測程式的配置檔案,我們需要在這個檔案中為代理配置真正的資料庫驅動程式: # oracle driver
# realdriver=oracle.jdbc.driver.OracleDriver
# mysql Connector/J driver
# realdriver=com.mysql.jdbc.Driver
# informix driver
# realdriver=com.informix.jdbc.IfxDriver
# ibm db2 driver
# realdriver=COM.ibm.db2.jdbc.net.DB2Driver
# the mssqlserver driver
realdriver=com.microsoft.jdbc.sqlserver.SQLServerDriver
#specifies another driver to use
realdriver2=
#specifies a third driver to use
realdriver3=最後,将這個檔案放置在你應用程式classpath的根下即可。
在spy.properties中,我們還需要配置更多的資訊以收集資料,可以利用Log4j向網絡上輸出性能監測資料,這樣Sql Profiler軟體包就能收到資料并進行分析,當然,您要在配置檔案中指定接收資料的網絡監聽位址和端口。 #specifies the appender to use for logging
appender=com.p6spy.engine.logging.appender.Log4jLogger
#appender=com.p6spy.engine.logging.appender.StdoutLogger
#appender=com.p6spy.engine.logging.appender.FileLogger
# name of logfile to use, note Windows users should make sure to use forward slashes in their pathname (e:/test/spy.log) (used for file logger only)
#logfile = spy.log
# append to the p6spy log file. if this is set to false the
# log file is truncated every time. (file logger only)
append=true
#The following are for log4j logging only
#log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender
#log4j.appender.STDOUT.layout=org.apache.log4j.PatternLayout
#log4j.appender.STDOUT.layout.ConversionPattern=p6spy - %m%n
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
#log4j.logger.p6spy=INFO,STDOUT
log4j.logger.p6spy=DEBUG, SQLPROFILER_CLIENT
從sqlprofiler-0.3-bin.zip中擷取 sqlprofiler.jar,這是一個圖形界面的應用程式,它被用來接收監測資料(來自上面配置的P6Spy)和生成分析結果。
至此,準備工作已經全部完成。執行分析的應用:
首先執行 sqlprofiler.jar(利用javaw),其在指定端口監聽應用程式通過Log4j發來的監測資料。接下來就可以運作經過P6Spy代理的應用程式了。
在 SQL Profiler 的界面可以看到資料的采集。應用程式運作一段時間後(充分反映您應用程式的運作周期),點選“||”暫停按鈕結束資料收集,接下來就是分析資料、生成解決方案、優化檔案(索引腳本)。
本文轉自胡奇 51CTO部落格,原文連結:http://blog.51cto.com/huqicto/280973,如需轉載請自行聯系原作者