1.TIDB Coprocessor
在整个TIDB 数据库的架构中,TIDB SERVER 是无状态的,数据存储在TIKV集群中。当TIDB SERVER
收到来自客户端的查询请求时,会向TIKV集群获取数据信息,这种架构存在两个性能问题。
(1)TIKV 集群返回了所有的数据,造成网络开心过大。
(2)TIDB SERVER 需要计算所有的数据,占用大量CPU资源,而相对的,TIKV集群的各个
节点并没有进行太多的计算,CPU负载很低。
如果没有 coprocessor 的帮助,就需要通过网络将3个TIKV节点的数据汇总到TIDB SERVER 的缓存中,
统一进行汇总计算。
这里使用TIKV中的 coprocessor组件将SQL计算下推到TIKV节点来完成。具体流程:
(1)当TIDB SERVER 收到查询语句时,它会对语句进行解析编译出物理执行计划,
然后将其转化为TIKV的 coprocessor 请求。
(2)TIDB SERVER 根据数据的分布情况将该 coprocessor 请求分发给所有相关的TIKV节点。
(3)当TIKV server收到 coprocessor请求后,根据请求中的算子对数据进行过滤,聚合等操作。
并将结果返回给TIDB SERVER
(4)TIDB SERVER 在收到所有数据的返回结果后,进行二次聚合。并计算出最终结果,随后
将结果返回给客户端。
2.TIKV coprocessor 处理三类请求
DAG:执行物理算子,为SQL计算出中间结果,从而减少TIDB SERVER 的计算和网络开销。
这是绝大多数场景下的 coprocessor 执行的任务,目前已支持下推的物理算子包括
TableScan,IndexScan,Select(列过滤),limit,TopN, Aggregation 等。
Analyze:用于采样和分析表数据,生成统计信息,这些统计信息会被TIDB SERVER的优化器使用。
CheckSum:对表数据进行校验,用于在导入数据后进行一致性校验。