1.配置Druid連接池,監控慢sql
1 <!-- 數據源配置, 使用 Druid 數據庫連接池 --> 2 <bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> 3 <property name="url" value="${jdbc_url}" /> 4 <property name="username" value="${jdbc_username}" /> 5 <property name="password" value="${jdbc_password}" /> 6 <!-- 配置初始化大小、最小、最大 --> 7 <property name="initialSize" value="0" /> 8 <property name="minIdle" value="0" /> 9 <property name="maxActive" value="20" /> 10 <!-- 配置獲取連接等待超時的時間 --> 11 <property name="maxWait" value="60000" /> 12 <!-- 這里建議配置為TRUE,防止取到的連接不可用。獲取鏈接的時候,不校驗是否可用,開啟會有損性能--> 13 <property name="testOnBorrow" value="true" /> 14 <!-- 歸還鏈接到連接池的時候校驗鏈接是否可用 --> 15 <property name="testOnReturn" value="false" /> 16 <!-- 此項配置為true即可,不影響性能,並且保證安全性。意義為:申請連接的時候檢測,如果空閑時間大於timeBetweenEvictionRunsMillis,執行validationQuery檢測連接是否有效 --> 17 <property name="testWhileIdle" value="true" /> 18 <!-- 配置間隔多久才進行一次檢測,檢測需要關閉的空閑連接,單位毫秒 --> 19 <property name="timeBetweenEvictionRunsMillis" value="60000" /> 20 <!-- 配置一個連接在池中最小生存的時間,單位毫秒 --> 21 <property name="minEvictableIdleTimeMillis" value="300000" /> 22 <!-- 鏈接使用超過時間限制是否回收 --> 23 <property name="removeAbandoned" value="true" /> 24 <!-- 超過時間限制時間(單位秒),目前為5分鍾,如果有業務處理時間超過5分鍾,可以適當調整。 --> 25 <property name="removeAbandonedTimeout" value="300" /> 26 <!-- #鏈接回收的時候控制台打印信息,測試環境可以加上true,線上環境false。會影響性能。 --> 27 <property name="logAbandoned" value="true" /> 28 <!-- 驗證連接有效與否的SQL,不同的數據配置不同 --> 29 <property name="validationQuery" value="select 1 " /> 30 <!-- 配置監控統計攔截的filters,用於在界面中統計sql和開啟druid防火牆。注意: --> 31 <!-- 監控中有jdbcSqlStat,原因是:com.alibaba.druid.statJdbcDataSourceStat中的createSqlStat方法中, 32 用了一個map來存放所有的sql語句,這樣會導致線上觸發FullGC,可將此處注釋掉 --> 33 <property name="filters" value="wall,stat" /> 34 <!-- 映射慢sql --> 35 <property name="proxyFilters"> 36 <list> 37 <ref bean="statfilter"/> 38 <ref bean="logFilter"/> 39 </list> 40 </property> 41 </bean> 42 43 <!-- 慢SQL記錄 --> 44 <bean id="statfilter" class="com.alibaba.druid.filter.stat.StatFilter"> 45 <!-- 開啟合並sql --> 46 <property name="mergeSql" value="true" /> 47 <!-- 開啟慢查詢語句,200毫秒 --> 48 <property name="slowSqlMillis" value="200" /> 49 <property name="logSlowSql" value="true" /> 50 </bean> 51 52 <bean id="logFilter" class="com.alibaba.druid.filter.logging.Log4jFilter"> 53 <property name="resultSetLogEnabled" value="false" /> 54 <property name="statementExecutableSqlLogEnable" value="true" /> 55 </bean>
注意:要使用log4j,使用lockback不可以
2.web.xml中配置servlet和過濾器
1 <servlet> 2 <servlet-name>DruidStatView</servlet-name> 3 <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class> 4 <init-param> 5 <!-- 允許清空統計數據 --> 6 <param-name>resetEnable</param-name> 7 <param-value>true</param-value> 8 </init-param> 9 <init-param> 10 <!-- 用戶名 --> 11 <param-name>loginUsername</param-name> 12 <param-value>druid</param-value> 13 </init-param> 14 <init-param> 15 <!-- 密碼 --> 16 <param-name>loginPassword</param-name> 17 <param-value>druid</param-value> 18 </init-param> 19 </servlet> 20 <servlet-mapping> 21 <servlet-name>DruidStatView</servlet-name> 22 <url-pattern>/druid/*</url-pattern> 23 </servlet-mapping> 24 <filter> 25 <filter-name>druidWebStatFilter</filter-name> 26 <filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class> 27 <init-param> 28 <param-name>exclusions</param-name> 29 <param-value>/public/*,*.js,*.css,/druid*,*.jsp,*.swf</param-value> 30 </init-param> 31 <init-param> 32 <param-name>principalSessionName</param-name> 33 <param-value>sessionInfo</param-value> 34 </init-param> 35 <init-param> 36 <param-name>profileEnable</param-name> 37 <param-value>true</param-value> 38 </init-param> 39 </filter> 40 <filter-mapping> 41 <filter-name>druidWebStatFilter</filter-name> 42 <url-pattern>/*</url-pattern> 43 </filter-mapping>
3.訪問控制台
IP:port/項目名/druid/index.html 可以看到各種監控。
當然,也可以通過日志文件來查看哪一條sql屬於慢SQL,從而進行優化。
