# 事务最佳实践

__*TiDB 事务最佳实践*__

+ 保持较小的事务规模
  + 默认情况下,一个事务限制为 5000 个 SQL 命令
  + 默认情况下,每个键值对条目不超过 6 MB
  + 事务中键值对条目的总大小不超过 10 GB
  + 建议每个事务的记录数小于 200,单记录的数据大小小于 100 KB
------------------------------------------------------------------------
由于分布式事务需要进行两阶段提交,而底层执行 Raft 复制,如果事务非常大,提交过程会非常缓慢,因此接下来的 Raft 复制过程会卡住。你可以在 Google Cloud Spanner 中找到类似的限制。

以悲观事务为例,这是由于在事务提交前:
- TiDB 先执行 DML 得到修改的 key 再加锁
- 数据修改会缓存在 TiDB Server 的 MemBuffer 中
- 提交时才会检测冲突并将数据写入 TiKV 层

所以,也需要关注大事务带来的内存占用。生产环境中,建议将大事务拆分为小事务,在一定程度上,提高事务提交成功的概率,以及降低事务回滚所带来的代价。