ITPub博客

首页 > 数据库 > 数据库开发技术 > YashanDB|一文读懂 Outline 功能实战验证:绑定、失效、主备、升级全覆盖!

YashanDB|一文读懂 Outline 功能实战验证:绑定、失效、主备、升级全覆盖!

原创 数据库开发技术 作者:makabala 时间:2025-04-30 14:20:38 0 删除 编辑

在数据库优化过程中,执行计划的稳定性尤为关键。YashanDB 提供的  Outline(执行计划轮廓)功能,可以确保即使外部环境发生变化,SQL 语句也能维持原有计划不变。本文通过一系列典型场景验证 Outline 的可靠性与适用性,帮助你系统理解这一核心特性。

一、验证环境与背景说明

通过如下场景全面测试 Outline 是否在以下情境中依然生效:

统计信息失效的情况下;

SQL 绑定变量场景;

主备环境中;

数据库版本升级后。

二、核心场景验证结果

1. 数据量变化导致统计信息失效

创建两张测试表,各插入 200 万数据;

收集统计信息并验证执行计划为 Hash Join;

创建索引后,计划变为 Nested Loop;

删除索引后计划回滚;

创建 Outline 后,即便索引存在,仍强制使用 Hash Join;

持续插入新数据、导致统计信息失效,仍优先使用 Outline 指定计划。

结论: Outline 有效屏蔽统计信息波动的影响。

2. 绑定变量场景下验证

创建绑定变量的 SQL Outline(含 ? 占位符);

执行绑定语句,自动匹配 Outline;

即便语句中包含 HINT,优化器仍优先采纳 Outline 执行路径。

结论: 绑定变量语句与 Outline 能成功匹配执行计划。

3. 单机主备架构中验证

主库、备库均开启 Outline 功能;

在主库创建 Outline,观察执行计划;

在备库执行相同 SQL,初始无 Outline;

在备库手动开启相同类别 Outline 功能;

执行计划保持一致,轮廓成功生效。

结论: 主备节点需分别开启 Outline 功能,生效后一致稳定。

4. 数据库版本升级后的执行计划稳定性

在 22.2.10.100 版本中创建 Outline;

升级至 23.2.3.100;

重新验证相同 SQL 的执行计划;

无论数据库默认优化路径是否改变,Outline 计划均优先使用。

结论: Outline 在版本升级后依旧有效,兼容性强。

三、Outline 创建与使用关键指令

创建 Outline 示例:

CREATE OUTLINE ol_af FOR CATEGORY ctgy_ab ON
select distinct t2.col2. t3.col1
from test_tab2 t2
join test_tab3 t3 on t2.col2 = t3.col1
where t2.col2 = 3
limit 10;

激活指定类别 Outline:

ALTER SESSION SET USE_STORED_OUTLINES = ctgy_ab;

查看当前 SQL 使用的 Outline:

SELECT * FROM USER_OUTLINE_HINTS WHERE name = 'OL_AF';

四、实践建议

适用于核心 SQL 的执行计划锁定,避免因索引、统计信息变化导致性能波动;

建议以 SQL Hash 或文本为依据管理 Outline,保障匹配精度;

主备、升级等场景应提前验证 Outline 是否仍有效,确保系统稳定性。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70045450/viewspace-3083039/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2025-04-10

  • 博文量
    231
  • 访问量
    229307