# 書き込み実行

![`smart`](ExecuteandWrite01_aa_005_20220512.png)

-----------------------------------------------------------
TiDBサーバーのキャッシュに変更するデータを最初に読み込むことで、書き込みプロセスが開始されます。図中のMemBufferがTiDBサーバーのキャッシュを表しています。

下記では、TiDBサーバーのキャッシュに読み込まれる変更する必要のあるデータから紹介を開始します。TiDBサーバーで書き込みに参加するスレッドプールモジュールは主に`Transaction`、KV、TiKV Clientです。プロセスは以下の通りです：

1. `Transaction`モジュールは、簡単に理解すると2フェーズコミットとして、最初にPrewrite操作、つまりデータを変更してロックをかける、そして2番目にCommit操作、つまり変更を提出してロックを解除するという2フェーズに入ります。そのため、この2つの操作ではデータの書き込み、ロック、ロック解除、変更の提出などがすべて書き込み操作となります。`Transaction`はまずMemBufferキャッシュを走査し、キャッシュ内のキーをソートし、そしてトランザクションが行う変更をKVモジュールに送信します。ここで注意すべきなのは、2フェーズコミット操作では、データの書き込みだけでなく、その前にPDに現在のTSOを取得して、現在のトランザクションのcommit_tsとして用いるということです。このようにして、トランザクションがコミット（終了）されるときにcommit_tsを持つようになります。

2. KVモジュールは、トランザクション関連の操作（書き込み、コミット、ロールバック、ロック、ロック解除など）を書き込み操作としてカプセル化し、TiKV Clientモジュールに送信する責任を持ちます。

3. TiKV Clientモジュールを介して、カプセル化された書き込み操作が関連するTiKVサーバーに送信されます。


