本文介绍如何调整实例的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的任意小版本均支持上述参数项。
操作步骤
请参见设置实例参数。