执行sql常见的报错

本文汇总了一些与sql执行失败有关的case,仅供日后参考。

场景1:[ERR] 8004 - Transaction is too large, size: 104857984

  • 报错场景:在 TiDB 5.0.1 导入一个 122MB 的文件,最后报错 [ERR] 8004 - Transaction is too large, size: 104857984
  • 错误原因:TiDB 对单个事务的大小有限制,默认情况下:
单个事务的键值对总数不超过 30 万
单个键值对的大小不超过 6MB
事务总大小不超过 100MB
  • 解决方案1:调整参数启用分批提交
-- 调整 tidb_dml_batch_size (默认0即2000)
set global tidb_dml_batch_size=200000;
set session tidb_dml_batch_size=200000;
show variables where variable_name in ('tidb_dml_batch_size','tidb_batch_insert','tidb_batch_delete');

-- 将如下2行(只能用作session级别的参数)添加到.sql文件开头的位置,启用分批提交(默认关闭)
set @@tidb_batch_insert=1;
set @@tidb_batch_delete=1;
  • 解决方案2:通过修改配置文件,调整事务大小参数,然后重启tidb服务生效
[root@localhost ~]# more tidb.toml
[performance]
# 事务总大小限制(默认100MB,单位字节,最大可调整为10GB)
txn-total-size-limit = 1073741824  # 1GB

# 单个事务中键值对数量限制(默认30万)
txn-entry-count-limit = 1000000  # 100万
  • 解决方案3:通过修改参数,调整事务大小参数
-- 先切到悲观模式,再调整2个参数
set tidb_txn_mode = 'pessimistic';
set global tidb_txn_total_size_limit = 1073741824;   --改为1GB
set global tidb_txn_entry_size_limit = 1000000;      --改为100万
show variables where variable_name in ('tidb_txn_mode','tidb_txn_total_size_limit','tidb_txn_entry_size_limit');

-- 附:如何改为默认值
set global tidb_txn_total_size_limit = 104857984;   --默认100MB
set global tidb_txn_entry_size_limit = 300000;      --默认30万
Copyright © www.sqlfans.cn 2021 - 2026 All Right Reserved更新时间: 2026-07-27 12:22:25

results matching ""

    No results matching ""