架构师

您现在的位置是:首页 > 技术博客 > 编程基础

编程基础

Druid连接池开启慢SQL监控功能

架构师小跟班 2019-09-02编程基础
在SQL监控中,有一项关于sql执行最慢执行时间的统计,但是只有一个值,就是一条sql语句最慢的执行时间记录,其他执行时间是看不到的,只能通过总时间来进行粗略的估计,还有一个问题就

在SQL监控中,有一项关于sql执行最慢执行时间的统计,但是只有一个值,就是一条sql语句最慢的执行时间记录,其他执行时间是看不到的,只能通过总时间来进行粗略的估计,还有一个问题就是,一旦项目重启,这些记录就全都没了,因此制定对应的日志输出策略是极其必要的。

大致想法就是通过druid获取所有项目运行中的慢sql执行记录,并将这些数据输出到日志文件中,查了一下druid的资料,调试了一段时间,最终成功实现。

1、修改数据源配置,增加拦截器(applicationContext.xml):

<property name="proxyFilters">
    <list>
    <ref bean="stat-filter"/>
    <ref bean="log-filter"/>
    </list>
</property>
…………
<!-- SQL监控日志配置 执行时间大于200毫秒的都会被红色标注 -->
<bean id="stat-filter" class="com.alibaba.druid.filter.stat.StatFilter">
    <property name="mergeSql" value="true"/>
    <!-- 慢sql时间设置,即执行时间大于200毫秒的都是慢sql -->
    <property name="slowSqlMillis" value="200"/>
    <property name="logSlowSql" value="true"/>
    </bean>
    <bean id="log-filter" class="com.alibaba.druid.filter.logging.Log4jFilter">
    <property name="dataSourceLogEnabled" value="true" />
    <property name="statementExecutableSqlLogEnable" value="true" />
</bean>

2、修改log4j配置文件,增加慢sql日志的输出策略:

log4j.rootLogger=DEBUG,Console,logfile,druid
# Druid
log4j.logger.druid.sql=WARN,druid
log4j.logger.druid.sql.DataSource=WARN,druid
log4j.logger.druid.sql.Connection=WARN,druid
log4j.logger.druid.sql.Statement=WARN,druid
log4j.appender.druid=org.apache.log4j.DailyRollingFileAppender
log4j.appender.druid.layout=org.apache.log4j.PatternLayout
log4j.appender.druid.layout.ConversionPattern= [%d{HH\:mm\:ss}] %c{1} - %m%n
log4j.appender.druid.datePattern='.'yyyy-MM-dd
log4j.appender.druid.Threshold = WARN
log4j.appender.druid.append=true
log4j.appender.druid.File=${catalina.home}/logs/jhome/druid-slow-sql.log

3、重启再去查看druid监控后台。

可以看到跟原来有了一些差别,由于设置了慢sql的时间为大于200毫秒,所以执行时间大于200毫秒的都会被红色标注。

再去tomcat日志文件夹中查看日志文件,可以看到日志文件中已经存在配置的慢sql日志文件了,点击查看其中也已经有了慢sql记录的数据,慢sql以及这条sql语句执行的时间都有记录。D:\DevTools\apache-tomcat-8.0.36\logs\jhome目录下生成文件:druid-slow-sql.log


文章评论