调整实例loose_optimizer_switch参数

本文介绍如何调整实例的loose_optimizer_switch参数,以便进行实例调优。

背景

查询优化器是MySQL内部的一个功能模块,负责优化查询语句,它可以在执行查询之前,生成并选择最优的执行计划,从而提高查询效率。loose_optimizer_switch参数是RDS MySQL的一个系统变量,用于控制相关的查询优化器行为是否启用。

阿里云针对社区版MySQL的各个版本的optimizer_switch参数项做了适配,在RDS MySQL 5.7和RDS MySQL 8.0版本,loose_optimizer_switch参数引入了新的参数项,帮助您更好地进行实例调优,提高数据库的性能。

注意事项

  • 请了解每个参数项的含义和作用后再修改参数项,以免产生非预期的结果,详情请参见MySQL官方文档optimizer_switch

  • 请根据实际情况调整参数项,例如数据量大小、业务压力、实例规格和配置等。

  • 需逐个尝试修改参数项,观察查询性能的变化,直至找到最优配置。

  • 不同版本的MySQL可能存在不同的loose_optimizer_switch参数项,需根据具体版本进行调整。

loose_optimizer_switch参数项与RDS MySQL版本对应关系

您可以参考版本对应关系修改对应版本的参数项。loose_optimizer_switch参数项均向高版本兼容,即高版本支持低版本参数项。

RDS MySQL 8.0新增参数项

参数项名称

新增参数项的小版本

use_invisible_indexes={on|off}

rds_20190601

duplicateweedout={on|off}

condition_fanout_filter={on|off}

derived_merge={on|off}

skip_scan={on|off}

hash_join={on|off}

rds_20200331

subquery_to_derived = {on|off}

rds_20201231

prefer_ordering_index={on|off}

derived_condition_pushdown={on|off}

RDS MySQL 5.7新增参数项

参数项名称

新增参数项的小版本

condition_fanout_filter={on|off}

rds_20190915

derived_merge={on|off}

duplicateweedout={on|off}

prefer_ordering_index={on|off}

rds_20211231

RDS MySQL 5.6支持的参数项

参数项名称

支持参数项的小版本

batched_key_access={on|off}

任意小版本均支持

block_nested_loop={on|off}

engine_condition_pushdown={on|off}

firstmatch={on|off}

index_condition_pushdown={on|off}

index_merge={on|off}

index_merge_intersection={on|off}

index_merge_sort_union={on|off}

index_merge_union={on|off}

loosescan={on|off}

materialization={on|off}

mrr={on|off}

mrr_cost_based={on|off}

semijoin={on|off}

subquery_materialization_cost_based={on|off}

use_index_extensions={on|off}

说明

在MySQL 5.6新增了loose_optimizer_switch参数,MySQL 5.6的任意小版本均支持上述参数项。

操作步骤

请参见设置实例参数