标签:索引范围扫描 导致 dex gets 统计信息 height reads 硬盘 信息
◆以下来自:Oracle 执行计划(Explain Plan):https://www.cnblogs.com/xqzt/p/4467867.html ※ 很强
1,取得执行计划(autotrace)
1.1 设置autotrace
序号 命令 解释
1 SET AUTOTRACE OFF 此为默认值,即关闭Autotrace
2 SET AUTOTRACE ON EXPLAIN 只显示执行计划
3 SET AUTOTRACE ON STATISTICS 只显示执行的统计信息
4 SET AUTOTRACE ON 包含2,3两项内容
5 SET AUTOTRACE TRACEONLY 与ON相似,但不显示语句的执行结果
1.2 使用SQL取得执行计划
在执行的sql前面加上EXPLAIN PLAN FOR
SQL> EXPLAIN PLAN FOR SELECT * FROM EMP;
已解释。
SQL> SELECT plan_table_output FROM TABLE(DBMS_XPLAN.DISPLAY(‘PLAN_TABLE‘));
或者:
SQL> select * from table(dbms_xplan.display);
1.3 用工具取得执行计划
如,PL/SQL Developer,Navicat, Toad等。
二、如何读懂执行计划
2.1执行顺序的原则
执行顺序的原则是:由上至下,从右向左
由上至下:在执行计划中一般含有多个节点,相同级别(或并列)的节点,靠上的优先执行,靠下的后执行
从右向左:在某个节点下还存在多个子节点,先从最靠右的子节点开始执行。
一般按缩进长度来判断,缩进最大的最先执行,如果有2行缩进一样,那么就先执行上面的。
2.2 执行计划中字段解释
ID: 一个序号,但不是执行的先后顺序。执行的先后根据缩进来判断。
Operation: 当前操作的内容。
Rows: 当前操作的Cardinality,Oracle估计当前操作的返回结果集。
Cost(CPU):Oracle 计算出来的一个数值(代价),用于说明SQL执行的代价。
Time:Oracle 估计当前操作的时间。
2.3 谓词说明
Access :
通过某种方式定位了需要的数据,然后读取出这些结果集,叫做Access。
表示这个谓词条件的值将会影响数据的访问路劲(表还是索引)。
Filter:
把所有的数据都访问了,然后过滤掉不需要的数据,这种方式叫做filter 。
表示谓词条件的值不会影响数据的访问路劲,只起过滤的作用。
在谓词中主要注意access,要考虑谓词的条件,使用的访问路径是否正确。
2.4 Statistics(统计信息)说明
统计项目 | 内容 | 详细 | |
recursive calls | 产生的递归sql调用的条数。 | 当执行一条SQL语句时,产生的对其他SQL语句的调用,这些额外的语句称之为‘‘recursive calls‘‘或‘‘recursive SQL statements‘‘. 我们做一条insert 时,没有足够的空间来保存row记录,Oracle 通过Recursive Call 来动态的分配空间。 | |
Db block gets | 从buffer cache中读取的block的数量 |
DB Block Gets:请求的数据块在buffer能满足的个数 |
|
consistent gets | 从buffer cache中读取的undo数据的block的数量 |
Consistent Gets: 数据请求总数在回滚段Buffer中的数据一致性读所需要的数据块 |
|
physical reads | 从磁盘读取的block的数量 |
Physical Reads:实例启动后,从磁盘读到Buffer Cache数据块数量) 它们三者之间的关系大致可概括为: |
|
redo size | DML生成的redo的大小 | 执行SQL的过程中产生的重做日志 | |
bytes sent via SQL*Net to client | 数据库服务器通过SQL*Net向查询客户端发送的查询结果字节数 | 通过网络发送给客户端的数据 | |
bytes received via SQL*Net from client | 通过SQL*Net接受的来自客户端的数据字节数 | 通过网络从客户端接收到的数据 | |
SQL*Net roundtrips to/from client | 服务器和客户端来回往返通信的Oracle Net messages条数 | 通过网络客户端发送或接收的数量 | |
sorts (memory) | 在内存执行的排序量 | 在内存中发生的排序 | |
sorts (disk) | 在磁盘上执行的排序量 | 在硬盘中发生的排序 | |
rows processed | 处理的数据的行数 | 处理的行数 |
2.5 动态分析
动态统计量收集是Oracle CBO优化器的一种特性。优化器生成执行计划是依据成本cost公式计算出的,如果相关数据表没有收集过统计量,又要使用CBO的机制,就会引起动态采样。
动态采样(dynamic sampling)就是在生成执行计划是,以一个很小的采用率现进行统计量收集。由于采样率低,采样过程快但是不精确,而且采样结果不会进入到数据字典中。
如果在执行计划中有如下提示:
Note
-------------dynamic sampling used for the statement
这提示用户CBO当前使用的技术,需要用户在分析计划时考虑到这些因素。 当出现这个提示,说明当前表使用了动态采样。 我们从而推断这个表可没有做过分析。
这里会出现两种情况:
(1) 如果表没有做过分析,那么CBO可以通过动态采样的方式来获取分析数据,也可以或者正确的执行计划。
(2) 如果表分析过,但是分析信息过旧,这时CBO就不会在使用动态采样,而是使用这些旧的分析数据,从而可能导致错误的执行计划。
三、JOIN方式
3.1 hash join
3.2 merge join
3.3 nested loop
四、表访问方式
4.1表访问方式---->全表扫描(Full Table Scans)
表访问方式---->全表扫描(Full Table Scans, FTS)
4.2表访问方式---->通过ROWID访问表(table access by ROWID)
表访问方式---->通过ROWID访问表(table access by ROWID)
4.3索引扫描
索引范围扫描(INDEX RANGE SCAN)
引唯一性扫描(INDEX UNIQUE SCAN)
索引全扫描(INDEX FULL SCAN)
索引快速扫描(index fast full scan)
索引跳跃式扫描(INDEX SKIP SCAN)
标签:索引范围扫描 导致 dex gets 统计信息 height reads 硬盘 信息
原文地址:https://www.cnblogs.com/nliao/p/14289738.html