写点什么

什么是算子下盘

  • 2022 年 6 月 08 日
  • 本文字数:1222 字

    阅读完需:约 4 分钟

本文分享自华为云社区《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


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

发布于: 刚刚阅读数: 5
用户头像

提供全面深入的云计算技术干货 2020.07.14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
什么是算子下盘_数据库_华为云开发者联盟_InfoQ写作社区