# Coprocessor 

![`smart`](./student-guide/diagram/Coprocessor03_aa_001_2022051.png)
-------------------------------------------------------------
我们将 SQL 计算下推到了 TiKV, 这个工作由 TiKV 的 Coprocessor 组件完成, 它的工作流程如下:

1. TiDB server 收到查询语句,对语句进行分析,计算出物理执行计划,之后分解出 TiKV 的 Coprocessor 请求。

2. TiDB server 将该 Coprocessor 请求根据数据的分布,分发到所有相关的 TiKV 上。

3. TiKV server 在收到该 Coprocessor 请求后,根据请求算子对数据进行过滤,聚合等操作,然后返回给 TiDB。

4. TiDB 在收到所有数据的返回结果后,进行二次聚合,并将最终结果计算出来,返回给客户端。

TiKV Coprocessor 处理请求目前有 3 类:

- DAG: 执行物理算子, 为 SQL 语句计算出中间结果,从而减少 TiDB 的计算和网络开销。这个是绝大多数场景下 Coprocessor 执行的任务,目前下推的物理算子包括: TableScan、IndexScan、Selection、Limit、TopN、Aggregation 等等。

- Analyze: 分析表数据,统计、采样表数据信息,持久化后被 TiDB 的优化器采用。

- Checksum: 对表数据进行校验, 用于导入数据后一致性校验。
