天天看點

提升基于JDBC的應用程式通路資料庫的效率

一般來說,我們的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,如需轉載請自行聯系原作者