# DMLステートメント処理の概要
![`smart`](DMLStatementWritesProcessOverview_aa_006_20220512.png)

----------------------------------------------------------------
DML文の処理過程は以下のように表現できます：

1. TiDBサーバーは、クライアントプログラムからSQLリクエストを受け取ります。

2. TiDBサーバーは、SQL文が開始されたときのTSOであるSQL文の開始時のstart_tsを非同期で取得します。

3. TiDBサーバーはSQL文を解析してコンパイルし、実行計画を生成します。

4. TiDBサーバーは、テーブルのメタデータとリージョンの位置情報を検索し、その後文を実行します。

5. TiKVサーバーは、TiDBサーバーからのクエリリクエストを受け取り、それを実行し、データをフィルタリングしてから結果をTiDBサーバーに返します。

6. TiDBサーバーは、受け取った結果を整理します。

7. TiDBサーバーは、データを変更して永続化するために2フェーズコミットを実行し、コミット時のTSO（commit_ts）を取得します。

8. TiDBサーバーはクライアントに書き込みデータの結果を返します。

第4ステップは、さらに拡張することができます：

1. テーブルを照会するためのメタデータを取得します。

2. キー範囲の情報を生成し、それぞれのキー範囲のリージョン情報を取得します。

3. TiDBサーバーは、Regionの位置情報に基づいて、Regionが配置されているTiKVサーバーにクエリ要求を同時に送信します。

1 ~ 6 ステップは、データの読み取りプロセスと一致していることが見て取れます。

この図は、次の節で説明される簡略化されたプロセスです。



