java.sql.BatchUpdateException:事务太大,len:300200

时间:2017-10-24 06:46:40

标签: mysql apache-spark jdbc tidb

在使用spark2.2中的tidb使用jdbc驱动时遇到此错误:

java.sql.BatchUpdateException: transaction too large, len:300200

在条件下得到错误:
   select whole table

条件下没有错误:
 select with limit 10000000;

没有任何线索

1 个答案:

答案 0 :(得分:1)

TiDB document

复制
  

显示错误消息事务太大。

     

由于分布式事务需要进行两阶段提交和   如果事务非常严重,则底层执行Raft复制   大,提交过程会非常缓慢,以及随后的Raft   因此,复制流程受到了打击。为了避免这个问题,我们限制了   交易规模:

     

每个键值输入不超过6MB键值的总数   条目不超过300,000行键值输入的总大小   不超过100MB Google Cloud也有类似的限制   扳手。

     

解决方案:

     

导入数据时,批量插入,最好保留   10,000行内一批的数量。

     

对于插入和选择,您可以打开隐藏的参数集   @@ session.tidb_batch_insert = 1;,并且insert将执行大   批量交易。这样,就可以避免造成超时   通过大型交易,但这可能会导致原子性的丧失。一个   执行过程中的错误导致部分插入   交易。因此,仅在必要时使用此参数,并且   在会话中使用它以避免影响其他语句。当。。。的时候   事务完成后,使用set @@ session.tidb_batch_insert = 0来   关闭它。

     

对于删除和更新,您可以使用限制加循环来   操作