Bubble执行模式

更新时间:
复制为 MD 格式

本文介绍 Auto-Scaling 资源组中的 Bubble 执行模式。Bubble 执行模式支持根据查询实际分配到的资源配额进行自适应调度,兼顾查询通过性和执行性能。

说明

本文所有配置项均可通过 ConfigHint配置参数

背景信息

AnalyticDB for MySQL中查询的负载比较多样化,既有低延迟实时分析查询,也有大数据量的 ETL(Extract-Transform-Load)清洗类查询。实时分析查询对查询延迟要求较高,希望能更快完成;清洗类查询对延迟要求不高,通常希望用更低的执行成本完成,并且尽可能不要影响实时分析类查询的执行。

AnalyticDB for MySQL将对查询延迟要求高的实时查询称为Interactive查询;对延迟不高、数据量很大的查询称为Batch查询。针对两种不同的查询类型,AnalyticDB for MySQL 支持两种执行模式:

  • MPP(针对 Interactive 查询):查询的所有 Stage 同时调度执行,中间结果以流水线方式在上下游 Stage 之间流转。

  • BSP(针对 Batch 查询):查询的 Stage 根据依赖关系逐个调度执行,Stage 产生的中间结果会持久化,存在一定的额外开销。

对比项

MPP(Interactive 查询)

BSP(Batch 查询)

调度方式

所有 Stage 同时调度

Stage-by-Stage 调度,每次只执行 1 个 Stage

数据传输方式

流式传输

持久化,存在额外开销

资源需求

适用场景

对 RT 敏感、执行时间较短(秒级或毫秒级)、数据量不大。例如:点查、实时分析。

对 RT 不敏感、执行时间长(分钟级或小时级)、查询稳定性要求高、数据量非常大的查询。例如:ETL。

在 Auto-Scaling 资源组中,系统会根据资源组水位给查询在一定范围内分配资源配额。资源水位较高时查询使用更少的资源配额,反之使用更多的资源配额。在不同资源配额下:

  • MPP:低于一定资源量后,因资源不足而无法执行。资源充足时性能优于 BSP。

  • BSP:在各种资源配额下都能稳定调度执行,但由于存在额外的中间数据持久化开销,资源充足时性能不如 MPP。

Bubble执行模式

优势

image

Bubble 执行模式支持根据实际资源配额和查询的资源评估结果,自适应选择同时调度的 Stage。相比于 MPP 和 BSP 执行模式,Bubble 执行模式有以下优势:

  • 无需您根据查询复杂度和资源配额手动选择查询模式,系统自动完成自适应调度。在资源紧缺时保证查询通过性,在资源充足时达到与 MPP 相同的性能。

  • 在资源临界区域,Bubble 执行模式可以让部分 Stage 同时调度,Stage 间数据流式传输,减少额外开销,性能比 BSP 更优。同时资源配额对性能的影响更加平滑,避免在 MPP 资源阈值附近出现性能突变。

工作原理

Bubble 切分器根据查询的资源评估结果,结合查询实际分配到的资源配额,将完整的执行计划切分为若干个片段(每个片段称为一个 Bubble),确保每个 Bubble 的峰值内存在资源配额限制范围内。Bubble 之间的中间结果会持久化,因此 Bubble 之间不需要同时调度,可以独立执行。

重要

Bubble 执行模式依赖资源评估模块,因此仅支持在 Auto-Scaling 资源组中使用。关于资源评估和查询资源配额的详细逻辑,请参见查询资源评估与配额调优

image

Bubble 调度器根据 Bubble 之间的依赖关系逐个调度执行:Bubble 内的所有 Stage 同时调度执行(类似 MPP);Bubble 之间根据依赖关系逐个执行(类似 BSP)。当资源充足、Bubble 切分较少时更接近 MPP 调度;当资源不足、Bubble 切分较多时更接近 BSP 调度。

Bubble 执行模式在 Auto-Scaling 资源组中默认开启,对所有 Interactive 模式的查询生效。如果查询的资源配额充足,Bubble 切分器不会做 Bubble 切分,此时调度方式等价于 MPP。

常见问题

查询 OOM

开启 Bubble 执行模式后,您仍然可能遇到查询 OOM 问题。可能原因包括:

  • 统计信息不准确,或查询的执行计划过于复杂,导致峰值内存评估出现较大偏差。

  • 存在数据倾斜,内存负载集中在单个节点上。虽然整体内存配额足够,但单个节点内存超限。

解决方法:

  1. 查询诊断结果中检查执行计划是否可以调优

  2. 检查基表统计信息是否缺失或存在很大偏差,并更新统计信息

  3. 将查询配置为 Batch 执行模式运行(query_type=batch)。

查询性能不稳定

以下因素可能导致查询性能不稳定:

  • Auto-Scaling 资源组水位不同,实际分配到的资源配额发生变化。

  • 统计信息变动导致 Bubble 切分方式出现变化。

如果您对查询性能稳定性要求较高,建议:

  • 配置固定的查询资源配额,详情请参见查询资源评估与配额调优

  • 关闭 Bubble 执行模式以确保使用 MPP 调度:bubble_query_scheduler_enabled=false