写点什么

high-performance-tidb-challenge 记录

用户头像
王传义
关注
发布于: 2020 年 11 月 05 日



step1. 搭建集群





step2. 查看 ycsb-worloade使用手册



修改配置 maxscanlength =1000 逐步调大对比



recordcount=1000 //装载进数据库的初始记录数
operationcount=1000 //要进行的操作数数量
axscanlength=1000
//maxscanlength=1
//maxscanlength:对于遍历操作,最大的遍历记录数(默认:1000)
scanlengthdistribution=uniform



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;,并且查询计划选择的是全表扫描+过滤,那么执行器树会是下面这样:





发布于: 2020 年 11 月 05 日阅读数: 49
用户头像

王传义

关注

希望每一位来访的朋友都能有所收获! 2017.11.30 加入

如果有疑问 wang_cyi@163.com 联系

评论

发布
暂无评论
high-performance-tidb-challenge 记录