Mybats 抖动慢
Mybatis excute slow
我的项目执行 sql 非常慢,每个 sql 成本超过 3 second.There 在我的数据库中数据很少。
我尝试了多种变体,但其中 none 似乎有效。有任何想法吗?
配置
- springboot1.3.1
- mybatis3.2.8
- 德鲁伊1.0.16。
调试信息
application.properties
<?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"/>
,正常工作
我的项目执行 sql 非常慢,每个 sql 成本超过 3 second.There 在我的数据库中数据很少。
我尝试了多种变体,但其中 none 似乎有效。有任何想法吗?
配置
- springboot1.3.1
- mybatis3.2.8
- 德鲁伊1.0.16。
调试信息
application.properties
<?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"/>
,正常工作