zoukankan      html  css  js  c++  java
  • Tidb数据库报错:Transaction too large

    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官方的说明方法

  • 相关阅读:
    禅道开源版本安装
    NATAPP内网穿透实现
    nginx部署前端项目
    docker-compose部署微服务
    python编写猜数字游戏
    Linux命令(用户管理、组和时间管理)
    Linux命令(文本编辑器)
    Linux的简单命令(防火墙篇)
    什么是泛型
    spring bean 的作用域之间有什么区别
  • 原文地址:https://www.cnblogs.com/FengGeBlog/p/10189005.html
Copyright © 2011-2022 走看看