参赛信息
队伍: v587
目标: 优化 ycsb workloade
本周汇报
本周主要工作
ycsb 压力测试,调整参数并比对不同场景下的性能区别
学习高性能课程相关的内容 (planner 和 coprocessor 为主),阅读 TiDB 源码博客,熟悉 query 处理流程
压力测试
本周通过脚本压力测试了 TiDB,跑 60 遍指定的 workloade,并用 gpof 分析 CPU 消耗。使用的脚本命令为:
i=60; while [ "$i" -ne "0" ]; do ./go-ycsb run mysql -P ./workloads/workloade -p recordcount=5000000 -p mysql.host=127.0.0.1 -p mysql.port=4000 -p mysql.user=root -p mysql.db=test done && i=$(($i -1 )); done;
火焰图如下:
通过观察火焰图,我们发现,copIteratorWorker 占用了很大一部分时间,反推可以得到:
计算下推给 TiKV 后,等待结果返回时间较长
TiDB 在对查询优化过程中,采取了不是最优的计划,导致 worker 消耗时间长
从开发的反馈来看,我们现在的解释和可能的优化方向是比较正确的。在大家的讨论中提到了 workloade 在不同测试场景下的性能可能有区别,所以下来进行了比对测试。
我们分别使用了 1,2,4,8,16,32条线程:
从这行图里可以看出测试的数据集和查询有不稳定性,需要多进行几轮测试来保持稳定。
小结
本周主要进行了比较系统的压力测试,希望可以找到优化方向。
遇到的问题
无法很好定位能够触发 planner 得出非优化 plan 的具体场景(数据库大小,测试线程etc),导致无法根据代码层面提出解决方案。
下一步规划
根据目前已经定位的组件 copIteratorWorker,跟踪调试 workloade 的查询语句。