# Coprocessor

![center](./student-guide/diagram/03-Coprocessor-01-03.png)
-------------------------------------------------------------
我们再看下面的图，我们将 SQL 计算下推到了 TiKV ，这个工作由 TiKV 的 Coprocessor 组件完成，它的工作流程如下：
  - TiDB Server 收到查询语句，对语句进行分析，计算出物理执行计划，之后分解出 TiKV 的 Coprocessor 请求。
  - TiDB Server 将该 Coprocessor 请求根据数据的分布，分发到所有相关的 TiKV 上。
  - TiKV Server 在收到该 Coprocessor 请求后，根据请求算子对数据进行过滤，聚合等操作，然后返回给 TiDB。
  - TiDB 在收到所有数据的返回结果后，进行二次聚合，并将最终结果计算出来，返回给客户端。

TiKV Coprocessor 处理请求目前有 3 类：
  - DAG：执行物理算子，为 SQL 计算出中间结果，从而减少 TiDB 的计算和网络开销。这个是绝大多数场景下 Coprocessor 执行的任务，目前下推的物理算子包括：TableScan、IndexScan、Selection（列过滤）、limit、TopN、Aggregation 等等。
  - Analyze：分析表数据，统计、采样表数据信息，持久化后被 TiDB 的优化器采用。
  - CheckSum：对表数据进行校验，用于导入数据后一致性校验。