zoukankan      html  css  js  c++  java
  • AUTOTRACE 查看执行计划

    利用AUTOTRACE查看执行计划
    注意:AUTOTRACE 所查询的执行计划并不是真实的执行计划,是CBO预估的。从PLAN_TABLE出来的
     
    SQL> set autot
    用法: SET AUTOT[RACE] {OFF | ON | TRACE[ONLY]} [EXP[LAIN]] [STAT[ISTICS]]
     
    方括号内的字母都可以省略。
     
    set autot on ----执行SQL 并且显示执行计划和统计信息
    set autot trace ----执行SQL 但不显示运行结果,显示执行计划和统计信息(一般都用这个)
    set autot trace exp ----如果SELECT 就不执行SQL(dml 执行),只显示执行计划
    set autot trace stat ----执行SQL,只显示统计信息
     
    AUTOTRACE最主要就是用来查看统计信息,也就是我们最关心的逻辑读和物理读,【递归( recursive calls),sql里面有自定义函数】
     
    还有最终返回的行数
     
     
    例子如下:
     
    SQL> set autot trace
    SQL> select count(*) from test;
     
    执行计划
    ----------------------------------------------------------
    Plan hash value: 1950795681
     
    ---------------------------------------------------------------------------
    | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
    ---------------------------------------------------------------------------
    | 0 | SELECT STATEMENT | | 1 | 31 | 290 (1)| 00:00:04 |
    | 1 | SORT AGGREGATE | | 1 | 31 | | |
    | 2 | TABLE ACCESS FULL| TEST | 72543 | 2196K| 290 (1)| 00:00:04 |
    ---------------------------------------------------------------------------
     
     
    统计信息
    ----------------------------------------------------------
              0 recursive calls
              0 db block gets
           1038 consistent gets
              0 physical reads
              0 redo size
            432 bytes sent via SQL*Net to client
            420 bytes received via SQL*Net from client
              2 SQL*Net roundtrips to/from client
              0 sorts (memory)
              0 sorts (disk)
              1 rows processed
     
     
    利用AUTOTRACE查看执行计划我们最关心的就是 consistent gets 以及physical reads部分。有时候一个SQL跑很久,利用AUTOTRACE去查看执行计划不现实,因为要等很久啊。
    你愿意等吗?所以这个时候要利用DBMS_XPLAN包来查看执行计划。对OLAP环境进行SQL优化的时候,一般用DBMS_XPLAN,因为OLAP的SQL一般都跑很长。
     
    set autot trace 真正执行了SQL,但是执行计划是从PLAN_TABLE出来的,PLAN_TABLE是假的执行计划
    recursive calls : 硬解析或自定义函数 (1、执行次数为多次,递归不为0的 为自定义函数 v$sql 的执行次数和V$SQL_PLAN的递归次数)
    db block gets: 变化的物理块(DML或延迟块) select一般没有、
    consistent gets 逻辑读 块为单位 (309*8K) 逻辑读包含物理读
    physica read 物理读
    redo size 运行这个SQL产生多少read, redo size大于0,DB BLOCL GETS必大于0
    bytes sent via sql*net to client 发送多少数据到客户端
    sort 不用看
    rows processed SQL返回多少行
  • 相关阅读:
    关于二进制的利用
    2017年浙江中医药大学程序设计竞赛 Solution
    2018-2019 ACM-ICPC, Asia Xuzhou Regional Contest Solution
    2018-2019 ACM-ICPC, Asia Shenyang Regional Contest Solution
    2018-2019 ACM-ICPC, Asia Nanjing Regional Contest Solution
    AtCoder Grand Contest 029 Solution
    BZOJ 3307: 雨天的尾巴
    Codeforces Round #526 (Div. 2) Solution
    2016-2017 ACM-ICPC Pacific Northwest Regional Contest (Div. 1) Solution
    [HZNUOJ] 博
  • 原文地址:https://www.cnblogs.com/liang545621/p/12611933.html
Copyright © 2011-2022 走看看