执行计划小结
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
001-几种种打印执行计划的方法
(plan_table+awr+内存+跟踪)
一、最常用的
1.sql跑不出来的时候explain plan for或set autotrace on
2.display_cursor+statistics_level=all(能看到表被访问的次数)
E-Rows和A-Rows得到预测的行数和真实的行数;
没有输出运行时的相关统计信息
执行计划中的Buffers就是真实的逻辑读的数值
dbms_xplan.display_cursor+sqlid
dbms_xplan.display_qwr+sqlid
二、偶尔用的
1.10046/sqltrace还能看sql的等待事件、递归调用
2.10053排查执行计划不准确的原因
3.awrsqrpt.sql(生成指定快照区间,指定SQLID的统计报表)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
002-执行计划主要看几点
一、看成本高的
二、看连接方式
1、NESTED LOOP(有一明显小表,想尽快得到少量结果,场景是把关联结果前一部分行打印出来)
2、HASH JOIN(大表,想得到总的关联结果)
3、Sort Merge(两个表都有关联条件的order by)
三、看访问路径是全表扫、索引扫、回表
谓词里显示filter的where条件,表示没走索引
可以先加hint试一下。
四、看逻辑读
逻辑读指的是Oracle从内存读到的数据块数量。一般来说是'consistent gets' + 'db block gets'。
五、我最近最遇到一个问题是
1、大表联接,走的嵌套没走hash,
2、临时用hint强制走hash join
3、以后对表做了分区或加where条件减少驱动表结果集
六、大面上的经验
1、隐式转换
2、评估值准确的重要性(E-ROWS 32,A-ROWS 75808)
3、返回行与逻辑读比率(总共获取1条记录A-ROWS,产生1048次逻辑读Buffers)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
003-查看AWR和缓存中的执行计划
1、AWR执行计划
select * from table(dbms_xplan.display_awr('8qfs8857jc8fw',null,null,'ADVANCED'));
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_AWR('8qfs8857jc8fw'))
select tf.* from dba_hist_sqltext ht, table(dbms_xplan.display_awr(ht.sql_id, null, null, 'all')) tf where ht.sql_text like '%mac%';
2、获取库缓存中的执行计划
select t.* from v$sql s,table(dbms_xplan.display_cursor(s.sql_id,s.child_number,'ADVANCED ALLSTATS LAST PEEKED_BINDS')) t where s.sql_id = '6g0tcbdcr08b9';
为了获取缓存库中的执行计划,可以直接查询动态性能视图v$sql_plan和v$sql_plan_statistics_all等,但更方便的方法是:
select t.* from v$sql s,table(dbms_xplan.display_cursor(s.sql_id,s.child_number,'allstats last')) t where s.sql_id = '8qfs8857jc8fw';
获取a-rows(实际行数) 信息需要执行 alter session set statistics_level=all 或 /*+ gather_plan_statistics */
select * from table(dbms_xplan.display_cursor(null,null,'ADVANCED ALLSTATS LAST PEEKED_BINDS'));
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
动力小刚于2019年5月 个人邮箱:zcs0237#163.com
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/210154/viewspace-3138890/ ,如需转载,请注明出处,否则将追究法律责任。