混合优化器的行列自动分流机制能够对每个查询进行深入分析,评估其在行存节点与列存节点上的执行成本,并基于评估结果选择最优执行方案,从而有效降低查询执行成本。这一机制确保了每个查询能够被合理地分配至最合适的处理节点。
问题描述
默认版本的行列自动分流机制采用基于预估执行代价的分流策略:当SQL语句的预估执行代价超过预设阈值时,数据库代理(Proxy)将自动将该请求分流至只读列存节点处理;反之,若预估代价未达到阈值,则该请求由行存只读节点或主节点来处理。其主要缺陷在于并未真正比较SQL在行存和列存环境下的实际执行代价,而是简单地以一个固定的阈值作为分流依据,这导致实际环境中经常出现分流不准确的现象。
版本限制
PolarDB集群的内核版本需满足以下条件之一:
PolarDB MySQL版8.0.1版本且修订版本为8.0.1.1.43及以上。
PolarDB MySQL版8.0.2版本且修订版本为8.0.2.2.26及以上。
您可以在集群详情页查看集群的内核版本。
注意事项
集群地址已开启行存/列存自动分流。
技术原理
在PolarDB MySQL中,存在三种类型的节点:
行存节点:使用InnoDB引擎,负责执行行存查询任务。
列存节点:使用IMCI引擎,负责处理列存查询任务。
Proxy节点:负责将客户端请求转发至行存或列存节点。
一个查询请求从客户端提交至集群时,其处理流程如下:
Proxy节点接收查询请求后,首先将其转发至行存节点进行处理。
行存节点内的混合优化器对查询进行分析,分别评估其在行存和列存环境下的执行成本,从而确定最优执行路径。
如果判定该查询更适合在行存环境下执行,将直接在本地行存节点上完成处理。
若判断结果显示列存环境更优,则行存节点将查询请求转发至列存节点进行处理。
在这一流程中,混合优化器的行列路由决策是关键。为了实现精准的查询分配,混合优化器为每个查询分别计算其在两种存储模式下的执行代价。其中:
行存代价模型基于MySQL执行计划,估算行存方案的执行代价。
列存代价模型根据IMCI执行计划,估算列存方案的执行代价。
这两种代价模型采用统一且具有物理意义的度量标准,代表预估的执行时间。通过比较行存和列存的代价估计值,混合优化器能够智能地选择最优执行方案,从而确保查询性能的最优化。
配额流程
混合优化器功能目前处于灰度发布阶段。请前往配额中心,根据配额ID
polardb_mysql_hybrid_optimizer
找到配额名称"PolarDB MySQL混合优化器配额"在对应的操作列单击申请来开通该功能。失效流程与生效流程步骤相似,配额申请值选择“失效”待后续人工审批通过后即可关闭混合优化器功能。
点击配额中心。输入配额ID,进行相关搜索,点击申请按钮。
配额申请对话框选择生效,并填写生效时间,失效时间、申请理由和是否通知调整结果。
选择确认调整。等待后续人工审批通过后即可开启使用混合优化器功能。