结合各位的回复,稍微整理了下。
Coprocessor是TiKV中读取并计算的模块,主要用于加速查询类请求, 和写入请求无关。它能将部分TiDB中的运算下推到KV节点,避免将所有数据同步到TiDB节点再计算。
TiKV Coprocessor 处理的读请求目前主要分类三种:
DAG(Directed Acyclic Graph):执行物理算子,为 SQL 计算出中间结果,从而减少 TiDB 的计算和网络开销。这个是绝大多数场景下 Coprocessor 执行的任务。
Analyze:分析表数据,统计、采样表数据信息,持久化后被 TiDB 的优化器采用。
CheckSum:对表数据进行校验,用于导入数据后一致性校验。
Grafana > TiKV-Details > Coprocessor Overview > Total KV Cursor Operations:
包含各种类型的 KV cursor 操作的总数量的 ops,例如 select、index、analyze_table、analyze_index、checksum_table、checksum_index 等。
读请求的执行过程:
1.TiDB 收到查询语句,对语句进行分析,计算出物理执行计划,组织成 TiKV 的 Coprocessor 请求。
2.TiDB 将该 Coprocessor 请求根据数据的分布,分发到所有相关的 TiKV 上。
3.TiKV 在收到该 Coprocessor 请求后,根据请求算子对数据进行过滤聚合,然后返回给 TiDB。
4.TiDB 在收到所有数据的返回结果后,进行二次聚合,并将最终结果计算出来,返回给客户端。