high-performance-tidb-challenge 记录
step1. 搭建集群
step2. 查看 ycsb-worloade使用手册
修改配置 maxscanlength =1000 逐步调大对比
step3 . 10s ,30s 60s采集结果对比
这里排除耗时最高三个问题干扰:runtime gcc问题,tikv pre查询执行,和协程切换。
step4. 查看代码,确定问题,导师提出issue
https://github.com/pingcap/tidb/issues/20838
https://github.com/pingcap/tidb/issues/20841
https://github.com/pingcap/tidb/issues/20841
测试结果:
BenchmarkBatchAppendRow-16 26793 44320 ns/op 10 B/op 0 allocs/op
—————————-----------------------------------------------------
BenchmarkBatchAppendRows-16 32156 37457 ns/op 8 B/op 0 allocs/op
基础
selectResult 实现了 SelectResult 这个接口,代表了一次查询的所有结果的抽象,计算是以 Region 为单位进行,所以这里全部结果会包含所有涉及到的 Region 的结果。
调用 Chunk 方法可以读到一个 Chunk 的数据,通过不断调用 NextChunk 方法,直到 Chunk 的 NumRows 返回 0 就能拿到所有结果。
NextChunk 的实现会不断获取每个 Region 返回的 SelectResponse,把结果写入 Chunk。
TiDB 的执行引擎是以 Volcano 模型运行,所有的物理 Executor 构成一个树状结构,每一层通过调用下一层的 Next/NextChunk() 方法获取结果。
举个例子,假设语句是 SELECT c1 FROM t WHERE c2 > 1;
,并且查询计划选择的是全表扫描+过滤,那么执行器树会是下面这样:
版权声明: 本文为 InfoQ 作者【王传义】的原创文章。
原文链接:【http://xie.infoq.cn/article/6d0eec56aa2c9da49a381b6c3】。未经作者许可,禁止转载。
评论