# Coprocessor 

![left](./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:对表数据进行校验,用于导入数据后一致性校验。