mybatis+druid+mysql 查询缓慢
大家好!这个项目在生产环境运行多年了,但在我本地运行,SQL查询非常慢,平均一条执行超过4s。项目在一个同事机子跑正常,另一个同事机子跑也和我出现一样的情况。尝试了很多办法无果,有什么办法定位出问题所在吗?
运行环境 : springboot1.3.1 mybatis3.2.8 druid1.0.16
DEBUG日志:
druid配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"
default-lazy-init="false">
<!-- 数据源 -->
<!--see https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_DruidDataSource%E5%8F%82%E8%80%83%E9%85%8D%E7%BD%AE-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init"
destroy-method="close">
<!-- 基本属性 url、user、password -->
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<!-- 配置初始化大小、最小、最大 -->
<property name="initialSize" value="20"/>
<property name="minIdle" value="100"/>
<property name="maxActive" value="100"/>
<!-- 配置获取连接等待超时的时间 -->
<property name="maxWait" value="60000"/>
<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
<property name="timeBetweenEvictionRunsMillis" value="60000"/>
<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
<property name="minEvictableIdleTimeMillis" value="300000"/>
<property name="validationQuery" value="select 1"/>
<property name="testWhileIdle" value="true"/>
<property name="testOnBorrow" value="false"/>
<property name="testOnReturn" value="false"/>
<!-- 打开PSCache,并且指定每个连接上PSCache的大小 如果用Oracle,则把poolPreparedStatements配置为true,mysql可以配置为false。-->
<property name="poolPreparedStatements" value="false"/>
<property name="maxPoolPreparedStatementPerConnectionSize"
value="20"/>
<!-- 配置监控统计拦截的filters -->
<property name="filters" value="wall,stat"/>
</bean>
<bean id="stat-filter" class="com.alibaba.druid.filter.stat.StatFilter">
<property name="slowSqlMillis" value="3000"/>
<property name="logSlowSql" value="true"/>
</bean>
<!-- 配置namedParameterJdbcTemplate -->
<bean id="jdbc"
class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
<constructor-arg ref="dataSource"/>
</bean>
<!-- 配置jdbcCall 用于调用存储过程和数据库函数 ,不要使用单例模式!!!!!! -->
<bean id="jdbcCall" scope="prototype"
class="org.springframework.jdbc.core.simple.SimpleJdbcCall">
<constructor-arg ref="dataSource"/>
</bean>
</beans>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
自己找到了原因:项目的日志模块使用了logback+ELK。开发环境的ELK redis down了,导致发送日志失败,每发一条日志都会等待。
注释掉
就恢复正常了。
以下是完整logback配置文件:
explain一下!实在不行show profile
druid不是有个自带的监控页面嘛,看看慢查询的SQL是那个,是否需要优化SQL及表。
DEBUG日志打开,把SQL打印出来,本地工具连接对SQL进行测试。
sql优化、建索引
机器慢,网络慢