- 最新动态
- 功能总览
- 服务公告
- 产品介绍
- 快速入门
- 内核介绍
- 用户指南
- 最佳实践
- 性能白皮书
-
API参考
- 使用前必读
- API概览
- 如何调用API
-
API(推荐)
- 查询数据库引擎的版本
- 查询数据库规格
-
实例管理
- 创建数据库实例
- 重启数据库实例
- 删除/退订数据库实例
- 创建只读节点
- 删除/退订只读节点
- 包年/包月实例存储扩容
- 修改实例名称
- 重置数据库密码
- 变更实例规格
- 查询专属资源池列表
- 查询专属资源信息详情
- 设置实例秒级监控
- 查询实例秒级监控
- 节点重启
- 内核版本升级
- 开关SSL
- 绑定弹性公网IP地址
- 解绑弹性公网IP地址
- 手动主备倒换
- 设置可维护时间段
- 修改安全组
- 修改内网地址
- 修改实例端口
- 修改实例备注
- 申请内网域名
- 修改内网域名
- 查询内核版本信息
- 设置自动变配
- 查询自动变配
- 资源预校验
- 查询实例列表
- 查询实例详情信息
- 批量查询实例详情
- 设置回收站策略
- 查询回收站策略
- 查询回收站实例信息
- 批量修改节点名称
- 查询自动变配历史记录
- 设置Serverless配置策略
- 修改节点故障倒换优先级
- 查询弹性公网IP
- 备份管理
- 参数模板管理
- 配额管理
- 数据库代理
- 日志管理
- 标签管理
- 数据库用户管理
- 数据库管理
- SQL限流
- 任务中心
- 智能诊断
-
HTAP-标准版
- 恢复StarRocks数据同步
- 暂停StarRocks数据同步
- HTAP数据同步表配置校验
- 创建StarRocks实例
- 查询StarRocks实例
- 删除StarRocks实例
- 重启StarRocks实例
- 重启StarRocks节点
- StarRocks资源检查
- HTAP引擎资源查询
- 获取HTAP实例存储类型
- HTAP查询规格信息
- 查询HTAP实例列表
- 创建StarRocks数据同步
- 删除StarRocks数据同步
- 查询StarRocks数据同步状态信息
- HTAP数据同步库配置校验
- 查询StarRocks数据同步配置信息
- 查询StarRocks数据同步的库参数配置
- 查询StarRocks数据库
- 查询数据库账户
- 创建数据库账号
- 删除数据库账户
- 修改数据库账号密码
- 修改数据库账号权限
- StarRocks实例规格变更
- 查询参数
- 修改参数
- StarRocks实例开启行列分流
- 参数对比
- HTAP-轻量版
- 多租特性
- API(即将下线)
- 权限策略和授权项
- 附录
- SDK参考
- 场景代码示例
-
故障排除
- 备份恢复
- 连接类
-
SQL类
- 建表时timestamp字段默认值无效
- 索引长度限制导致修改varchar长度失败
- delete大表数据后,再查询同一张表时出现慢SQL
- 更新emoji表情数据报错Error 1366
- 存储过程和相关表字符集不一致导致执行缓慢
- 报错ERROR [1412]的解决方法
- 存在外键的表无法删除
- GROUP_CONCAT结果不符合预期
- 创建二级索引报错Too many keys specified
- distinct与group by优化
- 为什么有时候用浮点数做等值比较查不到数据
- 开通数据库代理后,还是有大量select请求分发到主节点
- 表空间膨胀问题
- MySQL创建用户提示服务器错误(ERROR 1396)
- 执行alter table xxx discard/import tablespace报错
- 数据库报错Native error 1461的解决方案
- 创建表失败报错Row size too large的解决方案
- Order by limit分页出现数据重复问题
- 执行select * from sys.innodb_lock_waits报错
- 参数类
- 性能资源类
-
基本使用类
- 查看TaurusDB的存储容量
- 修改库名和修改表名
- 字符集和字符序的默认选择方式
- 自增字段值跳变的原因
- 表的自增AUTO_INCREMENT初值与步长
- 修改表的自增AUTO_INCREMENT值
- 自增主键达到上限,无法插入数据
- 自增字段取值
- 自增属性AUTO_INCREMENT为何未在表结构中显示
- 空用户的危害
- 慢日志显示SQL语句扫描行数为0
- 错误日志页面显示handle_sync_msg_from_slave my_net_read error:-1
- 执行SQL语句报错:ERROR 1290 (HY000): The MySQL server is running with the --sql-replica-on option so it cannot execute this statement的原因及解决方案
- 常见问题
- 视频帮助
- 文档下载
- 通用参考
链接复制成功!
Statement Outline
MySQL数据库实例运行过程中,SQL语句的执行计划经常会发生改变,导致数据库不稳定。TaurusDB 设计了一套利用 MySQL Optimizer/Index hint 来稳定执行计划的方法,称为 Statement outline,并提供了一组管理接口方便使用(dbms_outln package)。
前提条件
TaurusDB的内核版本大于等于2.0.42.230600,支持Statement Outline功能。
注意事项
- 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,定义了六个本地存储规则。
- add_optimizer_outline
增加Optimizer Hint。
- 语法
dbms_outln.add_optimizer_outline(<Schema_name>,<Digest>,<Query_block>,<Hint>,<Query>);
说明:
Digest和Query(原始SQL语句)可以任选其一。如果填写Query,DBMS_OUTLN会计算Digest和Digest_text,建议直接设置Query。
- 参数说明
参数名称
是否必选
类型
含义
Schema_name
是
VARCHAR
语句所属的数据库名称。
可设置为空/NULL, 设置为空/NULL后,语句不能匹配。
Digest
否
VARCHAR
语句特征哈希值。
和 Query参数可以选择其一设置, 不设置的话需要设置为空字符串。
Query_block
是
INT
Hint作用对象在语句中的位置。
取值范围:
大于等于1。
Hint
是
VARCHAR
Hint名称。
Query
否
VARCHAR
SQL语句。
- 和 Digest参数可以选择其一,不设置的话需要设置为空字符串''。
- 如果两个都设置的话,确认Digest和Query是匹配的,否则参数校验不通过,执行失败。
- 示例
- 语法
- add_index_outline
增加Index Hint。
- 语法
dbms_outln.add_index_outline(<Schema_name>,<Digest>,<Position>,<Type>,<Hint>,<Scope>,<Query>);
说明:
Digest和Query(原始SQL语句)可以任选其一。如果填写Query,DBMS_OUTLN会计算Digest和Digest_text,建议直接设置Query。
- 参数说明
参数名称
是否必选
类型
含义
Schema_name
是
VARCHAR
语句所属的db name。
可设置为空/NULL, 设置为空后,语句不能匹配
Digest
否
VARCHAR
语句特征哈希值。
和 Query可以选择其一, 不设置的话需要设置为''
Position
是
INT
Hint作用对象在语句中的位置,Index Hint作用对象为table, 即为表在语句中的位置。
取值范围:大于等于1。
Type
是
ENUM
Hint类型。取值如下:
- OPTIMIZER
- USE INDEX
- FORCE INDEX
- IGNORE INDEX
Hint
是
VARCHAR
Hint名称,即索引名称集合,多个索引名之间用英文逗号分隔。
Scope
是
ENUM
Hint作用域。取值如下:
- FOR GROUP BY
- FOR ORDER BY
- FOR JOIN
- 空字符串
Query
否
VARCHAR
SQL语句。
- 和 Digest可以选择其一,不设置的话需要设置为''。
- 如果两个都设置的话,确认Digest和Query是匹配的,否则参数校验不通过,执行失败。
- 示例
call dbms_outln.add_index_outline('outline_db', '', 1, 'USE INDEX', 'ind_1', '',"select * from t1 where t1.col1 =1 and t1.col2 ='xpchild'");
- 语法
- preview_outline
查看匹配Statement Outline的情况,可用于手动验证。
- 语法
dbms_outln.preview_outline(<Schema_name>,<Query>);
- 参数说明
参数名称
是否必选
参数类型
含义
Schema_name
是
VARCHAR
数据库名称。
Query
是
VARCHAR
SQL语句。
- 示例
- 语法
- show_outline
展示Statement Outline在内存中命中的情况。
- 语法
dbms_outln.show_outline();
- 示例
关于HIT和OVERFLOW的说明如下:
- HIT为Statement Outline命中的次数。
- OVERFLOW为Statement Outline没有找到Query block或相应的表的次数。
- 语法
- del_outline
删除内存和表中的某一条Statement Outline。
- 语法
dbms_outln.del_outline(<id>);
- 参数说明
参数名称
是否必选
类型
含义
id
是
INT
outline规则的序号ID,为mysql.outline表中的id列的值。不能为空。
- 示例
说明:如果删除的规则不存在,系统会报相应的警告,您可以使用show warnings;查看警告内容。
- 语法
- flush_outline
如果您直接操作了表outline修改Statement Outline,您需要让Statement Outline重新生效。
- 语法
dbms_outln.flush_outline();
- 示例
update mysql.outline set Position = 1 where Id = 18; call dbms_outln.flush_outline();
- 语法