【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>

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

 

完结!

 

 

 

 

 

 

 

 

 


相关文章
|
6月前
|
SQL XML Java
通过MyBatis的XML配置实现灵活的动态SQL查询
总结而言,通过MyBatis的XML配置实现灵活的动态SQL查询,可以让开发者以声明式的方式构建SQL语句,既保证了SQL操作的灵活性,又简化了代码的复杂度。这种方式可以显著提高数据库操作的效率和代码的可维护性。
403 18
|
11月前
|
SQL Java 数据库连接
【YashanDB知识库】解决mybatis的mapper文件sql语句结尾加分号";"报错
【YashanDB知识库】解决mybatis的mapper文件sql语句结尾加分号";"报错
|
10月前
|
SQL Java 数据库连接
MyBatis动态SQL字符串空值判断,这个细节99%的程序员都踩过坑!
本文深入探讨了MyBatis动态SQL中字符串参数判空的常见问题。通过具体案例分析,对比了`name != null and name != &#39;&#39;`与`name != null and name != &#39; &#39;`两种写法的差异,指出后者可能引发逻辑混乱。为避免此类问题,建议在后端对参数进行预处理(如trim去空格),简化MyBatis判断逻辑,提升代码健壮性与可维护性。细节决定成败,严谨处理参数判空是写出高质量代码的关键。
1358 0
|
6月前
|
SQL Java 数据库连接
SSM相关问题-1--#{}和${}有什么区别吗?--Mybatis都有哪些动态sql?能简述一下动 态sql的执行原理吗?--Spring支持的几种bean的作用域 Scope
在MyBatis中,`#{}`是预处理占位符,可防止SQL注入,适用于大多数参数传递场景;而`${}`是直接字符串替换,不安全,仅用于动态表名、列名等特殊场景。二者在安全性、性能及使用场景上有显著区别。
125 0
|
9月前
|
SQL XML Java
菜鸟之路Day35一一Mybatis之XML映射与动态SQL
本文介绍了MyBatis框架中XML映射与动态SQL的使用方法,作者通过实例详细解析了XML映射文件的配置规范,包括namespace、id和resultType的设置。文章还对比了注解与XML映射的优缺点,强调复杂SQL更适合XML方式。在动态SQL部分,重点讲解了`&lt;if&gt;`、`&lt;where&gt;`、`&lt;set&gt;`、`&lt;foreach&gt;`等标签的应用场景,如条件查询、动态更新和批量删除,并通过代码示例展示了其灵活性与实用性。最后,通过`&lt;sql&gt;`和`&lt;include&gt;`实现代码复用,优化维护效率。
921 5
|
9月前
|
存储 SQL 数据库连接
C#程序调用Sql Server存储过程异常处理:调用存储过程后不返回、不抛异常的解决方案
本文分析了C#程序操作Sql Server数据库时偶发的不返回、不抛异常问题,并提出了解决思路。首先解析了一个执行存储过程的函数`ExecuteProcedure`,其功能是调用存储过程并返回影响行数。针对代码执行被阻塞但无异常的情况,文章总结了可能原因,如死锁、无限循环或网络问题等。随后提供了多种解决方案:1) 增加日志定位问题;2) 使用异步操作提升响应性;3) 设置超时机制避免阻塞;4) 利用线程池分离主线程;5) 通过信号量同步线程;6) 监控数据库连接状态确保可用性。这些方法可有效应对数据库操作中的潜在问题,保障程序稳定性。
699 11
|
11月前
|
SQL Java 数据库连接
【YashanDB 知识库】解决 mybatis 的 mapper 文件 sql 语句结尾加分号";"报错
【YashanDB 知识库】解决 mybatis 的 mapper 文件 sql 语句结尾加分号";"报错
|
11月前
|
SQL 索引
【YashanDB知识库】由于hist_head$中analyze time小于tab$中analyze time导致的sql语句执行慢
【YashanDB知识库】由于hist_head$中analyze time小于tab$中analyze time导致的sql语句执行慢
|
数据库
java.sql.SQLException: txn too large, size: 104857606.
该博客文章讨论了在TiDB数据库中遇到的"txn too large"错误,原因是事务大小超过了默认限制,解决方案是减少每次删除操作的数据量以降低事务的总大小。
288 0
|
11月前
|
SQL 缓存 Java
框架源码私享笔记(02)Mybatis核心框架原理 | 一条SQL透析核心组件功能特性
本文详细解构了MyBatis的工作机制,包括解析配置、创建连接、执行SQL、结果封装和关闭连接等步骤。文章还介绍了MyBatis的五大核心功能特性:支持动态SQL、缓存机制(一级和二级缓存)、插件扩展、延迟加载和SQL注解,帮助读者深入了解其高效灵活的设计理念。