55-Oracle-EXPLAIN PLAN(含23ai )实操

小伙伴们,有没有经常和开发一起定位sql查询和分析性能问题,经常拿到一串sql进行先做个EXPLAIN,EXPLAIN PLAN作为Oracle数据库提供的一种用于分析SQL语句执行计划的工具,运行后,其实不会真的执行SQL语句而是通过模拟优化器生成执行计划,同时生成的执行计划被写入一个特定的表(默认为PLAN_TABLE,如果没有,实需使用utlxpan的sql新建,实操中有脚本)

第三方DATAGRIP,PL/SQL,Navicat等各种工具,一键EXPLAIN PLAN,同样查询PLAN_TABLE表来了解SQL语句的执行路径,Oracle执行了哪些,信息保存在哪里,API调用是否可行。

一、工作原理与技术要点

核心原理
  • 静态分析​:仅生成执行计划而不实际执行SQL(规避DDL/DML影响,模拟操作不真实运行,考量真实效果和EXPLAIN可能会有出入)
  • 数据存储​:使用全局临时表PLAN_TABLE$(ON COMMIT PRESERVE ROWS设计)
  • 会话隔离​:每个会话只能访问自己生成的执行计划
  • 依赖统计信息​:准确性取决于表/索引统计信息(行数、直方图等)
关键技术点
  • 存储表结构​:全局临时表(含Operation/Cost/Rows/Predicate等核心字段)
  • 权限要求​:SELECT ANY TABLE + CREATE SESSION
  • 输出解读​:
    • Id:执行步骤编号(树形结构)
    • Operation:关键操作类型(TABLE ACCESS FULL/INDEX RANGE SCAN等)
    • Rows:优化器估算行数(统计信息决定)
    • Cost:相对执行成本(CPU+IO权重)

二、 生成执行计划的过程

  1. USER执行EXPLAIN PLAN FOR 。
  2. Oracle解析SQL语句,优化器基于当前的统计信息生成执行计划。
  3. 将执行计划的每一步骤插入到PLAN_TABLE$(或用户指定的表)中。
  4. 用户通过查询TABLE(DBMS_XPLAN.DISPLAY)或直接查询PLAN_TABLE来查看执行计划。
2.1 底层流程
命令解析 ​:
  • 用户执行EXPLAIN PLAN FOR [SQL语句]
  • Oracle解析器验证SQL语法和语义正确性
优化器工作 ​:
  • 优化器基于统计信息、系统参数和SQL结构
  • 生成多个候选执行计划并计算成本估值
  • 选择成本最低的执行计划方案
计划存储 ​:
  • 将执行计划分解为操作步骤(Operation)
  • 逐行写入全局临时表PLAN_TABLE$
  • 每行包含:操作ID、父ID
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值