mybatis+druid+mysql 查询缓慢

发布于 2022-01-04 00:20:23 字数 3161 浏览 473 评论 6

大家好!这个项目在生产环境运行多年了,但在我本地运行,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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

躲猫猫 2022-01-07 17:55:54

自己找到了原因:项目的日志模块使用了logback+ELK。开发环境的ELK redis down了,导致发送日志失败,每发一条日志都会等待。

注释掉

<appender-ref ref="logstash"/>

就恢复正常了。

以下是完整logback配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property name="AppName" value="Docx"/>

    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${AppName} %d %-5p [%thread] %c:%L - %m%n</pattern>
        </encoder>
    </appender>

    <appender name="logstash" class="com.cwbase.logback.RedisAppender">
        <source>*</source>
        <type>*</type>
        <host>*</host>
        <key>*</key>  
        <tags>*</tags>
        <port>*</port>
        <mdc>true</mdc>
        <location>true</location>
        <callerStackIndex>0</callerStackIndex>
        <level>INFO</level>
    </appender>

    <appender name="errorFile"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>logs/error/error</File>
        <encoder>
            <pattern>%d [%thread] %c:%L-%m%n</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>logs/error/error_%d{yyyy-MM-dd}</fileNamePattern>
        </rollingPolicy>

        <!-- <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>DEBUG</level>

            <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> -->
    </appender>

    <appender name="sqlFile"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>logs/sql/slow</File>
        <encoder>
            <pattern>%d [%thread] %c:%L-%m%n</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>logs/sql/slow_%d{yyyy-MM-dd}</fileNamePattern>
        </rollingPolicy>
    </appender>
    <logger name="com.alibaba.druid.filter.stat.StatFilter" additivity="false" level="DEBUG">
        <appender-ref ref="sqlFile"/>
    </logger>



    <logger name="org" level="ERROR"/>

    <root level="DEBUG">
        <appender-ref ref="stdout"/>
<!--        <appender-ref ref="logstash"/>-->
    </root>


</configuration>

 

睫毛上残留的泪 2022-01-07 17:49:19

explain一下!实在不行show profile

德意的啸 2022-01-07 16:56:17

druid不是有个自带的监控页面嘛,看看慢查询的SQL是那个,是否需要优化SQL及表。

葬花如无物 2022-01-07 13:49:01

DEBUG日志打开,把SQL打印出来,本地工具连接对SQL进行测试。

浅沫记忆 2022-01-06 03:10:40

sql优化、建索引

策马西风 2022-01-04 13:41:11

机器慢,网络慢

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文