面试宝典:介绍下Oracle数据库动态性能视图 V$SQL_REDIRECTION

在这里插入图片描述
我研究了关于 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_IDVARCHAR2(13)发生重定向的 SQL 语句的唯一标识符。可与 V$SQL.SQL_ID 关联,获取SQL文本及其他详细统计信息。
CHILD_NUMBERNUMBER子游标编号。与 SQL_ID 共同唯一标识一个具体的子游标。重定向可能产生新的子游标。
REDIRECTION_REASONVARCHAR2(64)重定向的原因。可能的值包括但不限于:
- ADAPTIVE_BUFFERING (自适应缓冲)
- ADAPTIVE_JOIN (自适应连接)
- ADAPTIVE_PLAN (整体自适应计划)
- STATISTICS_FEEDBACK (统计信息反馈)
- SQL_PATCH (应用了SQL补丁)
- SQL_PROFILE (应用了SQL配置文件)
ORIGINAL_PLAN_HASH_VALUENUMBER重定向前的原始执行计划的哈希值。可与 V$SQL.PLAN_HASH_VALUE 比对。
REDIRECTED_PLAN_HASH_VALUENUMBER重定向后新执行计划的哈希值
REDIRECTION_TIMEDATE重定向发生的时间戳
IS_REDIRECTION_ACTIVEVARCHAR2(5)指示此重定向当前是否仍处于活跃状态(即优化器是否仍在使用重定向后的计划)。可能值为 TRUEFALSE
CON_IDNUMBER容器ID。在多租户环境(CDB)中,标识该行信息所属的容器。值为 0 表示该行数据属于 CDB$ROOT(根容器)。

🤝 相关视图

V$SQL_REDIRECTION 通常需要与其他动态性能视图关联查询才能获得完整的信息:

  • V$SQL:这是最核心的关联视图。通过 SQL_IDCHILD_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_IDPLAN_HASH_VALUE(与 ORIGINAL_PLAN_HASH_VALUEREDIRECTED_PLAN_HASH_VALUE 关联),可以查看重定向前后计划的具体步骤及其统计信息。
  • DBA_HIST_SQL_REDIRECTION:如果启用了AWR(Automatic Workload Repository),此视图可能存储 V$SQL_REDIRECTION 的历史快照数据,用于回溯分析。

⚙️ 底层原理与机制

V$SQL_REDIRECTION 视图的数据,源于 Oracle 数据库强大的自适应查询优化(Adaptive Query Optimization) 机制。

  1. 自适应查询优化:该特性使优化器能够在语句首次执行时做出运行时决策。它会在执行过程中收集统计信息,如果发现初始计划的选择不符合预期(例如,对返回行数的估算严重失准),它可能会在执行中途调整后续操作的执行策略。
  2. 重定向记录:当这种自适应调整发生时,数据库会在内部记录一次"重定向"事件。V$SQL_REDIRECTION 视图正是这些事件记录的对外体现
  3. 数据来源与生命周期:该视图的数据来源于数据库实例的内存结构,很可能基于某个内部的 X$ 表(如 X$KQLREDIR 或类似名称)。其数据是动态的,会随着游标的老化或数据库实例的重启而消失。如果需历史分析,应查询 DBA_HIST_SQL_REDIRECTION(如果存在)。
  4. 与共享池的关系:重定向信息与特定的子游标(SQL_ID + CHILD_NUMBER)绑定。这些游标存储在共享池(Shared Pool)中。

🔍 常用查询SQL

  1. 查看近期发生重定向的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;
    
  2. 查询因特定原因(如自适应连接)发生重定向的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'; -- 根据实际情况修改原因
    
  3. 检查重定向是否仍生效

    SELECT sql_id, child_number, redirection_reason,
           is_redirection_active, redirection_time
    FROM v$sql_redirection
    WHERE is_redirection_active = 'TRUE';
    

💎 主要应用场景

  • 性能问题诊断:当发现某条 SQL 语句的执行时间不稳定或偶尔变慢时,查询此视图可以确认是否因自适应计划重定向所致。
  • 自适应特性评估:数据库管理员可以通过此视图观察自适应查询优化特性的活跃程度,判断其是否在积极干预执行计划。
  • SQL调优:结合 V$SQLV$SQL_PLAN 等视图,分析重定向前后的计划差异,为 SQL 调优(如创建更合适的索引、刷新统计信息或使用 SQL Profile)提供方向。

希望这些信息能帮助您更好地理解和使用 V$SQL_REDIRECTION 视图。请注意,对于关键决策,请务必参考 Oracle 官方文档以获取最准确和最新的信息。

欢迎关注我的公众号《IT小Chen

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值