ORACLE 执行计划2
2012-11-16 10:07
141 查看
SQL>set timing on --显示Elapsed执行总时间。区别于set time on
方式一:
SQL>set autotrace on/off --显示结果集、执行计划和统计信息(执行SQL)
SQL>set autotrace traceonly --显示执行计划和统计信息, 不显示结果集(执行SQL)
SQL>set autotrace traceonly explain --只显示执行计划(不执行SQL)
SQL>set autotrace traceonly statistics --只显示统计信息(不执行SQL)
SQL>SELECT * FRM T_BD_ACCOUNTVIEW;
方式二:
SQL>explan plan for select * from t_bd_accountview;
SQL>SELECT plan_table_output FROM table(DBMS_XPLAN.DISPLAY('t_bd_accountview'));
SQL>SELECT * FROM table(dbms_xplan.display);
方式三:
SQL>alter session set SQL_TRACE=true;
SQL>SELECT sid, serial#, username from v$session where username = 'xxxx'
SQL>exec dbms_system.set_SQL_TRACE_in_session(sid, serial#,true/false)
--跟踪其它用户
SQL>alter session set events '10046 trace name context forever, level 8') //or '10046 trace name context off'
SQL>exec dbms_system.set_ev(sid, serial#,10046, 0-8(level), username);
执行计划中的字段解释:
ID:一个序号,但不是执行的先后顺序。执行的先后顺序根据缩进来判断
Operation:当前操作的内容
Rows:当前操作的cardinality, Oracle根据CBO估算当前操作返回的结果集
Cost(CPU):Oracle计算出来的一个数值(代价), 用于说明SQL执行的代价
Time: oracle估计当前操作的时间
谓词说明:
Access:影响数据的访问路径(表还是索引)
Filter:只起过滤数据的作用。
explain plan各列的含义:
ID_PLUS_EXP
PARENT_ID_PLUS_EXP
PLAN_PLUS_EXP
OBJECT_NODE_PLUS_EXP
Statistics各列含义:
db block gets --从buffer cache中读取的block数量
constient gets --从buffer cache中读取的undo数据的block数量
---because of查询过程中,由于其它回话对数据块进行了操作,而对所要查询的块有了修改。读取其以保证一致性。
physical reads --从磁盘读取的block的数量
redo size --DML生成的redo的大小 (重做数——执行SQL的过程中,产生的重做日志的大小)
sorts(memory) --在内存执行的排序量
sorts(dis) --在磁盘执行的排序量
逻辑读:db block gets + constient gets
物理读:physical reads
缓冲区使用的命中率 = 1 - 物理读 / (缓冲块读+缓冲undo读)
SQL>SELECT name, value FROM v$sysstat WHERE name IN('db block gets', 'consistent gets', 'physical reads');
如果buffer cache的命中率在90%以上,否则需要增加数据缓冲区的大小
动态分析
如果执行计划中出现提示:
--dynamic sampling used for the statement
表示用户使用了动态采样技术CBO模式下。===>从而推断这个表可能没有做过分析,可有导致两种现象:
1.该表没有做过分析,CBO采用动态采样分析数据,也可以得出正确的执行计划
2.分析信息过旧,CBO不会动态采样,采用旧的信息,从而导致错误的执行计划。
方式一:
SQL>set autotrace on/off --显示结果集、执行计划和统计信息(执行SQL)
SQL>set autotrace traceonly --显示执行计划和统计信息, 不显示结果集(执行SQL)
SQL>set autotrace traceonly explain --只显示执行计划(不执行SQL)
SQL>set autotrace traceonly statistics --只显示统计信息(不执行SQL)
SQL>SELECT * FRM T_BD_ACCOUNTVIEW;
方式二:
SQL>explan plan for select * from t_bd_accountview;
SQL>SELECT plan_table_output FROM table(DBMS_XPLAN.DISPLAY('t_bd_accountview'));
SQL>SELECT * FROM table(dbms_xplan.display);
方式三:
SQL>alter session set SQL_TRACE=true;
SQL>SELECT sid, serial#, username from v$session where username = 'xxxx'
SQL>exec dbms_system.set_SQL_TRACE_in_session(sid, serial#,true/false)
--跟踪其它用户
SQL>alter session set events '10046 trace name context forever, level 8') //or '10046 trace name context off'
SQL>exec dbms_system.set_ev(sid, serial#,10046, 0-8(level), username);
执行计划中的字段解释:
ID:一个序号,但不是执行的先后顺序。执行的先后顺序根据缩进来判断
Operation:当前操作的内容
Rows:当前操作的cardinality, Oracle根据CBO估算当前操作返回的结果集
Cost(CPU):Oracle计算出来的一个数值(代价), 用于说明SQL执行的代价
Time: oracle估计当前操作的时间
谓词说明:
Access:影响数据的访问路径(表还是索引)
Filter:只起过滤数据的作用。
explain plan各列的含义:
ID_PLUS_EXP
PARENT_ID_PLUS_EXP
PLAN_PLUS_EXP
OBJECT_NODE_PLUS_EXP
Statistics各列含义:
db block gets --从buffer cache中读取的block数量
constient gets --从buffer cache中读取的undo数据的block数量
---because of查询过程中,由于其它回话对数据块进行了操作,而对所要查询的块有了修改。读取其以保证一致性。
physical reads --从磁盘读取的block的数量
redo size --DML生成的redo的大小 (重做数——执行SQL的过程中,产生的重做日志的大小)
sorts(memory) --在内存执行的排序量
sorts(dis) --在磁盘执行的排序量
逻辑读:db block gets + constient gets
物理读:physical reads
缓冲区使用的命中率 = 1 - 物理读 / (缓冲块读+缓冲undo读)
SQL>SELECT name, value FROM v$sysstat WHERE name IN('db block gets', 'consistent gets', 'physical reads');
如果buffer cache的命中率在90%以上,否则需要增加数据缓冲区的大小
动态分析
如果执行计划中出现提示:
--dynamic sampling used for the statement
表示用户使用了动态采样技术CBO模式下。===>从而推断这个表可能没有做过分析,可有导致两种现象:
1.该表没有做过分析,CBO采用动态采样分析数据,也可以得出正确的执行计划
2.分析信息过旧,CBO不会动态采样,采用旧的信息,从而导致错误的执行计划。
相关文章推荐
- 转://看懂Oracle中的执行计划
- oracle 执行计划
- Oracle技术之如何分析执行计划(二)
- Oracle 执行计划了的rows概念
- 查看Oracle执行计划的几种常用方法-系列1
- 【总结】Oracle查看SQL执行计划和运行效率指标的方法
- 利用Oracle执行计划机制提高查询性能
- oracle_执行计划_谓词信息和数据获取(access and filter区别) (转)
- Oracle执行计划不稳定
- oracle自动获取sql执行计划
- [Oracle]获取执行计划的各个方法总结
- oracle 11g BaseLine(基线)指定application中不可修改sql的执行计划
- 如何查看oracle sql执行计划 .
- Oracle 执行计划的获取-1
- Oracle获取执行计划的五种方法
- oracle执行计划sql
- 如何看懂ORACLE执行计划
- oracle笔记整理14——性能调优之oracle执行计划
- 利用Oracle执行计划机制提高查询性能
- Oracle10中如何用dbms_xplan分析执行计划