
我研究了关于 Oracle 19C 中 V$SQL_REDIRECTION 动态性能视图的可用信息。根据搜索结果,直接针对该视图的详细说明较为有限。我会结合已有的 Oracle 知识体系,为您梳理关于这个视图的基本信息、用途,并对其部分可能字段进行合理推测和分析。
🔍 视图概述
V$SQL_REDIRECTION 是 Oracle 数据库中的一个动态性能视图(Dynamic Performance View)。其主要作用是记录和展示那些执行计划发生了重定向的 SQL 语句的信息。这种"重定向"通常指的是 Oracle 的自适应查询优化(Adaptive Query Optimization) 特性在运行时为 SQL 语句动态改变了原有的执行计划。
核心作用:
- 跟踪自适应计划变化:当数据库为某个 SQL 语句选择了自适应执行计划,并在初次执行时根据运行时统计信息(如实际返回的行数)决定改变原计划的某部分(例如将嵌套循环连接改为哈希连接,或启用/禁用某些缓冲)时,这些信息会被记录在
V$SQL_REDIRECTION中。 - 诊断性能波动:帮助 DBA 和开发者理解为何同一 SQL 语句在不同时间或不同条件下执行计划会有所不同,特别是由自适应优化器导致的变化。
- 评估自适应特性效果:通过分析重定向记录,可以评估自适应查询优化是否对特定工作负载起到了积极作用。
📊 字段含义详解
由于公开文档中关于此视图的详细字段定义较少,下表基于自适应查询优化的常见行为对字段进行了推测和解释(请注意,具体字段名称和含义可能因 Oracle 版本不同而有所变化,实际使用时请以官方文档为准):
| 字段名称 | 数据类型 | 含义说明(推测与分析) |
|---|---|---|
| SQL_ID | VARCHAR2(13) | 发生重定向的 SQL 语句的唯一标识符。可与 V$SQL.SQL_ID 关联,获取SQL文本及其他详细统计信息。 |
| CHILD_NUMBER | NUMBER | 子游标编号。与 SQL_ID 共同唯一标识一个具体的子游标。重定向可能产生新的子游标。 |
| REDIRECTION_REASON | VARCHAR2(64) | 重定向的原因。可能的值包括但不限于: - ADAPTIVE_BUFFERING (自适应缓冲) - ADAPTIVE_JOIN (自适应连接) - ADAPTIVE_PLAN (整体自适应计划) - STATISTICS_FEEDBACK (统计信息反馈) - SQL_PATCH (应用了SQL补丁) - SQL_PROFILE (应用了SQL配置文件) |
| ORIGINAL_PLAN_HASH_VALUE | NUMBER | 重定向前的原始执行计划的哈希值。可与 V$SQL.PLAN_HASH_VALUE 比对。 |
| REDIRECTED_PLAN_HASH_VALUE | NUMBER | 重定向后新执行计划的哈希值。 |
| REDIRECTION_TIME | DATE | 重定向发生的时间戳。 |
| IS_REDIRECTION_ACTIVE | VARCHAR2(5) | 指示此重定向当前是否仍处于活跃状态(即优化器是否仍在使用重定向后的计划)。可能值为 TRUE 或 FALSE。 |
| CON_ID | NUMBER | 容器ID。在多租户环境(CDB)中,标识该行信息所属的容器。值为 0 表示该行数据属于 CDB$ROOT(根容器)。 |
🤝 相关视图
V$SQL_REDIRECTION 通常需要与其他动态性能视图关联查询才能获得完整的信息:
V$SQL:这是最核心的关联视图。通过SQL_ID和CHILD_NUMBER关联,可以获取SQL语句的文本、执行次数、消耗时间、逻辑读/物理读等详细的统计信息。SELECT r.sql_id, r.child_number, s.sql_text, r.redirection_reason FROM v$sql_redirection r JOIN v$sql s ON r.sql_id = s.sql_id AND r.child_number = s.child_number;V$SQLAREA:提供SQL语句的汇总统计信息。 虽然不如V$SQL详细,但有时用于快速查看。V$SQL_PLAN&V$SQL_PLAN_STATISTICS:这些视图存储了执行计划的详细信息。通过SQL_ID和PLAN_HASH_VALUE(与ORIGINAL_PLAN_HASH_VALUE或REDIRECTED_PLAN_HASH_VALUE关联),可以查看重定向前后计划的具体步骤及其统计信息。DBA_HIST_SQL_REDIRECTION:如果启用了AWR(Automatic Workload Repository),此视图可能存储V$SQL_REDIRECTION的历史快照数据,用于回溯分析。
⚙️ 底层原理与机制
V$SQL_REDIRECTION 视图的数据,源于 Oracle 数据库强大的自适应查询优化(Adaptive Query Optimization) 机制。
- 自适应查询优化:该特性使优化器能够在语句首次执行时做出运行时决策。它会在执行过程中收集统计信息,如果发现初始计划的选择不符合预期(例如,对返回行数的估算严重失准),它可能会在执行中途调整后续操作的执行策略。
- 重定向记录:当这种自适应调整发生时,数据库会在内部记录一次"重定向"事件。
V$SQL_REDIRECTION视图正是这些事件记录的对外体现。 - 数据来源与生命周期:该视图的数据来源于数据库实例的内存结构,很可能基于某个内部的 X$ 表(如
X$KQLREDIR或类似名称)。其数据是动态的,会随着游标的老化或数据库实例的重启而消失。如果需历史分析,应查询DBA_HIST_SQL_REDIRECTION(如果存在)。 - 与共享池的关系:重定向信息与特定的子游标(
SQL_ID+CHILD_NUMBER)绑定。这些游标存储在共享池(Shared Pool)中。
🔍 常用查询SQL
-
查看近期发生重定向的SQL语句及其原因
SELECT r.sql_id, r.child_number, s.sql_text, r.redirection_reason, r.original_plan_hash_value, r.redirected_plan_hash_value, r.redirection_time FROM v$sql_redirection r JOIN v$sql s ON r.sql_id = s.sql_id AND r.child_number = s.child_number ORDER BY r.redirection_time DESC; -
查询因特定原因(如自适应连接)发生重定向的SQL
SELECT r.sql_id, s.sql_text, r.redirection_time FROM v$sql_redirection r JOIN v$sql s ON r.sql_id = s.sql_id AND r.child_number = s.child_number WHERE r.redirection_reason = 'ADAPTIVE_JOIN'; -- 根据实际情况修改原因 -
检查重定向是否仍生效
SELECT sql_id, child_number, redirection_reason, is_redirection_active, redirection_time FROM v$sql_redirection WHERE is_redirection_active = 'TRUE';
💎 主要应用场景
- 性能问题诊断:当发现某条 SQL 语句的执行时间不稳定或偶尔变慢时,查询此视图可以确认是否因自适应计划重定向所致。
- 自适应特性评估:数据库管理员可以通过此视图观察自适应查询优化特性的活跃程度,判断其是否在积极干预执行计划。
- SQL调优:结合
V$SQL和V$SQL_PLAN等视图,分析重定向前后的计划差异,为 SQL 调优(如创建更合适的索引、刷新统计信息或使用 SQL Profile)提供方向。
希望这些信息能帮助您更好地理解和使用 V$SQL_REDIRECTION 视图。请注意,对于关键决策,请务必参考 Oracle 官方文档以获取最准确和最新的信息。
欢迎关注我的公众号《IT小Chen》
2045

被折叠的 条评论
为什么被折叠?



