工作碎碎念与C++提问

2023-10-30 17:03:56 浏览数 (1)

本篇文章将会分享两块内容。

第一:最近工作的一些内容反思。

第二:有关C std::move的问题。

性能提升是一个非常重要的话题,特别是在大型系统当中,我们经常会使用perf/火焰图的方式去采集数据,从而分析出性能的瓶颈点,使用一些工具是比较简单的办法之一。

在数据库当中观察一条SQL的性能通常几种办法,第一个比较直观的是执行时间,第二个是analyze的查询计划,第三个就是具体算子的分析。

这几点在最近工作中频繁使用,我们是做MPP的数据库,其中最重要的一点是多节点数据分发,特别是向量化场景,那么这一块在实际环境中遇到了如下问题:

- 如何快速传输批量数据

- 发送端与接收端如何合理的控制数据行数

- 各个算子之间的顺序又有什么影响

- 像tpcds场景最复杂的67查询,如何优化?

基于这些点,在最近工作中,提出了一些挑战与实现。

  1. 针对批数据的发送与接收需要合理的处理,否则在批量计算时非常损耗性能。
  2. 实际场景中的数据分发占据大部分时间,可能高达80%以上,真正计算非常快,如何加速数据分发是一个非常有挑战的事。
  3. 由于ORCA优化器本身的实现问题,导致产生多个Motion算子,出现的plan非常不合理,需要修改ORCA来生成一条更加精简且合理的查询计划。
  4. 对于GroupAgg来说,如何实现一个rollup函数的groupingsets算子呢?
  5. 等等

最近做的一些事情,颇具挑战且有意义。

看完上面的内容,回到C 的内容,其中比较重要的是std::move,那么问两个问题。

第一:什么场景下使用std::move,为何一定要使用呢?

第二:什么场景下不需要使用std::move,为何不要使用呢?

本节完~

0 人点赞