mysql - Mybatis 执行慢
问题描述
我的项目执行 sql 非常慢,每个 sql 花费超过 3 秒。我的数据库中的数据很少。
我已经尝试了多种变体,但似乎都不起作用。有任何想法吗?
配置
- springboot1.3.1
- mybatis3.2.8
- 德鲁伊1.0.16。
调试信息
应用程序属性
<?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">
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init"
destroy-method="close">
<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"/>
<property name="poolPreparedStatements" value="false"/>
<property name="maxPoolPreparedStatementPerConnectionSize"
value="20"/>
<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>
<bean id="jdbc"
class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
<constructor-arg ref="dataSource"/>
</bean>
<bean id="jdbcCall" scope="prototype"
class="org.springframework.jdbc.core.simple.SimpleJdbcCall">
<constructor-arg ref="dataSource"/>
</bean>
</beans>
解决方案
我发现了问题,这个项目使用logback和发送日志到ELK,但是ELK的redis服务宕机了。
<?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>
注释后<appender-ref ref="logstash"/>
,它可以正常工作。
推荐阅读
- javascript - 发布请求在 Postman 和 cURL 中有效,但在 Angular 中无效
- javascript - 如何在自定义导航菜单中正确使用点击事件?
- sql - SQL查询查找每个用户的活动时间
- python - Plotly:如何摆脱多余的 xaxis 刻度?
- moodle - R/exams:exams2moodle 的开放式问题
- php - laravel 和 guzzle 身份验证
- azure - Azure kubernetes - Nginx 控制器的数量?
- python - 使用 Selenium 和 Python 查找网页上的所有元素
- react-native - 如何从 React Navigation Drawer Item 中删除涟漪效应?
- java - 如何在动态日期后获取特定日期,如 android 中的 60 天和 90 天