设为首页 收藏本站
查看: 832|回复: 0

[经验分享] Oracle 执行计划查看方式

[复制链接]

尚未签到

发表于 2018-9-9 12:00:58 | 显示全部楼层 |阅读模式
  方法1、EXPLAIN FOR
  EXPLIAN FOR SELECT * FROM XXXX;
  SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
  这种方式查询的是一种仅供参考性的执行计划,而真正的执行计划是存储在Liburary Cache中的。
  方法2、SET AUTOT ON
  SET AUTOT ON EXP STATUS
  完整语法:
  SET AUTOT[RACE] {OFF | ON | TRACE[ONLY]} [EXP[LAIN]] [STAT[ISTICS]]
  加上STATUS是查看实际执行的统计信息,如果不加则是预查看执行计划。
  再执行SQL语句,就会打印出执行计划了。
  方法3、从Library Cache中直接获取
  这个方法效果最真实。它属于DBMS_XPLAN系列方法。其查询的视图包括:
  V$SQL_PLAN、
  V$SQL_PLAN_STATISTICS、
  V$SQL_WORKAREA、
  V$SQL_PLAN_STATISTICS_ALL。
  另外相关视图还有:
  V$SQL、
  V$SQLAREA、
  V$SQL_SHARED_CURSOR。
  V$SQL_PLAN
  存储的就是Library Cache中的执行计划。其中的运行统计信息是在Parse阶段估算的
  V$SQL_PLAN_STATISTICS
  存储执行计划每一步运行时的统计信息,包括花费时间,处理数据行数。是真实统计结果。默认报流程,需要开启STATISTICS_LEVEL为ALL才可以收集。或对SQL语句添加GATHER_PLAN_STATISTICS提示。
  V$SQL_WORKAREA
  提供SQL运行时的SQL Workarea内存的消耗。
  V$SQL_PLAN_STATISTICS_ALL
  是前三个视图的汇总,提用户完成了复杂的JOIN操作。
  V$SESSION
  记录会话信息,是性能调整时的最初入口。10g以后版本也整合了V$SESSION_WAIT的内容。
  DBMS_XPLAN包有以下方法
方法版本DISPLAY9iDISPLAY_CURSOR10gDISPLAY_AWR10gDISPLAY_SQLSET10gDISPLAY_SQL_PLAN_BASELINE11g  使用DISPLAY_CURSOR(sql_id, child-_number, format)查询
  SQL>执行一个SQL语句
  SQL> select SQL_TEXT, SQL_ID from v$sql where sql_text like 'xxxx';
  SQL>select * from table(dbms_xplan.display_cursor('xxxxxxxxx', null, 'BASIC'));
  --利用BASIC格式查看执行计划
  SQL>select * from table(dbms_xplan.display_cursor('xxxxxxx',null, 'TYPICAL'));
  --利用TYPICAL格式查看执行计划
  SQL>select * from table(dbms_xplan.display_cursor('xxxxxxx',null, 'ALL'));
  DBMS_XPLAN.DISPLAY_CURSOR参数介绍
  FORMAT
格式说明BASIC只有最基本的计划,不需要度量信息TYPICAL缺省值SERIAL和TYPICAL基本相同,没有并行相关信息ALL比TYPICAL增加语句过滤信息  FORMAT小粒度参数
格式说明ROWS显示/隐藏ROWS列BYTES显示/隐藏BYTES列COST显示/隐藏COST列PARTITION显示/隐藏分区信息PARALLEL显示/隐藏并行信息PREDICATE显示/隐藏谓词部分(即条件查询)PROJECTION显示/隐藏投影部分ALIAS显示/隐藏ALIAS部分REMOTE显示/隐藏远程SQLNOTE显示/隐藏NOTE部分OUTLINE显示/隐藏OUTLINE部分  FORMAT加项
格式说明IOSTATS显示IO数据MEMSTATS如果PGA手动管理,会有相关内存内容ALLSTATS同时显示IOSTATS和MEMSTATS  SQL> select * from table(dbms_xplan.display_cursor(‘xxxxxxx’,null,’ALL,+IOSTATS’));
  SQL> select * from table(dbms_xplan.display_cursor(‘xxxxxxx’,null,’ALL, -ROWS, -COST’));
  方法4、使用DISPLAY_AWR(sql_id, plan_hash_value, db_id, format)
  获得AWR中的执行计划,信息来自于DBA_HIST_SQL_PLAN、DBA_HIST_SQLTEXT。

  SQL>select * from table(dbms_xplan.display_awr(‘xxx’)); --传入SQL>  另外AWR还提供两个脚本用来分析某个SQL语句的执行计划是否发生都忙完以及性能变化信息,位置在$ORACLE_HOME/rdbms/admin,awrsqrpt.sql,sprepsql,两个脚本。
  执行计划分为5个部分。
  SQL概要,执行计划,QB (Query Block)、数据过滤(谓词)、列投影。
  SQL概要:
  包括SQL_ID( Parent Cursor )、Child Number( Child Cursor )、完整的SQL文本。
  执行计划:
  Hash值,表连接方式。
  QB:
  对于每一个简单的SINGLE SQL语句(整个语句只有一层SELECT,并且查询对象都是真实的物理表),都有一个Query Block存在,形如SEL$1。这种格式是Prefix$n。
  Prefix种类如下:
Prefix操作CRI$Create IndexDEL$DeleteINS$InsertMEG$MergeSEL$SelectSET$集合操作UPD$UpdateMISC$其他,比如Lock Table  也可以自己对Prefix进行命名,要通过qb_name提示来做,
  SQL>select * from table1, table2 where …
  这样产生的QB部分中,SEL$1就变成了S_VIEW1.
  复杂SQL包括视图、子查询、集合操作。
  对于复杂SQL,首先做转换,变成等价简单SQL。
  对于视图(Inline View和View),这个操作叫合并Merge。
  对于子查询,这个操作叫展开Unnest Subquery。
  (10053事件可以跟踪SQL语句的Parse全过程。)
  转换的过程将采用基于成本的查询转换(Cost Based Query Transformation),转换结束后取而代之的是一个新的简单SQL语句,这个新SQL对应一个Query Block。这个新Query Block的命名是SEL$????????
  In、Exists、Not In、Not Exists肯定会进行转换。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-568895-1-1.html 上篇帖子: Oracle 常见等待事件 下篇帖子: oracle性能调优学习0621
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表