Tidb数据库报错:Transaction too large

本文解析了TiDB中事务大小限制的原因,源于其分布式特性与一致性协议的运用,详细介绍了当导入大量数据时可能遇到的Transaction too large错误。提供了通过设置tidb_batch_insert与tidb_batch_delete参数及使用limit进行数据导入的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Tidb是一个支持ACID的分布式数据库,当你导入一个非常大的数据集时,这时候产生的事务相当严重,并且Tidb本身对事物的大小也是有一个严格的控制。

有事务大小的限制主要在于 TiKV 的实现用了一致性协议。对于任何一个分布式数据库,如果你要用一致性协议去做这种复制,肯定要避免非常大的事务。所以这个问题不是 TiDB 的问题。

那大概就会报这样的错误:

9500:Transaction too large

意思就是说由于分布式事务要做两阶段提交,并且底层还需要做 Raft 复制,如果一个事务非常大,会使得提交过程非常慢,并且会卡住下面的 Raft 复制流程。为了避免系统出现被卡住的情况,我们对事务的大小做了限制,这是tidb官方解释。

  • 单条 KV entry 不超过 6MB
  • KV entry 的总条数不超过 30w
  • KV entry 的总大小不超过 100MB

解决方法就是:

set @@tidb_batch_insert =ON
set @@tidb_batch_delete = ON

把这两项打开就行了。

事实上,最好的解决方法就是使用limit来进行导入数据,你可以选择编写一个循环来执行。

 给大家看看tidb官方的说明方法

 

转载于:https://www.cnblogs.com/FengGeBlog/p/10189005.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值