跟这罗老师学
一、获取执行计划的方法 1.DISPLAY_CURSOR方法(真实) dbms_xplan.display_cursor('sql_id', ? child number, ? format) ?
--child number如果置为NULL,则返回所有子游标的执行计划 --format的格式如下:推荐格式为 'ADVANCED ALLSTATS LAST PEEKED_BINDS' IOSTATS:显示该游标累计执行的IO统计信息(Buffers, Reads)? MEMSTATS:累计执行的PGA使用信息(Omem 1Mem Used-Mem) ALLSTATS:OSTATS + MEMSTATS Advanced:显示outline、Query Block Name、 Column Projection等信息 Typical:不打印PROJECTION, ALIAS PEEKED_BINDS:打印解析时使用的绑定变量 LAST:仅显示最后一次执行的统计信息
建议步骤: (1) alter session set STATISTICS_LEVEL = ALL; ?--会话级别 ? ? (调试的时候可以设置会话级别的) (2)相同会话执行业务查询语句,并获取sql_id (3)获取执行计划 select * from table(dbms_xplan.display_cursor('sql_id ',null,'advanced allstats last peeked_binds'));
说明: 当statistics_level设置为typical时也是默认值时,oracle会自动收集用于自我管理和提供最佳性能的重要统计数据。这个值适用于大部分环境。 当statistcs_lever设置为 all时,oracle不但会收集typical的数据,并且在其基础上加上 操作系统定时统计数据,和执行计划。 所以对于问题的诊断,建议在会话级别设置为all 当statistics_lever设置为basic时,oracle不会收集很多重要特性数据,对于性能优化等诊断将会产生重大影响?
优点:能显示谓词信息,可以输出更为详细的信息 缺点:具有时效性,仅支持在v$sqlarea中还存在的sql_id
2.DISPLAY_AWR (真实) select * from table(dbms_xplan.display_awr('sql_id', format=>'all')); 更全的信息: select * from table(dbms_xplan.display_awr('sql_id',null,null, 'advanced allstats last peeked_binds') ?)
优点:在快照期内可用,比DISPLAY_CURSOR方法时间长 缺点:不能显示谓词信息
3.SQL TRACE (真实)? 当前session : SQL> alter session set tracefile_identifier='my20210426'; SQL> alter session set sql_trace=true; SQL> 执行sql SQL> alter session set sql_trace=false; 会在trace目录下(警告日志所在目录)生成跟my20210426相关的trace文件
4.10046事件(真实) 当前session: SQL> alter session set tracefile_identifier='my10046'; SQL> alter session set events '10046 trace name context forever, level 12'; SQL> 执行sql SQL> alter session set events '10046 trace name context off'; 会在trace目录下(警告日志所在目录)生成跟my10046相关的trace文件
?
|