# [FAQ] 通过 system variables 开启 batch dml 无效

## Key Words

batch dml, batch, dml, batch insert, batch delete, batch commit, variables, 无效

## Description

通过 tidb_batch_insert 使用 batch dml 无效，仍然报 Transaction is too large。

```sql
mysql> set @@session.tidb_batch_insert=1; set @@session.tidb_dml_batch_size=5000000;
Query OK, 0 rows affected (0.03 sec)

Query OK, 0 rows affected (0.03 sec)

mysql> insert into t1 select * from t2;
ERROR 8004 (HY000): Transaction is too large, size: 1048576131
```

## Content

1. **需要 batch dml 的功能开启**

    - 版本 < v6.1.0，只能通过配置文件开启

    先修改集群配置文件，然后 reload 重启 tidb 生效。

    ```bash
    tiup cluster edit-config 集群名
    ```

    ```yaml
    server_configs:
      tidb:
        enable-batch-dml: true
    ```

    ```bash
    tiup cluster reload 集群名 -R tidb
    ```

    - 版本 >= v6.1.0，亦可通过系统变量开启

    通过系统变量修改无需重启即可生效。

    ```sql
    set tidb_enable_batch_dml=1;
    ```

2. **再设置session参数**

    ```sql
    set tidb_batch_insert=1;
    set tidb_dml_batch_size=2000;
    ```

**NOTE**: 在 v6.1.0 及以上版本，这些变量与废弃的 batch-dml 特性相关，可能会导致数据损坏。因此，不建议开启该变量来使用 batch-dml。作为替代，请使用[非事务 DML 语句](https://docs.pingcap.com/zh/tidb/stable/non-transactional-dml)。

## Affected Versions

\>= 5.3.0
