Druid连接池 慢SQL日志记录

3 篇文章 0 订阅
2 篇文章 0 订阅

时间 2014-08-27 13:02:05  ITeye-博客

由于工作原因,这里先不说连接数据库部分的配置,后面会补上,直接进入慢SQL日志记录。

1.applicationContext.xml中增加如下配置:

<bean abstract="true" id="mysql_database" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
 
	<!-- 监控统计拦截的filters,日志记录 edited by zhangpl 20140824 start -->
	<!-- 并在filters属性中配置了log4j -->
	<property name="proxyFilters">
	    <list>
		<ref bean="stat-filter" />
		<ref bean="log-filter" />
	    </list> 
	</property>
	 <!-- 监控统计拦截的filters,日志记录 edited by zhangpl 20140824 end -->
	<property name="filters">
	    <value>stat,wall,log4j</value>
	</property>

	<!-- 其它基本配置略...-->
</bean>

<!-- 慢SQL记录  edited by zhangpl 20140824  start-->
<bean id="stat-filter" class="com.alibaba.druid.filter.stat.StatFilter">
	<property name="mergeSql" value="true" />
	<property name="slowSqlMillis" value="1000" />
	<property name="logSlowSql" value="true" />
</bean>
    
<bean id="log-filter" class="com.alibaba.druid.filter.logging.Log4jFilter">
	<!-- <property name="resultSetLogEnabled" value="false" /> -->
	<!-- <property name="statementExecutableSqlLogEnable" value="true" /> -->
</bean>
<!-- 慢SQL记录  edited by zhangpl 20140824  end-->

2.log4j.properties中配置如下:

log4j.rootLogger=warn,A1,A2

#1.打印druid连接池SQL语句,info级别的语句打印到info_slowsql.log,warn级别语句打印到warn_slowlog.log;
#2.将日志写到文件中; 

# Druid
log4j.logger.druid.sql=info,A1,A2
log4j.logger.druid.sql.DataSource=info,A1,A2
log4j.logger.druid.sql.Connection=info,A1,A2
log4j.logger.druid.sql.Statement=info,A1,A2
log4j.logger.druid.sql.ResultSet=info,A1,A2

log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A1.File=../druid-logs/info_slowsql.log
log4j.appender.A1.DatePattern='.'yyyy-MM-dd
#log4j.appender.A1.File=${catalina.home}/logs/info_slowsql.log
#log4j.appender.A1.File=${WebApp.TomcatHome}/logs/info_slowsql.log
log4j.appender.A1.ImmediateFlush=true
log4j.appender.A1.Append=true
log4j.appender.A1.Threshold=info
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss}] [%p] [%c] - %m%n

log4j.appender.A2=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A2.File=../druid-logs/warn_slowsql.log
log4j.appender.A2.DatePattern='.'yyyy-MM-dd
#log4j.appender.A2.File=${catalina.home}/logs/warn_slowsql.log
#log4j.appender.A2.File=${WebApp.TomcatHome}/logs/warn_slowsql.log
log4j.appender.A2.ImmediateFlush=true
log4j.appender.A2.Append=true
log4j.appender.A2.Threshold=warn
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss}] [%p] [%c] - %m%n

经过上面的配置,就会在文件中打印,如下的慢SQL语句:

......
[2014-08-26 11:12:59] [ERROR] [com.alibaba.druid.filter.stat.StatFilter] - slow sql 3121 millis. 
select count(1) from person where schoolid=? and isDeleted=0   and GET_FIRST_PINYIN_CHAR(username) =?  
["145","a"]
......

有问题欢迎指正,可参考官方文档,以官方文档为准。

参考:http://www.oschina.net/question/97503_117693

过程中遇到日志报错“

Communications link failure,The last packet successfully received from the server was *** millisecon


使用Connector/J连接MySQL数据库,程序运行较长时间后就会报以下错误:

Communications link failure,The last packet successfully received from the server was * **millisecond ago. 
The last packet successfully sent to the server was * **millisecond ago。

其中错误还会提示你修改wait_timeout或是使用Connector/J的autoReconnect属性避免该错误。

后来查了一些资料,才发现遇到这个问题的人还真不少,大部分都是使用连接池方式时才会出现这个问题,短连接应该很难出现这个问题。这个问题的原因:

  1. 按照错误的提示,可以在JDBC URL中使用autoReconnect属性,实际测试时使用了autoReconnect=true&failOverReadOnly=false,不过并未起作用,使用的是5.1版本,可能真像网上所说的只对4之前的版本有效。

  2. 没办法,只能修改MySQL的参数了,wait_timeout最大为31536000即1年,在my.cnf中加入:

[mysqld]  wait_timeout=31536000  interactive_timeout=31536000  

重启生效,需要同时修改这两个参数。


Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure  [09:49:36.821]  [09:49:36.821]Last packet sent to the server was 0 ms ago.  
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Druid连接池是一个开源的、高效的数据库连接池,适用于Java应用程序。它能够提供连接池和管理连接的功能,帮助进行数据库连接的管理和优化。 Druid连接池的配置主要包括以下几个方面: 1. 数据源配置:可以通过配置文件或代码来设置数据库相关的属性,如驱动类型、URL、用户名、密码等。这些配置项可以根据具体的数据库类型和环境需求来设置。 2. 连接池参数配置:可以设置连接池的一些基本参数,如初始化连接数、最小连接数、最大连接数等。这些参数会直接影响连接池的性能和资源占用情况,需要根据具体应用的需求进行调整。 3. 连接属性配置:可以设置每个连接的一些属性,如连接超时时间、最大等待时间、是否自动提交等。这些属性可以根据具体需求进行设置,以满足应用程序的要求。 4. 监控配置:可以设置连接池的监控功能,包括连接池的活跃连接数、空闲连接数、执行SQL次数、查询次数等。这些监控数据可以通过配置项输出到日志文件或通过JMX暴露出来,以便进行监控和调优。 5. 连接池扩展配置:可以通过配置项来设置连接池的一些扩展功能,如连接池的预处理、过滤器等。这些功能可以提供更灵活的连接管理方式,以满足特定需求。 通过合理配置Druid连接池,可以提高应用程序对数据库连接的管理和利用效率,减少连接泄露和性能问题。但是需要注意的是,配置应遵循最佳实践,并根据实际情况进行调整和优化,以达到最佳的数据库连接池配置效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值