【MybatisPlus异常】The SQL execution time is too large, please optimize

简介: 【MybatisPlus异常】The SQL execution time is too large, please optimize

一、项目背景

Spring boot (v2.0.0.RELEASE) + mybatis-plus (3.1.1)

二、报错信息

在使用MybatisPlus的过程中,记录一下踩过的坑,以下是报错的内容:

### Cause: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException:  The SQL execution time is too large, please optimize !

Caused by: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException:  The SQL execution time is too large, please optimize !

Caused by: org.apache.ibatis.exceptions.PersistenceException: 
### Error updating database.  Cause: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException:  The SQL execution time is too large, please optimize ! 
### The error may exist in com/uiotsoft/daily/module/dao/DailyReadRecordMapper.java (best guess)
### The error may involve com.uiotsoft.daily.module.dao.DailyReadRecordMapper.insert-Inline
### The error occurred while setting parameters
### SQL: INSERT INTO daily_job_read_record  ( job_id, read_user, read_name )  VALUES  ( ?, ?, ? )
### Cause: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException:  The SQL execution time is too large, please optimize ! 
  at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
  at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:199)
  at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:184)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.lang.reflect.Method.invoke(Method.java:498)
  at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:433)
  ... 132 common frames omitted
Caused by: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException:  The SQL execution time is too large, please optimize ! 
  at com.baomidou.mybatisplus.core.toolkit.ExceptionUtils.mpe(ExceptionUtils.java:49)
  at com.baomidou.mybatisplus.core.toolkit.Assert.isTrue(Assert.java:38)
  at com.baomidou.mybatisplus.core.toolkit.Assert.isFalse(Assert.java:50)
  at com.baomidou.mybatisplus.extension.plugins.PerformanceInterceptor.intercept(PerformanceInterceptor.java:192)
  at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61)
  at com.sun.proxy.$Proxy194.update(Unknown Source)
  at com.baomidou.mybatisplus.core.executor.MybatisSimpleExecutor.doUpdate(MybatisSimpleExecutor.java:54)
  at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117)
  at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.lang.reflect.Method.invoke(Method.java:498)
  at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:63)
  at com.sun.proxy.$Proxy193.update(Unknown Source)
  at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:197)
  ... 138 common frames omitted

三、报错原因

出现此错误内容,说明 你写的SQL执行时间太长,它提示你让优化SQL语句。具体是哪一条SQL执行时间过长,上面也写明了。

至于为什么会导致报错,有两个原因:

第一、你写的SQL语句执行效率低,需要优化。

第二、mybatis-plus设置的最大时间配置的太短了。

那么既然知道原因了,解决方法就自然而然的知道了。

四、解决方案

根据上面两个原因,对应的解决方法也有两个,具体内容如下:

方案一:优化SQL语句

具体的sql优化我这里就不写,每个人的sql语句不一样,根据自己的sql做出优化即可。

方案二:修改MP的配置

方式1,我的项目里有 MybatisPlusConfig 配置类,所以采用以下方式解决方法。

方式2,有的项目是配置文件的形式,那么修改这个值为1000即可。

<bean id="sqlSessionFactory" class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean">
  <property name="dataSource" ref="dataSource"/>
  <property name="databaseIdProvider" ref="databaseIdProvider" />
  <property name="plugins">
    <array>
      <bean id="paginationInterceptor"
          class="com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor">
        <property name="dialectType" value="mysql" />
      </bean>
      <bean id="performanceInterceptor"
        class="com.baomidou.mybatisplus.extension.plugins.PerformanceInterceptor" >
        <property name="maxTime" value="1000" />
        <property name="format" value="true" />
      </bean>
    </array>
  </property>
</bean>

以上就是针对这个错误给出的两种解决方案,可根据情况具体解决问题。

 

完结!

 

 

 

 

 

 

 

 

 


相关文章
|
4天前
|
SQL XML Java
mybatis 调用修改SQL时 出现了一个问题 没有修改成功也没有报错
mybatis 调用修改SQL时 出现了一个问题 没有修改成功也没有报错
13 0
|
25天前
|
SQL
启动mysq异常The server quit without updating PID file [FAILED]sql/data/***.pi根本解决方案
启动mysq异常The server quit without updating PID file [FAILED]sql/data/***.pi根本解决方案
17 0
|
3月前
|
SQL Oracle 关系型数据库
整合Mybatis-Plus高级,Oracle 主键Sequence,Sql 注入器实现自定义全局操作
整合Mybatis-Plus高级,Oracle 主键Sequence,Sql 注入器实现自定义全局操作
89 0
|
3月前
|
SQL 数据库
在mybatis-plus怎么使用自定义的sql语句
在mybatis-plus怎么使用自定义的sql语句
66 0
|
23天前
|
数据库 SQL 索引
什么是数据库 SQL Execution Plan
什么是数据库 SQL Execution Plan
11 0
|
1月前
|
SQL 存储 Kubernetes
Seata常见问题之mybatisplus的批量插入方法报SQL错误如何解决
Seata 是一个开源的分布式事务解决方案,旨在提供高效且简单的事务协调机制,以解决微服务架构下跨服务调用(分布式场景)的一致性问题。以下是Seata常见问题的一个合集
26 0
|
1月前
|
SQL Java 关系型数据库
MyBatis的动态SQL之OGNL(Object-Graph Navigation Language)表达式以及各种标签的用法
MyBatis的动态SQL之OGNL(Object-Graph Navigation Language)表达式以及各种标签的用法
18 0
|
1月前
|
SQL Java 关系型数据库
MyBatis中的9种常用动态sql标签精妙用法
MyBatis中的9种常用动态sql标签精妙用法
68 0
|
1月前
|
SQL Java 数据库连接
Mybatis拦截器实现带参数SQL语句打印
Mybatis拦截器实现带参数SQL语句打印
|
1月前
|
SQL druid Java
【MyBatis】2、MyBatis 的动态 SQL 和增删改操作
【MyBatis】2、MyBatis 的动态 SQL 和增删改操作
29 0