事务模型

    执行失败的事务默认自动重试,需注意这可能会导致更新丢失。可通过配置 tidb_disable_txn_auto_retry = on 关闭自动重试。

    由于 TiDB 分布式两阶段提交的要求,修改数据的大事务可能会出现一些问题。因此,TiDB 特意对事务大小设置了一些限制以减少这种影响:

    • 单个事务包含的 SQL 语句不超过 5000 条(默认)
    • 每个键值对不超过 6MB
    • 键值对的总数不超过 300,000
    • 键值对的总大小不超过 100MB

    由于 TiDB 中的 workload 是分布式的,TiDB 中单线程或时延敏感型 workload 的性能相比于单实例部署的 MySQL 较低。这与 TiDB 中的小事务延迟较高的情況类似。

    • 语法:

      1. {FIELDS | COLUMNS} TERMINATED BY 'string' ENCLOSED BY 'char' ESCAPED BY 'char'
      2. LINES STARTING BY 'string' TERMINATED BY 'string'
      3. (col_name ...);
    • 事务的处理:

      TiDB 在执行 LOAD DATA 操作时,默认将每 2 万行记录作为一个事务进行持久化存储。如果一次 LOAD DATA 操作插入的数据超过 2 万行,那么会分为多个事务进行提交。如果某个事务出错,这个事务会提交失败,但它前面的事务仍然会提交成功,在这种情况下,一次 LOAD DATA 操作会有部分数据插入成功,部分数据插入失败。而 MySQL 中会将一次 LOAD DATA 操作视为一个事务,如果其中发生失败情况,将会导致整个 LOAD DATA 操作失败。