java.sql.SQLException: txn too large, size: 104857606.

错误详情

java 复制代码
[2024-08-19 02:00:26.214][ERROR][scheduling-1][][o.s.s.s.TaskUtils$LoggingErrorHandler:95]Unexpected error occurred in scheduled task
org.springframework.jdbc.UncategorizedSQLException:
### Error updating database.  Cause: java.sql.SQLException: txn too large, size: 104857632.
### The error may exist in com/pt/ac/rep/biz/mapper/AcMapper.java (best guess)
### The error may involve com.ptc.action.replay.biz.mapper.ActionRecordMapper.deleteByCreateTime-Inline
### The error occurred while setting parameters
### SQL: DELETE FROM user_ac_record WHERE counter <= 0 and create_time <= ?
### Cause: java.sql.SQLException: txn too large, size: 104857632.
; uncategorized SQLException; SQL state [HY000]; error code [1105]; txn too large, size: 104857632.; nested exception is java.sql.SQLExcep
tion: txn too large, size: 104857632.
        at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:8
9)
        at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:8
1)
        at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:8
1)
        at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:88)
        at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:440)
        at com.sun.proxy.$Proxy110.delete(Unknown Source)
        at org.mybatis.spring.SqlSessionTemplate.delete(SqlSessionTemplate.java:303)
        at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:70)
        at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)
        at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)
        at com.sun.proxy.$Proxy115.deleteByCreateTime(Unknown Source)
        at com.ptc.ac.rep.biz.service.ClearRecordService.clearOldUserData(ClearRecordService.java:37)
        at com.ptc.ac.rep.biz.task.QuicBizAwareTask.clearOldData(QuicBizAwareTask.java:29)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84)
        at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54)

通用原因

bash 复制代码
由于底层存储引擎的限制,TiDB 要求单行不超过 6 MB。可以将一行的所有列根据类型转换为字节数并加和来估算单行大小。

TiDB 同时支持乐观事务与悲观事务,其中乐观事务是悲观事务的基础。由于乐观事务是先将修改缓存在私有内存中,因此,TiDB 对于单个事务的容量做了限制。

TiDB 中,单个事务的总大小默认不超过 100 MB,这个默认值可以通过配置文件中的配置项 txn-total-size-limit 进行修改,最大支持 10 GB。单个事务的实际大小限制还取决于服务器剩余可用内存的大小,执行事务时 TiDB 进程的内存消耗相对于事务大小会存在一定程度的放大,最大可能达到提交事务大小的 6 倍以上。

在 4.0 以前的版本,TiDB 限制了单个事务的键值对的总数量不超过 30 万条,从 4.0 版本起 TiDB 取消了这项限制。

当前原因

在tidb中尝试一次性删除了太多数据,超过了单个事务的总大小限制。

解决方案

减少每次删除的条数,从而降低tx的总的大小。

相关推荐
砚底藏山河2 小时前
沪深A股:如何获取基金持股数据
java·python·数据分析·maven
.千余2 小时前
【C++】模板进阶全解:非类型参数|全特化|偏特化|分离编译完全指南
开发语言·c++·笔记·学习·其他
代码改善世界2 小时前
【C++进阶】C++11:列表初始化、右值引用与移动语义、完美转发全解析
java·开发语言·c++
AIGS0012 小时前
JBoltAI V4.5企业智能体平台:技术架构拆解
java·人工智能·ai大模型应用
scx_link2 小时前
通过git bash在本地创建分支,并推送到远程仓库中
开发语言·git·bash
一勺菠萝丶3 小时前
Maven SNAPSHOT 父 POM 无法解析问题排查
java·maven
GZ同学3 小时前
单双变量Ripley’s K函数 R 语言实现
开发语言·r语言
Channing Lewis3 小时前
PHP 解析 Excel 的那些坑:一次“行号错位”引发的数据丢失
开发语言·php·excel
小小龙学IT3 小时前
Apache Airflow 2.x 深度指南:用 Python 编排一切的现代化工作流引擎
开发语言·python·apache
少爷晚安。3 小时前
Java基础02_JDK&JRE下载安装及环境配置
java·开发语言