StarRocks 算子落盘:让大查询又快又稳

news2024/11/16 5:26:21

内存是对数据库非常重要的数据存储介质,它承载了所有查询计算的请求,在提升性能、实时分析等场景都有着重要的作用。正是由于内存如此重要,经常会遇到内存不够的情况,从而导致查询被强制终止,甚至对线上其他查询性能产生负面影响。例如:

在轻量级 ETL 或查询加速场景(如 INSERT INTO AS SELECT 任务,或构建大宽表的物化视图进行建模),由于涉及查询通常是多张大表关联或者是高基数聚合等复杂计算,从而在实际任务计算时难以应用查询优化,导致内存占用过高,引发任务失败

在 ad-hoc 随机探查中,分析师偶然写了非常复杂、涉及到非常大数据集的查询,导致查询失败 实际上,相比于线上关键业务的查询,这类偶发查询和 ETL 任务对查询性能的要求通常并不高。我们只需要它们能够在有限的资源下平稳地运行出结果,而不要对在线业务产生影响,以免因小失大。

中间结果落盘

内存现在交通管理,请绕行磁盘

为了更加合理地利用有限的内存资源,StarRocks 自2.2版本就推出了资源隔离功能,通过资源组来对内存及 CPU 进行分配。如果把内存比作数据计算的高速公路,资源隔离就像是公交车道。它虽然一定程度上隔离了线上查询和 ETL、偶发性大查询,让线上查询能有独立车道、更加稳定,但并没有解决如何让其他车道的 ETL 和大查询能够平稳通行、不发生交通堵塞甚至事故。

自3.0版本起,StarRocks 推出了中间结果落盘功能( Spill )。简单来讲,中间结果落盘通过将查询中涉及的大算子的中间结果暂时写入磁盘,从而释放内存空间。中间结果落盘就像是交警,它能够在内存阻塞的时候进行交通管制,让部分中间结果绕行磁盘等待,从而可以确保查询操作继续执行,而不会因内存不足而失败。

alt

目前,StarRocks 支持聚合算子、排序算子、HASH JOIN(LEFT JOIN、RIGHT JOIN、FULL JOIN、OUTER JOIN、SEMI JOIN 以及 INNER JOIN)算子的中间结果落盘。通过落盘,查询使用的内存可以被放大十倍,从而可以支持更多大查询以及 ETL 的应用场景。

算子落盘

内存的智能管理助手

然而,中间结果落盘是一种用磁盘空间换内存空间的方式,一定会涉及到额外的 I/O 开销以及性能损耗。如何能够根据内存情况动态地进行落盘、保证查询性能损耗较低是一个比较大的挑战。

StarRocks 支持强制落盘与自动落盘两种落盘机制。在自动落盘模式下,系统会自动根据当前内存的占用情况实时判断当前查询是否需要开启落盘。具体来讲,在每个算子真实处理数据之前,StarRocks 会预估需要申请多少内存才可以执行完成,并尝试预留。如果预留结束仍旧没有超过查询内存限制的80%,则不会触发算子落盘,否则即触发算子落盘预留内存为其他查询服务。

查询更稳定,性能仍旧领先

基于 StarRocks 3.1 版本针对 TPC-DS 10T 测试集来测试中间结果落盘的能力。

在极小的集群上是否能够稳定跑出结果?

集群配置:1FE (8C 16G) 3BE (16C 64G),每个BE下挂载两块阿里云PL1级别云盘

在没有开启中间结果落盘时,99个查询中有15个查询失败。在开启中间结果落盘后,所有查询均执行成功。算子落盘显著提升了查询稳定性。

性能如何?

在相同的机器配置下对 StarRocks 和 Spark 进行了对比。在均开启自动算子落盘、查询平稳跑成功的情况下,StarRocks 整体查询性能是 Spark 的4.35倍。

物化视图+中间结果落盘 灵活加速的利器

在 重新定义物化视图,你必须拥有的极速湖仓神器 中,我们介绍了如何通过物化视图来对湖仓进行灵活加速。在湖仓一体架构中,物化视图起到关键作用,在数据建模、透明加速、增量计算中都能够进一步降低数据处理的复杂度、提高查询性能和优化数据的时效性,使得用户在数据架构升级的同时,能够享受到使用体验的升级。

alt

试想一种很常见的查询加速场景:ODS 层内包含多张事实表和维度表,查询经常需要在多表关联的基础上再进行各类聚合计算,频繁查询对内存消耗极大,也会对查询性能有一定影响。一个直观的想法是构建物化视图,并利用物化视图的智能查询改写功能,做到透明加速。

为了能够让更多的查询被透明改写到物化视图上,我们建议对查询中最公共的部分创建物化视图。在这种场景下,即是构建不带谓词的大宽表物化视图,后续所有涉及相关表的查询均可以被自动改写,详情请见:

https://docs.starrocks.io/zh-cn/latest/using_starrocks/query_rewrite_with_materialized_views

然而由于不带有谓词,物化视图的构建和刷新就无法应用任何下推优化,通常需要将巨大的多张表进行完整关联,对内存是一个不小的挑战。

物化视图和中间结果落盘的结合正是应对这种场景。我们以 TPC-H 1TB 测试集为例,该测试集内涉及大量订单表与维度表聚合后上卷筛选的查询。 测试结果:

集群信息:StarRocks 3.1,1 FE 3 BE,16Core 64GB,每台 BE 600GB 磁盘

直接查询

在直接查询的情况下,很多查询因为内存超限而失败。

开启中间结果落盘后,所有查询都能稳定跑出结果。

创建大宽表物化视图对查询进行加速

在直接构建的情况下,构建因内存超限失败。

开启中间结果落盘后,物化视图可以成功构建与刷新,并且查询速度有显著提升。

物化视图加速SQL示例:

alt

从案例中可以看出:

在直接查询的情况下,中间结果落盘显著地提高了查询的稳定性

中间结果落盘提高了物化视图构建和刷新的成功率,创建物化视图后对查询有显著加速作用

未来展望

中间结果落盘是 StarRocks 湖仓一体架构中非常重要的一环。在大数据量下的复杂分析、数据处理、物化视图构建等场景都发挥着重要作用。释放了内存枷锁,解决了更多用户的分析场景和需求。对于复杂计算的查询或是数据加工与建模,都能够在资源可控的情况下平稳运行。未来,中间结果落盘还会与资源隔离、multi-warehouse 能力进行结合,实现更加细粒度的资源隔离与资源管控,让您能够对不同的 workflow 进行定制化的资源配置和使用规则。

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1243096.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

UML建模图文详解教程04——对象图

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl本文参考资料:《UML面向对象分析、建模与设计(第2版)》吕云翔,赵天宇 著 对象图 对象图(object diagram)显示了某一时刻的一组…

OSG动画与声音-动画(3)

动画 动画是一种常见的动画形式(Frame ByFrame),其原理是在连续的关键帧中分解动画动作,从另一个方面来说,也就是在时间轴的每帧上逐顿绘制不同的内容,使其连续播放而形成动画。 因为帧动画的帧序列内容不一样,不但给制…

通过 OGNL 注入执行 Confluence 预身份验证远程代码 (CVE-2022-26134)

漏洞描述 Confluence 是由澳大利亚软件公司 Atlassian 开发的基于 Web 的企业 wiki。 02 年 2022 月 <> 日&#xff0c;Atlassian 发布了针对其 Confluence Server 和 Data Center 应用程序的安全公告&#xff0c;强调了一个严重严重的未经身份验证的远程代码执行漏洞。…

java项目之网络在线考试系统(ssm)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的网络在线考试系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; &#xff08;1&#xff09;登录…

python如何快速查找到想要的文档

字多不看版&#xff0c;直接体验 待补充 演示代码 # -*- coding:UTF-8 -*-# region 导入必要的依赖包 import os import subprocess from enum import Enum模块名 pyperclip try:import pyperclip # 需要安装 pyperclip 模块&#xff0c;以支持粘贴板操作 except ImportEr…

Java零基础——SpringMVC篇

1.SpringMVC介绍 SpringMVC是Spring框架中的一个组件&#xff0c;是一个轻量级的web的MVC框架&#xff0c;充当controller,其本质就是一个Servlet。 1.1 传统Servlet的不足 每个请求&#xff0c;都需要定义一个Servlet。虽然可以在service方法中&#xff0c;根据业务标识进行…

「Verilog学习笔记」 输入序列不连续的序列检测

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 题目要求检测a的序列&#xff0c;a为单bit输入&#xff0c;每个时刻可能具有不同的值&#xff0c;且并不是每一个数据都是有效的&#xff0c;需要根据data_valid信号进行判…

【knife4j-spring-boot】Springboot + knife4j-spring-boot 整合swagger脚手架

swagger-boostrap-ui从1.x版本到如今2.x&#xff0c;同时也更改名字Knife4j 在此记录下 knife4j-spring-boot-starter 的整合。 只需要引入knife4j-spring-boot-starter&#xff0c;无需引入其他的swagger包&#xff0c;knife4j-spring-boot-starter已经包含。 官方版本说明…

软件系统测试有哪些测试流程?系统测试报告编写注意事项

在软件开发的过程中&#xff0c;系统测试是至关重要的一环&#xff0c;它的目的是验证和评估软件产品是否符合预期的质量标准&#xff0c;以确保系统的稳定性、可靠性和安全性。 一、软件系统测试的测试流程 1、需求分析与测试计划制定&#xff1a;根据需求分析确定测试目标、…

C++ 问题 怎么在C++11标准语法中调用C++20的类

一. 问题 在工作中,因为一个算法功能需要跟别的部门对接,他们提供了该算法的头文件.h,静态库.lib,动态库.dll。但是头文件中使用了C++20才有的新特性,如#include等,而本地使用的vs2015开发环境,只支持C++11标准语法,这种情况下,该怎么把该算法集成到本地项目中呢? …

前端已死?看看我的秋招上岸历程

背景 求职方向&#xff1a;web前端 技术栈&#xff1a;vue2、springboot&#xff08;学校开过课&#xff0c;简单的学习过&#xff09; 实习经历&#xff1a;两段&#xff0c;但都是实训类的&#xff0c;说白了就是类似培训&#xff0c;每次面试官问起时我也会坦诚交代&…

激光切割设备中模组的作用有哪些?

激光切割设备是一种高精度的自动化加工设备&#xff0c;用于对金属、非金属等材料进行精确切割。直线模组作为激光切割设备的重要组成部分&#xff0c;在激光切割设备中起着重要的作用&#xff0c;为设备的运动系统提供了高精度、高稳定性和高效率的运动控制。 1、高精度的位置…

【C++初阶】第一站:C++入门基础(中)

前言&#xff1a; 这篇文章是c入门基础的第一站的中篇,涉及的知识点 函数重载:函数重载的原理--名字修饰 引用:概念、特性、使用场景、常引用、传值、传引用效率比较的知识点 目录 5. 函数重载 &#xff08;续&#xff09; C支持函数重载的原理--名字修饰(name Mangling) 为什么…

【C语言】qsort函数

目录 简介 头文件 ​编辑 函数原型&#xff1a; 参数函数如何写&#xff1a; 参数函数要求&#xff1a; qsort对整性数据的排序&#xff1a; qsort对字符型数据的排序&#xff1a; 对结构体类型的内部元素排序&#xff1a; 函数的底层是以快速排序实现的 但是本文不深入…

关于「光学神经网络」的一切:理论、应用与发展

/目录/ 一、线性运算的光学实现 1.1. 光学矩阵乘法器 1.2. 光的衍射实现线性运行 1.3. 基于Rayleigh-Sommerfeld方程的实现方法 1.4. 基于傅立叶变换的实现 1.5. 通过光干涉实现线性操作 1.6. 光的散射实现线性运行 1.7. 波分复用&#xff08;WDM&#xff09;实现线性运…

phpstudy和IDEA 配置php debug

1.安装xdebug 扩展&#xff0c;phpinfo() 查看 2.配置php.ini zend_extensionD:/phpstudy_pro/Extensions/php/php7.4.3nts/ext/php_xdebug.dll xdebug.collect_params1 xdebug.collect_return1 xdebug.auto_traceOn xdebug.trace_output_dirD:/phpstudy_pro/Extensions/php_l…

vue + docxtemplater 导出 word 文档

一、痛点 word 导出 这种功能其实之前都是后端实现的&#xff0c;但最近有个项目没得后端。所以研究下前端导出。 ps&#xff1a; 前端还可以导出 pdf&#xff0c;但是其分页问题需要话精力去计算才可能实现&#xff0c;并且都不是很完善。可参考之前的文章&#xff1a;利用 h…

Flink 替换 Logstash 解决日志收集丢失问题

在某客户日志数据迁移到火山引擎使用 ELK 生态的案例中&#xff0c;由于客户反馈之前 Logstash 经常发生数据丢失和收集性能较差的使用痛点&#xff0c;我们尝试使用 Flink 替代了传统的 Logstash 来作为日志数据解析、转换以及写入 ElasticSearch 的组件&#xff0c;得到了该客…

PasteNow for mac剪贴板工具

PasteNow 是一款简单易用的剪贴板管理工具&#xff0c;可帮助用户快速存储和管理剪贴板上的文本和图片内容。用户可以使用 PasteNow 软件快速将文本内容保存到不同的笔记或页面中&#xff0c;也可以方便地将剪贴板上的图片保存到本地或分享给其他应用程序。 此外&#xff0c;P…

Java互联网+医院智能导诊系统源码 自动兼容H5小程序、Uniapp

随着信息和通信技术的进步,智能和移动技术越来越普遍,尤其在医疗保健领域,一些新型卫生信息系统被不断开发出来支持医院和其他卫生保健组织的管理和运作。 智能导诊系统是嵌入到医院和医疗保健卫生中心 HIS系统中的一种专门导诊系统,通过智能语音交互的方式帮助用户完成导诊、分…