6

什么是算子下盘?_华为云开发者社区的技术博客_51CTO博客

 1 year ago
source link: https://blog.51cto.com/u_15214399/5367202
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

什么是算子下盘?

原创

华为云开发者联盟 2022-06-08 16:06:13 博主文章分类:程序员之家 ©著作权

文章标签 数据 结果集 sql GaussDB 算子下盘 文章分类 MySQL 数据库 阅读数186

摘要:本文简单介绍什么是算子下盘、哪些算子会发生下盘、有哪些参数可以控制下盘、如何判断是否发生下盘、如何避免下盘。

本文分享自华为云社区《​ ​GaussDB(DWS)什么是算子下盘​​》,作者:Arrow0lf 。

处理性能问题时我们经常听到“下盘”这个概念,本文简单介绍什么是算子下盘、哪些算子会发生下盘、有哪些参数可以控制下盘、如何判断是否发生下盘、如何避免下盘。

1. 什么是算子下盘

论坛案例​ ​[问题求助] 官网文档中的算子落盘空间具体是什么概念,怎么配置这个值?​​中已经有专家做出了很清晰的答复,在此引用该答复:

任何计算都需要耗费内存空间,差别在于多少而已,对于如果耗费内存过多,会导致其他作业运行内存空间不足,导致作业不稳定,因此我们需要对查询语句的作业内存使用进行限制,保证作业运行的稳定性,以常见的排序操作为例

a) 500KB的数据进行排序,把全量数据load到内存,然后排序。 嗯,这个可以轻松搞定

b) 500MB的数据进行排序,把全量数据load到内存,然后排序。嗯,这个努把力也可以

c) 500GB的数据进行排序,把全量数据load到内存,然后排序。嗯,机器会说你是个疯子,物理内存才256GB,我不陪你玩了,我要OOM

那对于500GB的数据数据库怎么排序呢,这就需要使用外排了,除了算法之外,另外一个核心逻辑是,把需要使用的数据加载到内存中,不需要使用的数据写到磁盘上,内存中只保留有限的数据,这就是中间数据落盘的由来。当发生中间数据落盘时,我们称之为算子下盘。

2. 哪些算子会发生下盘

当前GaussDB(DWS)可下盘算子有六类(向量化及非向量化共10种):Hash(VecHashJoin),Agg(VecAgg),Sort(VecSort),Material(VecMaterial), SetOp(VecSetOp),WindowAgg(VecWindowAgg)。

3. 有哪些参数可以控制下盘

(1)work_mem:可以判断执行作业可下盘算子是否已使用内存量触发下盘点,当内存使用超过该参数后将触发算子下盘

(2)temp_file_limit:可以限制落盘算子的落盘文件大小,一般建议根据实际情况设置,防止下盘文件将磁盘空间占满,超过该值将报错退出

4. 如何判断语句是否发生了下盘

(1)通过下盘文件确认:下盘文件位于实例目录的base/pgsql_tmp目录下,下盘文件以pgsql_tmp$queryid_$pid命名,可以根据queryid确认是哪条sql发生了下盘。

(2)根据等待视图确认:等待视图中,当出现write file时,表示发生了中间结果下盘

(3)根据执行计划确认:performance中出现spill、written disk、temp file num等关键字时,说明对应的算子出现了下盘

5. 如何避免下盘

发生算子下盘时,算子运算数据将写入临时文件,带来5-10倍的性能下降,查询响应时间出现极大劣化,因此应尽可能避免下盘,可以考虑如下方法优化:

(1)减小中间结果集:发生下盘时往往是由于中间结果集过大,因此可以增加过滤条件减少中间结果集大小

(2)避免数据倾斜:数据倾斜严重时会导致单DN上数据量过大,引起单DN下盘

(3)及时analyze:当统计信息不准时,行数估算可能偏小,导致计划选择非最优,从而出现下盘

(4)单点调优:对业务sql进行单点调优

(5)适当调大work_mem参数:当中间结果集无法减少时,应根据实际情况适当调大work_mem

 ​点击关注,第一时间了解华为云新鲜技术~

  • 打赏
  • 1
  • 收藏
  • 评论
  • 分享
  • 举报

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK