# DML 语句写流程概要

__*SQL 语句写流程概要*__

![`smart`](DMLStatementWritesProcessOverview_aa_006_20220512.png)

-------------------------------------------------------------
DML 语句的写数据的流程可以描述为:

1. 收到来自客户端的 SQL 请求。

2. 异步获取 SQL 语句的 start_ts, 也就是 SQL 语句开始的 TSO。

3. 解析与编译 SQL 语句并生成执行计划。（Parse 和 Compile）

4. 查询表元数据、region 的位置信息后开始执行。（Execute）

5. TiKV server 收到 TiDB server 的查询请求, 执行并过滤后返回给 TiDB server。

6. TiDB server 将收到的结果进行整理。

7. TiDB server 进行两阶段提交, 修改数据并持久化, 同时获得提交时的 TSO, 即 commit_ts。

8. TiDB server 向客户端返回写数据结果。

其中第 4 步可以继续展开为:

1. 获取要查询表的元数据。

2. 生成 key range 信息,并获取每个 key range 所在的 Region 信息。

3. TiDB server 根据 Region 的定位信息, 并发向 Region 所在的 TiKV server 发送查询请求。

我们可以看到 1 ～ 6 步骤与读取数据的流程一致。

此图是一个简化流程, 将在后面的部分展开说明。

