配置混合优化器行列自动分流

混合优化器的行列自动分流机制能够对每个查询进行深入分析,评估其在行存节点与列存节点上的执行成本,并基于评估结果选择最优执行方案,从而有效降低查询执行成本。这一机制确保了每个查询能够被合理地分配至最合适的处理节点。

问题描述

默认版本的行列自动分流机制采用基于预估执行代价的分流策略:当SQL语句的预估执行代价超过预设阈值时,数据库代理(Proxy)将自动将该请求分流至只读列存节点处理;反之,若预估代价未达到阈值,则该请求由行存只读节点或主节点来处理。其主要缺陷在于并未真正比较SQL在行存和列存环境下的实际执行代价,而是简单地以一个固定的阈值作为分流依据,这导致实际环境中经常出现分流不准确的现象。

版本限制

PolarDB集群的内核版本需满足以下条件之一:

  • PolarDB MySQL8.0.1版本且修订版本为8.0.1.1.43及以上。

  • PolarDB MySQL8.0.2版本且修订版本为8.0.2.2.26及以上。

您可以在集群详情页查看集群的内核版本

注意事项

集群地址已开启行存/列存自动分流

技术原理

PolarDB MySQL中,存在三种类型的节点:

  • 行存节点:使用InnoDB引擎,负责执行行存查询任务。

  • 列存节点:使用IMCI引擎,负责处理列存查询任务。

  • Proxy节点:负责将客户端请求转发至行存或列存节点。

一个查询请求从客户端提交至集群时,其处理流程如下:

  1. Proxy节点接收查询请求后,首先将其转发至行存节点进行处理。

  2. 行存节点内的混合优化器对查询进行分析,分别评估其在行存和列存环境下的执行成本,从而确定最优执行路径。

  3. 如果判定该查询更适合在行存环境下执行,将直接在本地行存节点上完成处理。

  4. 若判断结果显示列存环境更优,则行存节点将查询请求转发至列存节点进行处理。

image

在这一流程中,混合优化器的行列路由决策是关键。为了实现精准的查询分配,混合优化器为每个查询分别计算其在两种存储模式下的执行代价。其中:

  • 行存代价模型基于MySQL执行计划,估算行存方案的执行代价。

  • 列存代价模型根据IMCI执行计划,估算列存方案的执行代价。

这两种代价模型采用统一且具有物理意义的度量标准,代表预估的执行时间。通过比较行存和列存的代价估计值,混合优化器能够智能地选择最优执行方案,从而确保查询性能的最优化。

配额流程

说明
  • 混合优化器功能目前处于灰度发布阶段。请前往配额中心,根据配额IDpolardb_mysql_hybrid_optimizer找到配额名称"PolarDB MySQL混合优化器配额"在对应的操作列单击申请来开通该功能。

  • 失效流程与生效流程步骤相似,配额申请值选择“失效”待后续人工审批通过后即可关闭混合优化器功能。

  1. 点击配额中心。输入配额ID,进行相关搜索,点击申请按钮。

    image

  2. 配额申请对话框选择生效,并填写生效时间失效时间申请理由是否通知调整结果

    image.png

  3. 选择确认调整。等待后续人工审批通过后即可开启使用混合优化器功能。