Statement Outline
操作场景
MySQL数据库实例运行过程中,SQL语句的执行计划可能会频繁变化,导致数据库性能不稳定。TaurusDB 设计了一套利用 MySQL Optimizer/Index hint 来稳定执行计划的方法,称为 Statement outline,并提供了一组管理接口(dbms_outln package)以方便使用。
前提条件
TaurusDB的内核版本大于等于2.0.42.230600,支持Statement Outline功能。内核版本的查询方法请参见如何查看云数据库 TaurusDB实例的版本号。
注意事项
- Statement Outline默认关闭,如果您需要使用,请参见开启Statement Outline。
- Statement Outline不开启情况下对性能没有影响,但是特性开启后在规则较多的情况下对性能会产生影响,会导致性能下降。
功能描述
Statement Outline支持MySQL8.0的Optimizer Hints和Index Hints场景:
- Optimizer Hints
根据作用域(query block)和Hint对象,分为Global-Level Hint, Table-Level Hint, Index-Level Hint和Join-Order Hint等,详情请参见Optimizer Hints。
- Index Hints
Index Hint是向优化器提供有关在查询处理期间如何选择索引,不更改优化器策略。合理的索引可以加快数据索引操作,常用的索引Hint方式有三种,USE(参考使用),IGNORE(忽略),FORCE(强制),详情请参见Index Hints。
开启Statement Outline
- 登录TaurusDB管理控制台。
- 在“实例管理”页面,选择目标实例,单击实例名称,进入实例概览页面。
- 在左侧导航栏选择“参数修改”。
- 在搜索框中搜索参数“rds_opt_outline_enabled”,将对应的值改为“ON”。
表1 参数说明 参数名称
描述
rds_opt_outline_enabled
Statement Outline功能开关。
- ON:表示开启Statement Outline功能。
- OFF:表示关闭Statement Outline功能。
- 单击“保存”。
Statement Outline表介绍
TaurusDB内置了一个系统表(outline)保存Hint,系统启动时会自动创建该表,无需您手动创建。创建表的SQL语句如下:
CREATE TABLE `mysql`.`outline` (
`Id` bigint(20) NOT NULL AUTO_INCREMENT,
`Schema_name` varchar(64) COLLATE utf8_bin DEFAULT NULL,
`Digest` varchar(64) COLLATE utf8_bin NOT NULL,
`Digest_text` longtext COLLATE utf8_bin,
`Type` enum('IGNORE INDEX','USE INDEX','FORCE INDEX','OPTIMIZER') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`Scope` enum('','FOR JOIN','FOR ORDER BY','FOR GROUP BY') CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '',
`State` enum('N','Y') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'Y',
`Position` bigint(20) NOT NULL,
`Hint` text COLLATE utf8_bin NOT NULL,
PRIMARY KEY (`Id`)
) ENGINE=InnoDB
DEFAULT CHARSET=utf8 COLLATE=utf8_bin STATS_PERSISTENT=0 COMMENT='Statement outline'
各字段解释如下:
|
参数 |
说明 |
|
Id |
outline ID。 |
|
Schema_name |
数据库名称。 |
|
Digest |
Digest_text进行哈希计算得到的64字节的哈希字符串。 |
|
Digest_text |
SQL语句的特征。 |
|
Type |
Optimizer Hints中,Hint类型的取值为OPTIMIZER。 Index Hints中,Hint类型的取值为USE INDEX、FORCE INDEX或IGNORE INDEX。 |
|
Scope |
仅Index Hints需要提供该参数,取值如下:
|
|
State |
本规则是否启用,取值范围:
|
|
Position |
|
|
Hint |
|
管理Statement Outline
为了便捷地管理Statement Outline,定义了六个本地存储规则。






