zoukankan      html  css  js  c++  java
  • Oracle性能诊断艺术-读书笔记


    create table test0605 as select * from dba_objects;

    select t1.owner,t1.object_name,t1.object_id from test0605 t1 where t1.object_id=3344;

    select t1.SQL_ID,t1.HASH_VALUE,t1.SQL_TEXT,t1.SQL_FULLTEXT,to_char(t1.LAST_ACTIVE_TIME,'yyyy-mm-dd hh24:mi:ss') LAST_ACTIVE_TIME ,to_char(t1.LAST_LOAD_TIME,'yyyy-mm-dd hh24:mi:ss') LAST_LOAD_TIME from v$sqlarea t1 where t1.SQL_FULLTEXT like '%test0605 t1 where t1.object_id=3344%'
    order by LAST_ACTIVE_TIME desc,LAST_LOAD_TIME desc;

    /*select * from v$sql_plan t1 where t1.;

    select * from v$sql_plan_statistics;

    select * from v$sql_workarea;*/

    select * from v$sql_plan_statistics_all t1 where t1.SQL_ID='f21sgfyqvkz9m';

    select * from table(dbms_xplan.display_cursor('f21sgfyqvkz9m',0,'advanced'));

    select * from table(dbms_xplan.display_awr('f21sgfyqvkz9m'));

    --1008
    关于一定时期内显著的执行计划变动、资源消耗变动 ,oracle提供了awrsqrpt.sql 、spresql.sql两个脚本

    --1021
    1030
    包含执行计划的表中的字段

    基本字段
    字段                              描述
    id                                每一个操作的标识符。如果数字前面带有星号,意味着该行有谓词信息
    operation                         该行的操作,也叫 row source
    name                              操作的对象

    查询优化器评估类
    rows(e-rows)                              评估中操作返回的记录总数
    bytes(e-bytes)                            评估中操作返回的字节数
    tempspc                                   评估中操作使用的临时空间大小
    cost(%cpu)                                评估中操作的开销。括号中是开销的百分比。注意该值是通过执行计划计算过来的。即:父操作的开销包含子操作的开销
    time                                      评估中执行操作需要的时间

    分区类
    pstart                                    访问的第一个分区。如果解析时不知道是哪个分区就设为key、key(i) 、key(mc)、 key(or)、 key(sq)
    pstop                                     访问的最后一个分区。如果解析时不知道是哪个分区就设为key、key(i) 、key(mc)、 key(or)、 key(sq)

    运行时统计
    starts                                    指定操作执行的次数
    a-rows                                    指定操作返回的真实记录数
    a-time                                    指定操作执行的真实时间

    io统计类
    buffers                                   操作期间进行的逻辑读数量
    reads                                     操作期间进行的物理读数量
    writes                                    操作期间进行的物理写数量

    内存使用统计类
    0mem                                      最优执行所需内存的评估值
    1mem                                      一次性通过(one-pass)执行所需内存的评估值
    used-mem                                  最后一次操作时使用的内存量
    user-tmp                                  最后一次操作时使用的临时空间大小

    --1439 display函数
    /*
    format参数可用的基本值
    basic                                   仅显示最少的信息。基本上之报错操作和操作的对象
    typical                                 显示大部分相关内容,基本上包含除了别名,提纲和字段投影外的所有信息                                        
    serial                                  和typical类似,只是没有并行的相关信息
    all                                     显示除了提纲外的所有信息
    advanced                                显示所有信息
    alias                                   空值包含查询块名和对象别名那一部分的显示
    bytes                                   控制执行计划表中字段bytes的显示
    cost                                    控制执行计划表中字段cost的显示
    note                                    控制包含注意信息note那一部分的显示
    outline                                 控制包含提纲outline那一部分的显示
    parallel                                空值并行处理信息的显示,尤其是,执行计划表中字段TQ、IN-OUT、PQ distrib的显示
    partition                               控制分区信息的显示,尤其是pstart和pstop的显示
    peek_binds                              控制包含被窥测的绑定变量那一部分的显示。
    predicate                               控制包含谓词filter和access那一部分的显示
    projection                              控制包含字段投影信息那一部分的显示
    remote                                  控制远程执行的sql语句的显示
    rows                                    控制执行计划表中字段rows的显示
    */

    --1055

    --case 1
    SQL> CREATE TABLE t AS SELECT * FROM o;
    SQL> execute dbms_stats.gather_table_stats(user, 't')
    SQL> EXPLAIN PLAN FOR CREATE TABLE t AS SELECT * FROM o;
    SQL>
    SQL> SELECT * FROM table(dbms_xplan.display);

    PLAN_TABLE_OUTPUT                                                                                                       
    ------------------------------------------------------------------------------------------------------------------------
    Plan hash value: 1827057699                                                                                             
                                                                                                                            
    -------------------------------------------------------------------------------                                         
    | Id  | Operation              | Name | Rows  | Bytes | Cost (%CPU)| Time     |                                         
    -------------------------------------------------------------------------------                                         
    |   0 | CREATE TABLE STATEMENT |      |  1000 | 84000 |     5   (0)| 00:00:01 |                                         
    |   1 |  LOAD AS SELECT        | T    |       |       |            |          |                                         
    |   2 |   TABLE ACCESS FULL    | O    |  1000 | 84000 |     3   (0)| 00:00:01 |                                         
    -------------------------------------------------------------------------------  

    --case2
    SQL> CREATE INDEX i ON t (object_id);
    SQL>
    SQL> EXPLAIN PLAN FOR ALTER INDEX i REBUILD;
    SQL>
    SQL> SELECT * FROM table(dbms_xplan.display);

    PLAN_TABLE_OUTPUT                                                                                                       
    ------------------------------------------------------------------------------------------------------------------------
    Plan hash value: 1634214326                                                                                             
                                                                                                                            
    -------------------------------------------------------------------------------                                         
    | Id  | Operation              | Name | Rows  | Bytes | Cost (%CPU)| Time     |                                         
    -------------------------------------------------------------------------------                                         
    |   0 | ALTER INDEX STATEMENT  |      |  1000 |  4000 |     2   (0)| 00:00:01 |                                         
    |   1 |  INDEX BUILD NON UNIQUE| I    |       |       |            |          |                                         
    |   2 |   SORT CREATE INDEX    |      |  1000 |  4000 |            |          |                                         
    |   3 |    INDEX FAST FULL SCAN| I    |  1000 |  4000 |     2   (0)| 00:00:01 |                                         
    -------------------------------------------------------------------------------       

    --case3
    SQL> EXPLAIN PLAN FOR SELECT * FROM t;
    SQL>
    SQL> SELECT * FROM table(dbms_xplan.display);

    PLAN_TABLE_OUTPUT                                                                                                       
    ------------------------------------------------------------------------------------------------------------------------
    Plan hash value: 1601196873                                                                                             
                                                                                                                            
    --------------------------------------------------------------------------                                              
    | Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |                                              
    --------------------------------------------------------------------------                                              
    |   0 | SELECT STATEMENT  |      |  1000 | 84000 |     3   (0)| 00:00:01 |                                              
    |   1 |  TABLE ACCESS FULL| T    |  1000 | 84000 |     3   (0)| 00:00:01 |                                              
    --------------------------------------------------------------------------    

    --case4
    SQL> EXPLAIN PLAN FOR INSERT INTO t SELECT * FROM o WHERE rownum = 1;
    SQL>
    SQL> SELECT * FROM table(dbms_xplan.display);

    PLAN_TABLE_OUTPUT                                                                                                       
    ------------------------------------------------------------------------------------------------------------------------
    Plan hash value: 1110922135                                                                                             
                                                                                                                            
    ---------------------------------------------------------------------------------                                       
    | Id  | Operation                | Name | Rows  | Bytes | Cost (%CPU)| Time     |                                       
    ---------------------------------------------------------------------------------                                       
    |   0 | INSERT STATEMENT         |      |     1 |    84 |     3   (0)| 00:00:01 |                                       
    |   1 |  LOAD TABLE CONVENTIONAL | T    |       |       |            |          |                                       
    |*  2 |   COUNT STOPKEY          |      |       |       |            |          |                                       
    |   3 |    TABLE ACCESS FULL     | O    |  1000 | 84000 |     3   (0)| 00:00:01 |                                       
    ---------------------------------------------------------------------------------                                       
                                                                                                                            
    Predicate Information (identified by operation id):                                                                     
    ---------------------------------------------------                                                                     
                                                                                                                            
       2 - filter(ROWNUM=1)                                                              
       
    --case5
    SQL> EXPLAIN PLAN FOR UPDATE t SET subobject_name = object_name;
    SQL>
    SQL> SELECT * FROM table(dbms_xplan.display);

    PLAN_TABLE_OUTPUT                                                                                                       
    ------------------------------------------------------------------------------------------------------------------------
    Plan hash value: 931696821                                                                                              
                                                                                                                            
    ---------------------------------------------------------------------------                                             
    | Id  | Operation          | Name | Rows  | Bytes | Cost (%CPU)| Time     |                                             
    ---------------------------------------------------------------------------                                             
    |   0 | UPDATE STATEMENT   |      |  1000 | 33000 |     3   (0)| 00:00:01 |                                             
    |   1 |  UPDATE            | T    |       |       |            |          |                                             
    |   2 |   TABLE ACCESS FULL| T    |  1000 | 33000 |     3   (0)| 00:00:01 |                                             
    ---------------------------------------------------------------------------      

    --case6
    SQL> EXPLAIN PLAN FOR MERGE INTO t
      2                USING (SELECT * FROM o) o
      3                ON (t.object_id = o.object_id)
      4                WHEN MATCHED THEN UPDATE SET t.subobject_name = o.subobject_name
      5                WHEN NOT MATCHED THEN INSERT (owner, object_name, object_id, created, last_ddl_time)
      6                          VALUES (o.owner, o.object_name, o.object_id, o.created, o.last_ddl_time);
    SQL>
    SQL> SELECT * FROM table(dbms_xplan.display);

    PLAN_TABLE_OUTPUT                                                                                                       
    ------------------------------------------------------------------------------------------------------------------------
    Plan hash value: 4087175684                                                                                             
                                                                                                                            
    -----------------------------------------------------------------------------                                           
    | Id  | Operation            | Name | Rows  | Bytes | Cost (%CPU)| Time     |                                           
    -----------------------------------------------------------------------------                                           
    |   0 | MERGE STATEMENT      |      |  1000 |   162K|     7  (15)| 00:00:01 |                                           
    |   1 |  MERGE               | T    |       |       |            |          |                                           
    |   2 |   VIEW               |      |       |       |            |          |                                           
    |*  3 |    HASH JOIN OUTER   |      |  1000 |   164K|     7  (15)| 00:00:01 |                                           
    |   4 |     TABLE ACCESS FULL| O    |  1000 | 84000 |     3   (0)| 00:00:01 |                                           
    |   5 |     TABLE ACCESS FULL| T    |  1000 | 84000 |     3   (0)| 00:00:01 |                                           
    -----------------------------------------------------------------------------                                           
                                                                                                                            
    Predicate Information (identified by operation id):                                                                     
    ---------------------------------------------------                                                                     
                                                                                                                            
       3 - access("T"."OBJECT_ID"(+)="O"."OBJECT_ID")                   
       
    --case7
    SQL> EXPLAIN PLAN FOR DELETE FROM t;
    SQL>
    SQL> SELECT * FROM table(dbms_xplan.display);

    PLAN_TABLE_OUTPUT                                                                                                       
    ------------------------------------------------------------------------------------------------------------------------
    Plan hash value: 3335594643                                                                                             
                                                                                                                            
    ---------------------------------------------------------------------------                                             
    | Id  | Operation          | Name | Rows  | Bytes | Cost (%CPU)| Time     |                                             
    ---------------------------------------------------------------------------                                             
    |   0 | DELETE STATEMENT   |      |  1000 |  4000 |     3   (0)| 00:00:01 |                                             
    |   1 |  DELETE            | T    |       |       |            |          |                                             
    |   2 |   TABLE ACCESS FULL| T    |  1000 |  4000 |     3   (0)| 00:00:01 |                                             
    ---------------------------------------------------------------------------  

    --1519
    dbms_xplan.display_cursor

    /*
    format可用的修饰符
    allstats*     是iostats  memstats的快捷方式
    iostat*       控制I/0统计的显示
    last*         默认,显示所有执行计划过的统计。如果指定此值,只显示最后一次执行的统计信息
    memstats*     控制pga相关统计的显示
    runstats_last 和iostats last 相同,适用于 oracle10g r1
    runstats_tot  和iostats相同。适用于 oracle10g r1

    以上附带*表示从oracle10g r2 起可以使用
    */




    case1
    SQL> UPDATE t
      2  SET val = (SELECT /*+ index(t) */ max(val) FROM t WHERE id BETWEEN 6 AND 19),
      3      pad = (SELECT pad FROM t WHERE id = 6)
      4  WHERE id IN (SELECT id FROM t WHERE id BETWEEN 6 AND 19);
    SQL>
    SQL> SELECT * FROM table(dbms_xplan.display_cursor(NULL,NULL,'basic'));

    PLAN_TABLE_OUTPUT
    ---------------------------------------------------------------------------------------------------------------------------------------------
    EXPLAINED SQL STATEMENT:
    ------------------------
    UPDATE t SET val = (SELECT /*+ index(t) */ max(val) FROM t WHERE id
    BETWEEN 6 AND 19),     pad = (SELECT pad FROM t WHERE id = 6) WHERE id
    IN (SELECT id FROM t WHERE id BETWEEN 6 AND 19)

    Plan hash value: 2674170182

    ----------------------------------------------
    | Id  | Operation                     | Name |
    ----------------------------------------------
    |   0 | UPDATE STATEMENT              |      |
    |   1 |  UPDATE                       | T    |
    |   2 |   NESTED LOOPS                |      |
    |   3 |    TABLE ACCESS FULL          | T    |
    |   4 |    INDEX UNIQUE SCAN          | T_PK |
    |   5 |   SORT AGGREGATE              |      |
    |   6 |    TABLE ACCESS BY INDEX ROWID| T    |
    |   7 |     INDEX FULL SCAN           | I    |
    |   8 |   TABLE ACCESS BY INDEX ROWID | T    |
    |   9 |    INDEX UNIQUE SCAN          | T_PK |
    ----------------------------------------------



    --case2
    SQL> SELECT deptno, count(*)
      2  FROM emp
      3  WHERE job = 'CLERK' AND sal < 1200
      4  GROUP BY deptno;
    SQL>
    SQL> SELECT * FROM table(dbms_xplan.display_cursor(null,null,'iostats last'));

    PLAN_TABLE_OUTPUT
    ------------------------------------------------------------------------------------------------------------
    SQL_ID  5k3rhmx9hprh7, child number 0
    -------------------------------------
    SELECT deptno, count(*) FROM emp WHERE job = 'CLERK' AND sal < 1200
    GROUP BY deptno

    Plan hash value: 4067220884

    --------------------------------------------
    | Id  | Operation          | Name | E-Rows |
    --------------------------------------------
    |   0 | SELECT STATEMENT   |      |        |
    |   1 |  HASH GROUP BY     |      |      1 |
    |*  2 |   TABLE ACCESS FULL| EMP  |      1 |
    --------------------------------------------

    Predicate Information (identified by operation id):
    ---------------------------------------------------

       2 - filter(("JOB"='CLERK' AND "SAL"<1200))

    Note
    -----
       - Warning: basic plan statistics not available. These are only collected when:
           * hint 'gather_plan_statistics' is used for the statement or
           * parameter 'statistics_level' is set to 'ALL', at session or system level


    --case3
    SQL> SELECT *
      2  FROM emp
      3  WHERE rownum <= 10;
    SQL>
    SQL> SELECT * FROM table(dbms_xplan.display_cursor(null,null,'iostats last'));

    PLAN_TABLE_OUTPUT
    -----------------------------------------------------------------------------------------------------------------------
    SQL_ID  ajp501ttxv1vn, child number 0
    -------------------------------------
    SELECT * FROM emp WHERE rownum <= 10

    Plan hash value: 1973284518

    --------------------------------------------
    | Id  | Operation          | Name | E-Rows |
    --------------------------------------------
    |   0 | SELECT STATEMENT   |      |        |
    |*  1 |  COUNT STOPKEY     |      |        |
    |   2 |   TABLE ACCESS FULL| EMP  |      1 |
    --------------------------------------------

    Predicate Information (identified by operation id):
    ---------------------------------------------------

       1 - filter(ROWNUM<=10)

    Note
    -----
       - Warning: basic plan statistics not available. These are only collected when:
           * hint 'gather_plan_statistics' is used for the statement or
           * parameter 'statistics_level' is set to 'ALL', at session or system level


    --case4
    SQL> SELECT *
      2  FROM (
      3    SELECT *
      4    FROM emp
      5    ORDER BY sal DESC
      6  )
      7  WHERE rownum <= 10;
    SQL>
    SQL> SELECT * FROM table(dbms_xplan.display_cursor(null,null,'iostats last'));

    PLAN_TABLE_OUTPUT
    -----------------------------------------------------------------------------------------------------------------
    SQL_ID  7jpchs5c5bstu, child number 0
    -------------------------------------
    SELECT * FROM (   SELECT *   FROM emp   ORDER BY sal DESC ) WHERE
    rownum <= 10

    Plan hash value: 1744961472

    -------------------------------------------------
    | Id  | Operation               | Name | E-Rows |
    -------------------------------------------------
    |   0 | SELECT STATEMENT        |      |        |
    |*  1 |  COUNT STOPKEY          |      |        |
    |   2 |   VIEW                  |      |      1 |
    |*  3 |    SORT ORDER BY STOPKEY|      |      1 |
    |   4 |     TABLE ACCESS FULL   | EMP  |      1 |
    -------------------------------------------------

    Predicate Information (identified by operation id):
    ---------------------------------------------------

       1 - filter(ROWNUM<=10)
       3 - filter(ROWNUM<=10)

    Note
    -----
       - Warning: basic plan statistics not available. These are only collected when:
           * hint 'gather_plan_statistics' is used for the statement or
           * parameter 'statistics_level' is set to 'ALL', at session or system level
           
    --case5
    SQL> SELECT *
      2  FROM emp
      3  WHERE job = 'CLERK'
      4  AND 1=2;
    SQL>
    SQL> SELECT * FROM table(dbms_xplan.display_cursor(null,null,'iostats last'));

    PLAN_TABLE_OUTPUT
    ------------------------------------------------------------------------------------------------------
    SQL_ID  7vajq952vnrbk, child number 0
    -------------------------------------
    SELECT * FROM emp WHERE job = 'CLERK' AND 1=2

    Plan hash value: 3896240783

    --------------------------------------------
    | Id  | Operation          | Name | E-Rows |
    --------------------------------------------
    |   0 | SELECT STATEMENT   |      |        |
    |*  1 |  FILTER            |      |        |
    |*  2 |   TABLE ACCESS FULL| EMP  |      1 |
    --------------------------------------------

    Predicate Information (identified by operation id):
    ---------------------------------------------------

       1 - filter(NULL IS NOT NULL)
       2 - filter("JOB"='CLERK')

    Note
    -----
       - Warning: basic plan statistics not available. These are only collected when:
           * hint 'gather_plan_statistics' is used for the statement or
           * parameter 'statistics_level' is set to 'ALL', at session or system level
           
    --case 6
    SQL> SELECT ename FROM emp
      2  UNION ALL
      3  SELECT dname FROM dept
      4  UNION ALL
      5  SELECT '%' FROM dual;

    ENAME
    ----------
    ACCOUNTING
    RESEARCH
    SALES
    OPERATIONS
    %
    SQL>
    SQL> SELECT * FROM table(dbms_xplan.display_cursor(null,null,'iostats last'));

    PLAN_TABLE_OUTPUT
    ---------------------------------------------------------------------------------------------
    SQL_ID  781xq971h0y2p, child number 0
    -------------------------------------
    SELECT ename FROM emp UNION ALL SELECT dname FROM dept UNION ALL SELECT
    '%' FROM dual

    Plan hash value: 4181933179

    --------------------------------------------
    | Id  | Operation          | Name | E-Rows |
    --------------------------------------------
    |   0 | SELECT STATEMENT   |      |        |
    |   1 |  UNION-ALL         |      |        |
    |   2 |   TABLE ACCESS FULL| EMP  |      1 |
    |   3 |   TABLE ACCESS FULL| DEPT |      4 |
    |   4 |   FAST DUAL        |      |      1 |
    --------------------------------------------

    Note
    -----
       - Warning: basic plan statistics not available. These are only collected when:
           * hint 'gather_plan_statistics' is used for the statement or
           * parameter 'statistics_level' is set to 'ALL', at session or system level
           
    --case7
    SQL> SELECT /*+ ordered use_nl(dept) index(dept) */ *
      2  FROM emp, dept
      3  WHERE emp.deptno = dept.deptno
      4  AND emp.comm IS NULL
      5  AND dept.dname != 'SALES';
    SQL>
    SQL> SELECT * FROM table(dbms_xplan.display_cursor(null,null,'iostats last'));

    PLAN_TABLE_OUTPUT
    ---------------------------------------------------------------------------------------------------
    SQL_ID  3ux4g340c933p, child number 0
    -------------------------------------
    SELECT /*+ ordered use_nl(dept) index(dept) */ * FROM emp, dept WHERE
    emp.deptno = dept.deptno AND emp.comm IS NULL AND dept.dname != 'SALES'

    Plan hash value: 2694310824

    ---------------------------------------------------------
    | Id  | Operation                    | Name    | E-Rows |
    ---------------------------------------------------------
    |   0 | SELECT STATEMENT             |         |        |
    |   1 |  NESTED LOOPS                |         |        |
    |   2 |   NESTED LOOPS               |         |      1 |
    |*  3 |    TABLE ACCESS FULL         | EMP     |      1 |
    |*  4 |    INDEX UNIQUE SCAN         | DEPT_PK |      1 |
    |*  5 |   TABLE ACCESS BY INDEX ROWID| DEPT    |      1 |
    ---------------------------------------------------------

    Predicate Information (identified by operation id):
    ---------------------------------------------------

       3 - filter("EMP"."COMM" IS NULL)
       4 - access("EMP"."DEPTNO"="DEPT"."DEPTNO")
       5 - filter("DEPT"."DNAME"<>'SALES')

    Note
    -----
       - Warning: basic plan statistics not available. These are only collected when:
           * hint 'gather_plan_statistics' is used for the statement or
           * parameter 'statistics_level' is set to 'ALL', at session or system level
           
    --case 8
    SQL> SELECT *
      2  FROM emp
      3  WHERE NOT EXISTS (SELECT /*+ no_unnest */ 0
      4                    FROM dept
      5                    WHERE dept.dname = 'SALES' AND dept.deptno = emp.deptno)
      6  AND NOT EXISTS (SELECT /*+ no_unnest */ 0
      7                  FROM bonus
      8                  WHERE bonus.ename = emp.ename);
                    FROM bonus
                         *
    第 7 行出现错误:
    ORA-00942: ???????


    SQL>
    SQL> SELECT * FROM table(dbms_xplan.display_cursor(null,null,'iostats last'));

    PLAN_TABLE_OUTPUT
    -------------------------------------------------------------------------------------------------------
    SQL_ID  2tty67sw0nz6c, child number 1
    -------------------------------------
    SELECT * FROM table(dbms_xplan.display_cursor(null,null,'iostats last'))

    Plan hash value: 3713220770

    ---------------------------------------------------------------------
    | Id  | Operation                         | Name           | E-Rows |
    ---------------------------------------------------------------------
    |   0 | SELECT STATEMENT                  |                |        |
    |   1 |  COLLECTION ITERATOR PICKLER FETCH| DISPLAY_CURSOR |     52 |
    ---------------------------------------------------------------------

    Note
    -----
       - cardinality feedback used for this statement
       - Warning: basic plan statistics not available. These are only collected when:
           * hint 'gather_plan_statistics' is used for the statement or
           * parameter 'statistics_level' is set to 'ALL', at session or system level
           






    --1555
    SQL> CREATE TABLE t
      2  PARTITION BY HASH (id)
      3  PARTITIONS 2
      4  AS
      5  SELECT rownum AS id, rownum AS n, lpad('*',1000,'*') AS pad
      6  FROM dual
      7  CONNECT BY level <= 1000;
    SQL>
    SQL> PAUSE

    SQL>
    SQL> REM Display information about partitioning (columns Pstart and Pstop) and
    SQL> REM temporary space (column TempSpc)
    SQL>
    SQL> SELECT /*+ gather_plan_statistics */ count(pad)
      2  FROM (SELECT /* parallel(t,2) */ rownum AS rn, pad
      3        FROM t
      4        ORDER BY n)
      5  WHERE rn = 1;

    COUNT(PAD)
    ----------
             1
    SQL> /

    COUNT(PAD)
    ----------
             1
    SQL> /

    COUNT(PAD)
    ----------
             1
    SQL> /

    COUNT(PAD)
    ----------
             1
    SQL>
    SQL> SELECT * FROM table(dbms_xplan.display_cursor);

    PLAN_TABLE_OUTPUT
    -------------------------------------------------------------------------------------------------------------------------
    SQL_ID  6rwckvk4d8xjb, child number 0
    -------------------------------------
    SELECT /*+ gather_plan_statistics */ count(pad) FROM (SELECT /*
    parallel(t,2) */ rownum AS rn, pad       FROM t       ORDER BY n) WHERE
    rn = 1

    Plan hash value: 2056542717

    -------------------------------------------------------------------------------------------------------
    | Id  | Operation              | Name | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     | Pstart| Pstop |
    -------------------------------------------------------------------------------------------------------
    |   0 | SELECT STATEMENT       |      |       |       |       |   171 (100)|          |       |       |
    |   1 |  SORT AGGREGATE        |      |     1 |   515 |       |            |          |       |       |
    |*  2 |   VIEW                 |      |  1177 |   591K|       |   171   (2)| 00:00:02 |       |       |
    |   3 |    SORT ORDER BY       |      |  1177 |   591K|   640K|   171   (2)| 00:00:02 |       |       |
    |   4 |     COUNT              |      |       |       |       |            |          |       |       |
    |   5 |      PARTITION HASH ALL|      |  1177 |   591K|       |    19   (0)| 00:00:01 |     1 |     2 |
    |   6 |       TABLE ACCESS FULL| T    |  1177 |   591K|       |    19   (0)| 00:00:01 |     1 |     2 |
    -------------------------------------------------------------------------------------------------------


    --1744
    SQL> alter session set statistics_level=all;

    Session altered.

    执行这步之后,执行计划中才会显示  starts

    select /*+ gather_plan_statistics */ * from data_skew;

    select * from table(dbms_xplan.display_cursor(null,null,'advanced'));


    select * from data_skew where rownum < 101;



    ---  4dy2ffhhyud3c    569193580    0    select * from data_skew where rownum <100     1    2017/6/6 14:21:36    2017/6/6 14:21:35



    SELECT * FROM table(dbms_xplan.display_cursor('6rwckvk4d8xjb',0,'iostats last'));

    --case 2 advanced
    SELECT * FROM table(dbms_xplan.display_cursor('6rwckvk4d8xjb',0,'advanced'));

    --case 3 typical
    SELECT * FROM table(dbms_xplan.display_cursor('6rwckvk4d8xjb',0,'typical'));


    --case 4 all
    SELECT * FROM table(dbms_xplan.display_cursor('6rwckvk4d8xjb',0,'all'));


    --case 5 memstats last
    SELECT * FROM table(dbms_xplan.display_cursor('6rwckvk4d8xjb',0,'memstats last'));


    SELECT * FROM table(dbms_xplan.display_cursor('6rwckvk4d8xjb',0,'iostats last'));


    SELECT /*+ gather_plan_statistics */ count(pad)
    FROM (SELECT /* parallel(t,2) */ rownum AS rn, pad
          FROM t
          ORDER BY n)
    WHERE rn = 1;

    grant execute on dbms_hpof to owner






    dbms_profiler.


     alter procedure sys.dbms_profiler.perfect_triangles compile debug;

    grant all on dbms_profiler to public;


    dbms_output.put_line

    select t1.object_name,t1.object_id,t1.object_type,t1.owner from dba_objects t1 where t1.object_name='PERFECT_TRIANGLES';

    SELECT s.line,
           round(ratio_to_report(p.total_time) OVER ()*100,1) AS time,
           total_occur,
           s.text
    FROM all_source s,
         (SELECT u.unit_owner, u.unit_name, u.unit_type,
                 d.line#, d.total_time, d.total_occur
          FROM plsql_profiler_units u, plsql_profiler_data d
          WHERE u.runid = &runid
          AND d.runid = u.runid
          AND d.unit_number = u.unit_number) p
    WHERE s.owner = p.unit_owner (+)
    AND s.name = p.unit_name (+)
    AND s.type = p.unit_type (+)
    AND s.line = p.line# (+)
    AND s.owner = user
    AND s.name = 'SLEEP'
    ORDER BY s.line;



    dbms_sql.

    explain plan for select * from data_skew where rownum <2000;

    exec dbms_stats.gather_table_stats(user,'DATA_SKEW');


    select sys_context('userenv','sid') from dual;

    select * from v$sql_plan_statistics ;

    select /*+ gather_plan_statistics*/ * from t where n2=19;

    select sps.LAST_OUTPUT_ROWS,
           sps.LAST_CR_BUFFER_GETS,
           sps.LAST_CU_BUFFER_GETS
      from v$session s, v$sql_plan_statistics sps
     where s.prev_sql_id = sps.sql_id
       and s.PREV_CHILD_NUMBER = sps.CHILD_NUMBER
       and s.sid = sys_context('userenv', 'sid')
       and sps.OPERATION_ID = 1;

    dbms_stats.ObjectTab


    select * from test0605;

    alter table test0605 add (tmp_obj as (substr(object_name,1,3)));







    SELECT partition_name, partition_position, num_rows
    FROM user_tab_partitions
    WHERE table_name = 'T'
    ORDER BY partition_position;

    select p.partition_position,p.partition_name,s.subpartition_position,s.subpartition_name
    from user_tab_partitions p, user_tab_subpartitions s
    where p.table_name='T' and s.table_name=p.table_name and
    s.partition_name=p.partition_name
    order by p.partition_position,s.subpartition_position;



    select * from test0605;

    exec dbms_stats.gather_table_stats(user,'TEST0605');

    exec dbms_stats.gather_index_stats(user,'IDX_OBJECT_ID');



    select /*+ index(test0605 IDX_OBJECT_ID) */ object_name from test0605 where object_id =3389;



    explain plan for select /*+ index_ffs(test0605 IDX_OBJECT_ID) */ object_name from test0605 where object_id is not null;




    select extract(hg from sql_id) from v$sql_cs_statistics;

    select owner,object_id,extract('SYS' from O) from test;

    select * /*,extract(YEAR FROM CREATED)*/ from test;

    select * from dba_enabled_traces;


    select * from v$diag_info where name='';

    select * from tvd$xtat ;

    select t1.pname,t1.pval1,t1.pval2 from sys.aux_stats$ t1
    where t1.sname='SYSSTATS_MAIN';

    select sum(t1.SINGLEBLKRDS) as count,sum(t1.SINGLEBLKRDTIM) time_ms  from v$filestat t1;

    create table t as
    select rownum as id,
    round(dbms_random.normal*1000) as val1,
    100+round(ln(rownum/3.25+2 )) as val2,
    100+round(ln(rownum/3.25+2 )) as val3,
    dbms_random.string('p',250) as pad
    from all_objects
    where rownum<=1000
    order by dbms_random.value;

    update t set val1=null where val1<0;

    alter table t add constraints  t_pk primary key(id);

    create index t_val1_i on t(val1);

    create index t_val2_i on t(val2);

    begin
      dbms_stats.gather_table_stats(
     ownname=>user,
     tabname=>'T',
     estimate_percent=>100,
     method_opt =>'for all columns size skewonly',
      cascade=>true);
      end;

    select t1.NUM_ROWS,t1.BLOCKS,t1.EMPTY_BLOCKS,t1.AVG_SPACE,t1.CHAIN_CNT,t1.AVG_ROW_LEN
    from user_tab_statistics t1
    where t1.TABLE_NAME='T';




      NUM_ROWS     BLOCKS EMPTY_BLOCKS  AVG_SPACE  CHAIN_CNT AVG_ROW_LEN
    ---------- ---------- ------------ ---------- ---------- -----------
          1000         44            0          0          0         266
          

    /*
    NUM_ROWS 表中数据的行数
    BLOCKS  高水位线以下的数据块个数
    EMPTY_BLOCKS 高水位线以上的数据块个数
    AVG_SPACE 表中数据块的平均空闲空间(单位:字节)
    CHAIN_CNT  涉及行迁移、行链接的总行数
    AVG_ROW_LEN 表中平均每个记录的长度(单位:字节)
    */


    select t1.column_name name,t1.num_distinct "#dst",t1.low_value,t1.high_value,
    t1.density dens,t1.num_nulls "#null",t1.avg_col_len avglen,t1.HISTOGRAM,t1.num_buckets "#bkt"    
    from user_tab_col_statistics t1
    where t1.table_name='T';

    NAME                                 #dst LOW_VALUE                                                        HIGH_VALUE                                                             DENS      #null     AVGLEN HISTOGRAM             #bkt
    ------------------------------ ---------- ---------------------------------------------------------------- ---------------------------------------------------------------- ---------- ---------- ---------- --------------- ----------
    ID                                   1000 C102                                                             C20B                                                                   .001          0          4 NONE                     1
    VAL1                                  457 C105                                                             C22160                                                           .002353264        481          3 HEIGHT BALANCED        254
    VAL2                                    6 C20202                                                           C20207                                                                .0005          0          4 FREQUENCY                6
    VAL3                                    6 C20202                                                           C20207                                                                .0005          0          4 FREQUENCY                6
    PAD                                  1000 203F2C5D523371586E695D456775533C565A522A4F3128234F43502F77353026 7E7E7438735D7A464E77205B7B79454D517E384069784521344735457E2F2120       .001          0        251 HEIGHT BALANCED        254


    select utl_raw.cast_to_number(low_value) as low_value,
    utl_raw.cast_to_number(high_value) as high_value
    from user_tab_col_statistics
    where table_name='T'
    and column_name='VAL1';


    /*
    LOW_VALUE HIGH_VALUE
    ---------- ----------
             4       3295
    */

    begin
      dbms_stats.gather_index_stats(ownname =>user, indname =>'T_VAL1_I',estimate_percent=>100);
      end;  




    select t1.INDEX_NAME,t1.blevel,t1.LEAF_BLOCKS,t1.DISTINCT_KEYS,
    t1.NUM_ROWS,t1.CLUSTERING_FACTOR,t1.AVG_LEAF_BLOCKS_PER_KEY,t1.AVG_DATA_BLOCKS_PER_KEY
    from user_ind_statistics t1
    where t1.TABLE_NAME='T';


    /*
    INDEX_NAME                         BLEVEL LEAF_BLOCKS DISTINCT_KEYS   NUM_ROWS CLUSTERING_FACTOR AVG_LEAF_BLOCKS_PER_KEY AVG_DATA_BLOCKS_PER_KEY
    ------------------------------ ---------- ----------- ------------- ---------- ----------------- ----------------------- -----------------------
    T_PK                                    1           2          1000       1000               972                       1                       1
    T_VAL1_I                                1           2           457        519               508                       1                       1
    T_VAL2_I                                1           3             6       1000               174                       1                      29

    BLEVEL 访问叶子快而需要读取的分支块的数量,包括根块
    LEAF_BLOCKS 索引中的叶子块数量
    DISTINCT_KEYS 索引中唯一键值总数
    NUM_ROWS 索引中的键值数,对于主键来说 等同于 DISTINCT_KEYS
    CLUSTERING_FACTOR 表明有多少临近的索引条目知道不同的数据块。
    如果表中数据和索引的排序是相似的,那么 聚簇因子就小。最小值是表中非空数据的数据块总数
    如果表中数据和索引的排序迥异,聚簇因子就非常大。最大值是索引中的键值数


    */



    select i.index_name,i.clustering_factor,clustering_factor(user,i.table_name,ic.COLUMN_NAME) as my_clstf
    from user_indexes i,user_ind_columns ic
    where i.table_name='T' and i.index_name=ic.INDEX_NAME;




    select * from v$fixed_table;

    select * from user_tab_pending_stats;



    20170531
    0907
    select dbms_stats.get_stats_history_retention() from dual;



    select extract(hg from sql_id) from v$sql_cs_statistics;

    select owner,object_id,extract('SYS' from O) from test;

    select * /*,extract(YEAR FROM CREATED)*/ from test;

    select * from dba_enabled_traces;


    select * from v$diag_info where name='';

    select * from tvd$xtat ;

    select t1.pname,t1.pval1,t1.pval2 from sys.aux_stats$ t1
    where t1.sname='SYSSTATS_MAIN';

    select sum(t1.SINGLEBLKRDS) as count,sum(t1.SINGLEBLKRDTIM) time_ms  from v$filestat t1;

    create table t as
    select rownum as id,
    round(dbms_random.normal*1000) as val1,
    100+round(ln(rownum/3.25+2 )) as val2,
    100+round(ln(rownum/3.25+2 )) as val3,
    dbms_random.string('p',250) as pad
    from all_objects
    where rownum<=1000
    order by dbms_random.value;

    update t set val1=null where val1<0;

    alter table t add constraints  t_pk primary key(id);

    create index t_val1_i on t(val1);

    create index t_val2_i on t(val2);

    begin
      dbms_stats.gather_table_stats(
     ownname=>user,
     tabname=>'T',
     estimate_percent=>100,
     method_opt =>'for all columns size skewonly',
      cascade=>true);
      end;

    select t1.NUM_ROWS,t1.BLOCKS,t1.EMPTY_BLOCKS,t1.AVG_SPACE,t1.CHAIN_CNT,t1.AVG_ROW_LEN
    from user_tab_statistics t1
    where t1.TABLE_NAME='T';




      NUM_ROWS     BLOCKS EMPTY_BLOCKS  AVG_SPACE  CHAIN_CNT AVG_ROW_LEN
    ---------- ---------- ------------ ---------- ---------- -----------
          1000         44            0          0          0         266
          

    /*
    NUM_ROWS 表中数据的行数
    BLOCKS  高水位线以下的数据块个数
    EMPTY_BLOCKS 高水位线以上的数据块个数
    AVG_SPACE 表中数据块的平均空闲空间(单位:字节)
    CHAIN_CNT  涉及行迁移、行链接的总行数
    AVG_ROW_LEN 表中平均每个记录的长度(单位:字节)
    */


    select t1.column_name name,t1.num_distinct "#dst",t1.low_value,t1.high_value,
    t1.density dens,t1.num_nulls "#null",t1.avg_col_len avglen,t1.HISTOGRAM,t1.num_buckets "#bkt"    
    from user_tab_col_statistics t1
    where t1.table_name='T';

    NAME                                 #dst LOW_VALUE                                                        HIGH_VALUE                                                             DENS      #null     AVGLEN HISTOGRAM             #bkt
    ------------------------------ ---------- ---------------------------------------------------------------- ---------------------------------------------------------------- ---------- ---------- ---------- --------------- ----------
    ID                                   1000 C102                                                             C20B                                                                   .001          0          4 NONE                     1
    VAL1                                  457 C105                                                             C22160                                                           .002353264        481          3 HEIGHT BALANCED        254
    VAL2                                    6 C20202                                                           C20207                                                                .0005          0          4 FREQUENCY                6
    VAL3                                    6 C20202                                                           C20207                                                                .0005          0          4 FREQUENCY                6
    PAD                                  1000 203F2C5D523371586E695D456775533C565A522A4F3128234F43502F77353026 7E7E7438735D7A464E77205B7B79454D517E384069784521344735457E2F2120       .001          0        251 HEIGHT BALANCED        254


    select utl_raw.cast_to_number(low_value) as low_value,
    utl_raw.cast_to_number(high_value) as high_value
    from user_tab_col_statistics
    where table_name='T'
    and column_name='VAL1';


    /*
    LOW_VALUE HIGH_VALUE
    ---------- ----------
             4       3295
    */

    begin
      dbms_stats.gather_index_stats(ownname =>user, indname =>'T_VAL1_I',estimate_percent=>100);
      end;  




    select t1.INDEX_NAME,t1.blevel,t1.LEAF_BLOCKS,t1.DISTINCT_KEYS,
    t1.NUM_ROWS,t1.CLUSTERING_FACTOR,t1.AVG_LEAF_BLOCKS_PER_KEY,t1.AVG_DATA_BLOCKS_PER_KEY
    from user_ind_statistics t1
    where t1.TABLE_NAME='T';


    /*
    INDEX_NAME                         BLEVEL LEAF_BLOCKS DISTINCT_KEYS   NUM_ROWS CLUSTERING_FACTOR AVG_LEAF_BLOCKS_PER_KEY AVG_DATA_BLOCKS_PER_KEY
    ------------------------------ ---------- ----------- ------------- ---------- ----------------- ----------------------- -----------------------
    T_PK                                    1           2          1000       1000               972                       1                       1
    T_VAL1_I                                1           2           457        519               508                       1                       1
    T_VAL2_I                                1           3             6       1000               174                       1                      29

    BLEVEL 访问叶子快而需要读取的分支块的数量,包括根块
    LEAF_BLOCKS 索引中的叶子块数量
    DISTINCT_KEYS 索引中唯一键值总数
    NUM_ROWS 索引中的键值数,对于主键来说 等同于 DISTINCT_KEYS
    CLUSTERING_FACTOR 表明有多少临近的索引条目知道不同的数据块。
    如果表中数据和索引的排序是相似的,那么 聚簇因子就小。最小值是表中非空数据的数据块总数
    如果表中数据和索引的排序迥异,聚簇因子就非常大。最大值是索引中的键值数


    */



    select i.index_name,i.clustering_factor,clustering_factor(user,i.table_name,ic.COLUMN_NAME) as my_clstf
    from user_indexes i,user_ind_columns ic
    where i.table_name='T' and i.index_name=ic.INDEX_NAME;




    select * from v$fixed_table;

    select * from user_tab_pending_stats;



    20170531
    0907
    --统计信息保留窗口
    select dbms_stats.get_stats_history_retention() from dual;



    --2.0 修改保留窗口
    exec dbms_stats.alter_stats_history_retention(retention=>14);


    --3.0 删除14t天之前的统计信息
    dbms_stats.purge_stats(before_timestamp=>systimestamp-14);

    --执行 2.0  3.0 需要权限 analyze any dictionary

    --4.0 确认统计信息是否变动过
    select  t1.OWNER,t1.TABLE_NAME,to_char(t1.STATS_UPDATE_TIME,'yyyy-mm-dd hh24:mi:ss') stats_time   from dba_tab_stats_history t1 where t1.owner='OWNER' and t1.TABLE_NAME='T1' order by stats_time desc;


    --5.0 恢复单张表的统计信息


    dbms_stats.restore_table_stats(ownname=>,
    tabname=>,
    as_of_timestamp=>,
    force=>)

    --6.0 修改表的统计信息

    exec  dbms_stats.gather_table_stats(ownname=>'OWNER',tabname=>'T1');  

    select wri.rowcnt,
    wri.blkcnt,
    wri.avgrln,
    wri.analyzetime    from sys.wri$_optstat_tab_history wri,dba_objects obj  where wri.obj#=obj.data_object_id
    and  obj.object_name='T1'
     order by wri.analyzetime desc nulls last,obj.subobject_name asc nulls last,
     obj.data_object_id desc nulls last;

    select count(1) from  test t1 ;
    --71988

    select t1.owner,t1.object_name from test t1 where t1.object_id =3389;



    SQL> exec dbms_stats.set_table_stats( tabname=>'T1',ownname=>'OWNER',numrows => 2);

    PL/SQL procedure successfully completed.




    select t1.operation,to_char(t1.START_TIME,'yyyy-mm-dd hh24:mi:ss'), (t1.end_time-t1.start_time)  day(1) to second(0) as duration
    from dba_optstat_operations t1
    order by t1.start_time desc;


    --1528 去人该参数maximum PGA allocated 如果 远远大于 aggregate PGA target parameter ,那么初始化参数 pga_aggregate_target 值 也许不合适了
    select name ,value/1024/1024 ,unit from v$pgastat  where name in ('aggregate PGA target parameter','maximum PGA allocated')


    --1559
    select * from v$sql_plan t1;

    select * from v$sql_plan_statistics t1;

    select * from v$sql_workarea t1;

    select * from v$sql_plan_statistics_all;

    --10053 events
    alter session set tracefile_identifier='10053';
    alter session set events '10053 trace name context forever,level 1';
    select * from test;
    alter session set events '10053 trace name context off';

    --10132 events
    alter session set tracefile_identifier='10132';
    alter session set events '10132 trace name context forever,level 1';
    select * from test;
    alter session set events '10132 trace name context off';




    --1609 历史执行计划
    select * from table(dbms_xplan.display_awr('sql_id'))

    --1639
    为了使用 display_cursor函数,调用者必须对以下几张动态性能视图有 select权限: V$SESSION 、v$sql、v$sql_plan、v$sql_plan_statistics_all


    20170601
     select * from scott.emp where deptno=10 order by ename;

    select * from table(dbms_xplan.display(null,null,'advanced'));
    select * from table(dbms_xplan.display(null,null,'advanced +iostats last'));
    /*
    1    Plan hash value: 150391907
    2    
    3    ---------------------------------------------------------------------------
    4    | Id  | Operation          | Name | Rows  | Bytes | Cost (%CPU)| Time     |
    5    ---------------------------------------------------------------------------
    6    |   0 | SELECT STATEMENT   |      |     5 |   190 |     4  (25)| 00:00:01 |
    7    |   1 |  SORT ORDER BY     |      |     5 |   190 |     4  (25)| 00:00:01 |
    8    |*  2 |   TABLE ACCESS FULL| EMP  |     5 |   190 |     3   (0)| 00:00:01 |
    9    ---------------------------------------------------------------------------
    10    
    11    Predicate Information (identified by operation id):
    12    ---------------------------------------------------
    13    
    14       2 - filter("DEPTNO"=10)
    */


    1030
    包含执行计划的表中的字段

    基本字段
    字段                              描述
    id                                每一个操作的标识符。如果数字前面带有星号,意味着该行有谓词信息
    operation                         该行的操作,也叫 row source
    name                              操作的对象

    查询优化器评估类
    rows(e-rows)                              评估中操作返回的记录总数
    bytes(e-bytes)                            评估中操作返回的字节数
    tempspc                                   评估中操作使用的临时空间大小
    cost(%cpu)                                评估中操作的开销。括号中是开销的百分比。注意该值是通过执行计划计算过来的。即:福操作的开销包含子操作的开销
    time                                      评估中执行操作需要的时间
    分区类
    pstart                                    访问的第一个分区。如果解析时不知道是哪个分区就设为key、key(i) 、key(mc)、 key(or)、 key(sq)
    pstop                                     访问的最后一个分区。如果解析时不知道是哪个分区就设为key、key(i) 、key(mc)、 key(or)、 key(sq)

    并行和分布式处理类
    starts                                    指定操作执行的次数
    a-rows                                    指定操作返回的真实记录数
    a-time                                    指定操作执行的真实时间

    io统计类
    buffers                                   操作期间进行的逻辑读数量
    reads                                     操作期间进行的物理读数量
    writes                                    操作期间进行的物理写数量

    内存使用统计类
    omem                                      最有执行所需内存的评估值
    imem                                      一次性通过(one-pass)执行所需内存的评估值
    used-mem                                  最后一次操作时使用的内存量
    user-tmp                                  最后一次操作时使用的临时空间大小













    select * from scott.emp where rownum <5;

    select * from table(dbms_xplan.display(null,null,'advanced +allstats'));

    select * from table(dbms_xplan.display(null,null,'advanced +iostats'));

    select * from table(dbms_xplan.display(null,null,'advanced +last'));

    select * from table(dbms_xplan.display(null,null,'advanced +memstats'));


    select * from table(dbms_xplan.display(null,null,'advanced +runstats_last'));


    select * from (select * from scott.emp order by sal desc) where rownum <6;


    select * from table(dbms_xplan.display(null,null,'advanced'));


    select * from scott.emp,scott.dept where emp.deptno=dept.deptno and emp.comm is null and dept.dname!='SALeES';






    select t1.INDEX_NAME,t1.blevel,t1.LEAF_BLOCKS,t1.DISTINCT_KEYS,
    t1.NUM_ROWS,t1.CLUSTERING_FACTOR,t1.AVG_LEAF_BLOCKS_PER_KEY,t1.AVG_DATA_BLOCKS_PER_KEY
    from user_ind_statistics t1
    where t1.TABLE_NAME='TEST';

     SELECT index_name,    clustering_factor(user, table_name, column_name) AS clust_factor FROM user_ind_columns  WHERE table_name = 'T';



    select * from sys.aux_stats_history;


     
    --SQL> REM Display information about execution statistics (columns Starts, E-Rows,
    --SQL> REM A-Rows and A-Time) and I/O operations (columns Buffers, Reads and Writes)

    --1. 确认该参数statistics_level 的值
    SQL> show parameter statistics_level;

    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    statistics_level                     string      TYPICAL  --该参数statistics_level默认值 typical

    --2. 修改参数值为 all
    SQL> alter session set statistics_level=all;

    Session altered.

    --3. 再次确认该参数值
    SQL> show parameter statistics_level;

    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    statistics_level                     string      ALL

    /*
    执行计划中 Starts 、 E-Rows 、A-Rows 、   A-Time   、Buffers 、 Reads  、 Writes 等参数只在 statistics_level=all的情况下才可以看到值。
    */

    --以下开始测试
    select * from data_skew;
    以下分为 case1、case2、case3、case4、case5


    --case 1 iostats last
    SELECT * FROM table(dbms_xplan.display_cursor('4y4a4kxntcmsf',0,'iostats last'));
    /*
    1  SQL_ID  6rwckvk4d8xjb, child number 0
    2  -------------------------------------
    3  SELECT *+ gather_plan_statistics * count(pad) FROM (SELECT *
    4  parallel(t,2) * rownum AS rn, pad       FROM t       ORDER BY n) WHERE
    5  rn = 1
    6   
    7  Plan hash value: 2056542717
    8   
    9  -----------------------------------------------------------------------------------------------------------
    10  | Id  | Operation              | Name | Starts | E-Rows | A-Rows |   A-Time   | Buffers | Reads  | Writes |
    11  -----------------------------------------------------------------------------------------------------------
    12  |   0 | SELECT STATEMENT       |      |      1 |        |      1 |00:00:00.03 |     153 |    126 |    126 |
    13  |   1 |  SORT AGGREGATE        |      |      1 |      1 |      1 |00:00:00.03 |     153 |    126 |    126 |
    14  |*  2 |   VIEW                 |      |      1 |    894 |      1 |00:00:00.03 |     153 |    126 |    126 |
    15  |   3 |    SORT ORDER BY       |      |      1 |    894 |   1000 |00:00:00.04 |     153 |    126 |    126 |
    16  |   4 |     COUNT              |      |      1 |        |   1000 |00:00:00.01 |     150 |      0 |      0 |
    17  |   5 |      PARTITION HASH ALL|      |      1 |    894 |   1000 |00:00:00.01 |     150 |      0 |      0 |
    18  |   6 |       TABLE ACCESS FULL| T    |      2 |    894 |   1000 |00:00:00.01 |     150 |      0 |      0 |
    19  -----------------------------------------------------------------------------------------------------------
    20    
    21    Predicate Information (identified by operation id):
    22    ---------------------------------------------------
    23    
    24       2 - filter("RN"=1)
    25    
    26    Note
    27    -----
    28       - dynamic sampling used for this statement (level=2)
    29    
    */

    --case 2 advanced
    SELECT * FROM table(dbms_xplan.display_cursor('cahbf3stcpj2g',0,'advanced'));
    /*
    1    SQL_ID  6rwckvk4d8xjb, child number 0
    2    -------------------------------------
    3    SELECT *+ gather_plan_statistics * count(pad) FROM (SELECT *
    4    parallel(t,2) * rownum AS rn, pad       FROM t       ORDER BY n) WHERE
    5    rn = 1
    6    
    7    Plan hash value: 2056542717
    8    
    9    -------------------------------------------------------------------------------------------------------
    10    | Id  | Operation              | Name | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     | Pstart| Pstop |
    11    -------------------------------------------------------------------------------------------------------
    12    |   0 | SELECT STATEMENT       |      |       |       |       |   139 (100)|          |       |       |
    13    |   1 |  SORT AGGREGATE        |      |     1 |   515 |       |            |          |       |       |
    14    |*  2 |   VIEW                 |      |   894 |   449K|       |   139   (2)| 00:00:01 |       |       |
    15    |   3 |    SORT ORDER BY       |      |   894 |   449K|   488K|   139   (2)| 00:00:01 |       |       |
    16    |   4 |     COUNT              |      |       |       |       |            |          |       |       |
    17    |   5 |      PARTITION HASH ALL|      |   894 |   449K|       |    19   (0)| 00:00:01 |     1 |     2 |
    18    |   6 |       TABLE ACCESS FULL| T    |   894 |   449K|       |    19   (0)| 00:00:01 |     1 |     2 |
    19    -------------------------------------------------------------------------------------------------------
    20    
    21    Query Block Name / Object Alias (identified by operation id):
    22    -------------------------------------------------------------
    23    
    24       1 - SEL$1
    */

    --case 3 typical
    SELECT * FROM table(dbms_xplan.display_cursor('cahbf3stcpj2g',0,'typical'));
    /*
    1    SQL_ID  6rwckvk4d8xjb, child number 0
    2    -------------------------------------
    3    SELECT *+ gather_plan_statistics * count(pad) FROM (SELECT *
    4    parallel(t,2) * rownum AS rn, pad       FROM t       ORDER BY n) WHERE
    5    rn = 1
    6    
    7    Plan hash value: 2056542717
    8    
    9    -------------------------------------------------------------------------------------------------------
    10    | Id  | Operation              | Name | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     | Pstart| Pstop |
    11    -------------------------------------------------------------------------------------------------------
    12    |   0 | SELECT STATEMENT       |      |       |       |       |   139 (100)|          |       |       |
    13    |   1 |  SORT AGGREGATE        |      |     1 |   515 |       |            |          |       |       |
    14    |*  2 |   VIEW                 |      |   894 |   449K|       |   139   (2)| 00:00:01 |       |       |
    15    |   3 |    SORT ORDER BY       |      |   894 |   449K|   488K|   139   (2)| 00:00:01 |       |       |
    16    |   4 |     COUNT              |      |       |       |       |            |          |       |       |
    17    |   5 |      PARTITION HASH ALL|      |   894 |   449K|       |    19   (0)| 00:00:01 |     1 |     2 |
    18    |   6 |       TABLE ACCESS FULL| T    |   894 |   449K|       |    19   (0)| 00:00:01 |     1 |     2 |
    19    -------------------------------------------------------------------------------------------------------
    20    
    21    Predicate Information (identified by operation id):
    22    ---------------------------------------------------
    23    
    24       2 - filter("RN"=1)
    25    
    26    Note
    27    -----
    28       - dynamic sampling used for this statement (level=2)
    29    
    */

    --case 4 all
    SELECT * FROM table(dbms_xplan.display_cursor('cahbf3stcpj2g',0,'all'));
    /*
    1    SQL_ID  6rwckvk4d8xjb, child number 0
    2    -------------------------------------
    3    SELECT *+ gather_plan_statistics * count(pad) FROM (SELECT *
    4    parallel(t,2) * rownum AS rn, pad       FROM t       ORDER BY n) WHERE
    5    rn = 1
    6    
    7    Plan hash value: 2056542717
    8    
    9    -------------------------------------------------------------------------------------------------------
    10    | Id  | Operation              | Name | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     | Pstart| Pstop |
    11    -------------------------------------------------------------------------------------------------------
    12    |   0 | SELECT STATEMENT       |      |       |       |       |   139 (100)|          |       |       |
    13    |   1 |  SORT AGGREGATE        |      |     1 |   515 |       |            |          |       |       |
    14    |*  2 |   VIEW                 |      |   894 |   449K|       |   139   (2)| 00:00:01 |       |       |
    15    |   3 |    SORT ORDER BY       |      |   894 |   449K|   488K|   139   (2)| 00:00:01 |       |       |
    16    |   4 |     COUNT              |      |       |       |       |            |          |       |       |
    17    |   5 |      PARTITION HASH ALL|      |   894 |   449K|       |    19   (0)| 00:00:01 |     1 |     2 |
    18    |   6 |       TABLE ACCESS FULL| T    |   894 |   449K|       |    19   (0)| 00:00:01 |     1 |     2 |
    19    -------------------------------------------------------------------------------------------------------
    20    
    21    Query Block Name / Object Alias (identified by operation id):
    22    -------------------------------------------------------------
    23    
    24       1 - SEL$1
    25       2 - SEL$2 / from$_subquery$_001@SEL$1
    26       3 - SEL$2
    27       6 - SEL$2 / T@SEL$2
    28    
    29    Predicate Information (identified by operation id):
    30    ---------------------------------------------------
    31    
    32       2 - filter("RN"=1)
    33    
    34    Column Projection Information (identified by operation id):
    35    -----------------------------------------------------------
    36    
    37       1 - (#keys=0) COUNT("PAD")[22]
    38       2 - "RN"[NUMBER,22], "PAD"[VARCHAR2,1000]
    39       3 - (#keys=1) "N"[NUMBER,22], ROWNUM[22], "PAD"[VARCHAR2,1000]
    40       4 - "N"[NUMBER,22], "PAD"[VARCHAR2,1000], ROWNUM[4]
    41       5 - "N"[NUMBER,22], "PAD"[VARCHAR2,1000]
    42       6 - "N"[NUMBER,22], "PAD"[VARCHAR2,1000]
    43    
    44    Note
    45    -----
    46       - dynamic sampling used for this statement (level=2)
    47    
    */

    --case 5 memstats last
    SELECT * FROM table(dbms_xplan.display_cursor('cahbf3stcpj2g',0,'memstats last'));
    /*
    1    SQL_ID  6rwckvk4d8xjb, child number 0
    2    -------------------------------------
    3    SELECT *+ gather_plan_statistics * count(pad) FROM (SELECT *
    4    parallel(t,2) * rownum AS rn, pad       FROM t       ORDER BY n) WHERE
    5    rn = 1
    6    
    7    Plan hash value: 2056542717
    8    
    9    --------------------------------------------------------------------------------------------------------------------
    10    | Id  | Operation              | Name | Starts | E-Rows | A-Rows |   A-Time   |  OMem |  1Mem | Used-Mem | Used-Tmp|
    11    --------------------------------------------------------------------------------------------------------------------
    12    |   0 | SELECT STATEMENT       |      |      1 |        |      1 |00:00:00.03 |       |       |          |         |
    13    |   1 |  SORT AGGREGATE        |      |      1 |      1 |      1 |00:00:00.03 |       |       |          |         |
    14    |*  2 |   VIEW                 |      |      1 |    894 |      1 |00:00:00.03 |       |       |          |         |
    15    |   3 |    SORT ORDER BY       |      |      1 |    894 |   1000 |00:00:00.04 |  1134K|   560K|74752  (1)|    1024 |
    16    |   4 |     COUNT              |      |      1 |        |   1000 |00:00:00.01 |       |       |          |         |
    17    |   5 |      PARTITION HASH ALL|      |      1 |    894 |   1000 |00:00:00.01 |       |       |          |         |
    18    |   6 |       TABLE ACCESS FULL| T    |      2 |    894 |   1000 |00:00:00.01 |       |       |          |         |
    19    --------------------------------------------------------------------------------------------------------------------
    20    
    21    Predicate Information (identified by operation id):
    22    ---------------------------------------------------
    23    
    24       2 - filter("RN"=1)
    25    
    26    Note
    27    -----
    28       - dynamic sampling used for this statement (level=2)
    29    
    */

    /*
    添加 hint   /*+ gather_plan_statistics */
    SELECT * FROM table(dbms_xplan.display_cursor(NULL,NULL,'runstats_last'));
    以 runstats_last的方式查看执行计划 同样可以返回 execution statistics (columns Starts, E-Rows,
    SQL> REM A-Rows and A-Time) and I/O operations (columns Buffers, Reads and Writes)
    */

    select /*+ gather_plan_statistics */  object_name from test0605;
    select * from table(dbms_xplan.display_cursor(null,null,'advanced'));


    select * from test0605;












     







































             





  • 相关阅读:
    JSP学习笔记(一):JSP语法和指令
    小知识随手记(五)
    jQuery序列化表单数据 serialize()、serializeArray()及使用
    Servlet学习笔记(三):HTTP请求与响应
    Servlet学习笔记(二):表单数据
    AJAX前台传过来的中文在后台获取是乱码问题
    Servlet学习笔记(一):生命周期
    Servlet介绍以及简单实例
    jsp+servlet+jdbc实现对数据库的增删改查
    UML类图符号解释
  • 原文地址:https://www.cnblogs.com/iyoume2008/p/7041282.html
Copyright © 2011-2022 走看看