本篇文章将会分享两块内容。
第一:最近工作的一些内容反思。
第二:有关C std::move的问题。
性能提升是一个非常重要的话题,特别是在大型系统当中,我们经常会使用perf/火焰图的方式去采集数据,从而分析出性能的瓶颈点,使用一些工具是比较简单的办法之一。
在数据库当中观察一条SQL的性能通常几种办法,第一个比较直观的是执行时间,第二个是analyze的查询计划,第三个就是具体算子的分析。
这几点在最近工作中频繁使用,我们是做MPP的数据库,其中最重要的一点是多节点数据分发,特别是向量化场景,那么这一块在实际环境中遇到了如下问题:
- 如何快速传输批量数据
- 发送端与接收端如何合理的控制数据行数
- 各个算子之间的顺序又有什么影响
- 像tpcds场景最复杂的67查询,如何优化?
基于这些点,在最近工作中,提出了一些挑战与实现。
- 针对批数据的发送与接收需要合理的处理,否则在批量计算时非常损耗性能。
- 实际场景中的数据分发占据大部分时间,可能高达80%以上,真正计算非常快,如何加速数据分发是一个非常有挑战的事。
- 由于ORCA优化器本身的实现问题,导致产生多个Motion算子,出现的plan非常不合理,需要修改ORCA来生成一条更加精简且合理的查询计划。
- 对于GroupAgg来说,如何实现一个rollup函数的groupingsets算子呢?
- 等等
最近做的一些事情,颇具挑战且有意义。
看完上面的内容,回到C 的内容,其中比较重要的是std::move,那么问两个问题。
第一:什么场景下使用std::move,为何一定要使用呢?
第二:什么场景下不需要使用std::move,为何不要使用呢?
本节完~