# 写作执行

![`smart`](ExecuteandWrite01_aa_003_20220512.png)

-----------------------------------------------------------
TiDB 服务器的缓存（图中的 MemBuffer）首先会读取要修改的数据。

下面我们从需要被修改的数据被读入TiDB服务器缓存开始介绍，参与TiDB服务器写入的线程池模块主要有：`Transaction`，KV和TiKV Client。过程如下：

1. `Transaction`模块开始进入两阶段提交，我们简单理解为两步：第一步是Prewrite操作，即修改数据并加锁；第二步是Commit操作，即提交修改并释放锁。因此这两个操作中的修改、加锁、解锁和提交修改都是写操作。`Transaction`会首先遍历MemBuffer缓存，缓存中的key排序，然后将事务需要做的修改发送给KV模块。这里需要注意的是，在两阶段提交操作中，除了写数据外，还会向PD申请当前的TSO作为当前事务提交前的commit_ts。这样一来，一个事务在提交（结束）时就有了commit_ts。

2. KV 模块负责将与事务相关的操作（写入、提交、回滚、锁定和释放锁等）封装为写操作，并将其发送到 TiKV 客户端模块。

3. TiKV 客户端模块将封装的写操作发送到相关的 TiKV 服务器。

