Dba_indexes view Performance Analysis

Source: Internet
Author: User

select case when status='UNUSABLE' then        'alter index '||owner||'.'||index_name||' rebuild online compute statistics;'      when to_number(degree)>1 then        'alter index /* '||degree ||' */'||owner||'.'||index_name||' noparallel;'    end casefrom (select * from dba_indexes where degree<>‘DEFAULT') awhere status='UNUSABLE'or to_number(degree)>1and owner not in ('SYS','SYSTEM','MANAGER','WMSYS');

The statement runs quickly, but it is found from statspack that the logic read of this statement is as high as 26846 at a time. UseSet autotraceAfter comparing the execution plans and statistics of 9i and 10g, we found that the cost of 9i querying this view is very high, while 10G has improved. In Oracle9i, optimizer_mode is CHOOSE by default, so RBO is used for data dictionary query, while Oracle10g is ALL_ROWS by default, so CBO is used.

SQL> select * from v$version;BANNER----------------------------------------------------------------Oracle9i Enterprise Edition Release 9.2.0.6.0 - 64bit ProductionPL/SQL Release 9.2.0.6.0 - ProductionCORE  9.2.0.6.0    ProductionTNS for IBM/AIX RISC System/6000: Version 9.2.0.6.0 - ProductionNLSRTL Version 9.2.0.6.0 - ProductionSQL> set autot traceSQL> select * from dba_indexes;1242 rows selected.Execution Plan----------------------------------------------------------  0   SELECT STATEMENT Optimizer=CHOOSE  1  0  NESTED LOOPS (OUTER)  2  1   NESTED LOOPS (OUTER)  3  2    NESTED LOOPS  4  3     NESTED LOOPS  5  4      NESTED LOOPS (OUTER)  6  5       NESTED LOOPS  7  6        NESTED LOOPS (OUTER)  8  7         NESTED LOOPS  9  8          TABLE ACCESS (FULL) OF 'OBJ$' 10  8          TABLE ACCESS (BY INDEX ROWID) OF 'IND$' 11  10           INDEX (UNIQUE SCAN) OF 'I_IND1' (UNIQUE) 12  7         TABLE ACCESS (BY INDEX ROWID) OF 'OBJ$' 13  12          INDEX (UNIQUE SCAN) OF 'I_OBJ1' (UNIQUE) 14  6        TABLE ACCESS (BY INDEX ROWID) OF 'OBJ$' 15  14         INDEX (UNIQUE SCAN) OF 'I_OBJ1' (UNIQUE) 16  5       TABLE ACCESS (CLUSTER) OF 'USER$' 17  16        INDEX (UNIQUE SCAN) OF 'I_USER#' (NON-UNIQUE) 18  4      TABLE ACCESS (CLUSTER) OF 'USER$' 19  18       INDEX (UNIQUE SCAN) OF 'I_USER#' (NON-UNIQUE) 20  3     TABLE ACCESS (CLUSTER) OF 'USER$' 21  20      INDEX (UNIQUE SCAN) OF 'I_USER#' (NON-UNIQUE) 22  2    TABLE ACCESS (CLUSTER) OF 'SEG$' 23  22     INDEX (UNIQUE SCAN) OF 'I_FILE#_BLOCK#' (NON-UNIQUE) 24  1   TABLE ACCESS (CLUSTER) OF 'TS$' 25  24    INDEX (UNIQUE SCAN) OF 'I_TS#' (NON-UNIQUE)Statistics----------------------------------------------------------     0 recursive calls     0 db block gets   42924 consistent gets     0 physical reads     0 redo size   98000 bytes sent via SQL*Net to client    1558 bytes received via SQL*Net from client     84 SQL*Net roundtrips to/from client     0 sorts (memory)     0 sorts (disk)    1242 rows processed

SQL>select * from v$version;BANNER----------------------------------------------------------------Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64biPL/SQL Release 10.2.0.4.0 - ProductionCORE  10.2.0.4.0   ProductionTNS for IBM/AIX RISC System/6000: Version 10.2.0.4.0 - ProductioNLSRTL Version 10.2.0.4.0 - Production21:32:11 SYS@coll>set autot trace21:32:15 SYS@coll>select * from dba_indexes;1162 rows selected.Execution Plan----------------------------------------------------------Plan hash value: 3901056803----------------------------------------------------------------------------------------------| Id | Operation              | Name  | Rows | Bytes | Cost (%CPU)| Time   |----------------------------------------------------------------------------------------------|  0 | SELECT STATEMENT          |    | 1164 |  330K|  237  (3)| 00:00:03 ||* 1 | HASH JOIN RIGHT OUTER       |    | 1164 |  330K|  237  (3)| 00:00:03 ||  2 |  TABLE ACCESS FULL         | TS$  |   9 |  189 |   4  (0)| 00:00:01 ||* 3 |  HASH JOIN RIGHT OUTER       |    | 1164 |  306K|  232  (3)| 00:00:03 ||  4 |  TABLE ACCESS FULL        | SEG$  | 2635 |  102K|  18  (0)| 00:00:01 ||* 5 |  HASH JOIN            |    | 1164 |  261K|  214  (3)| 00:00:03 ||  6 |   TABLE ACCESS FULL        | USER$ |  35 |  560 |   2  (0)| 00:00:01 ||* 7 |   HASH JOIN            |    | 1164 |  243K|  211  (3)| 00:00:03 ||  8 |   TABLE ACCESS FULL       | USER$ |  35 |  560 |   2  (0)| 00:00:01 ||* 9 |   HASH JOIN RIGHT OUTER     |    | 1164 |  225K|  208  (2)| 00:00:03 || 10 |    TABLE ACCESS FULL       | USER$ |  35 |  560 |   2  (0)| 00:00:01 ||* 11 |    HASH JOIN           |    | 1164 |  206K|  206  (2)| 00:00:03 ||* 12 |    HASH JOIN OUTER       |    | 1164 |  172K|  174  (2)| 00:00:03 || 13 |     MERGE JOIN         |    | 1164 |  142K|  142  (2)| 00:00:02 ||* 14 |     TABLE ACCESS BY INDEX ROWID| IND$  | 1164 |  104K|  109  (0)| 00:00:02 || 15 |      INDEX FULL SCAN      | I_IND1 | 1164 |    |   2  (0)| 00:00:01 ||* 16 |     SORT JOIN         |    | 10589 |  341K|  33  (7)| 00:00:01 ||* 17 |      TABLE ACCESS FULL     | OBJ$  | 10589 |  341K|  32  (4)| 00:00:01 || 18 |     TABLE ACCESS FULL      | OBJ$  | 10592 |  279K|  31  (0)| 00:00:01 || 19 |    TABLE ACCESS FULL      | OBJ$  | 10592 |  310K|  31  (0)| 00:00:01 |----------------------------------------------------------------------------------------------Predicate Information (identified by operation id):---------------------------------------------------  1 - access("I"."TS#"="TS"."TS#"(+))  3 - access("I"."FILE#"="S"."FILE#"(+) AND "I"."BLOCK#"="S"."BLOCK#"(+) AND       "I"."TS#"="S"."TS#"(+))  5 - access("IO"."OWNER#"="IU"."USER#")  7 - access("U"."USER#"="O"."OWNER#")  9 - access("ITO"."OWNER#"="ITU"."USER#"(+)) 11 - access("I"."BO#"="IO"."OBJ#") 12 - access("I"."INDMETHOD#"="ITO"."OBJ#"(+)) 14 - filter(BITAND("I"."FLAGS",4096)=0) 16 - access("O"."OBJ#"="I"."OBJ#")    filter("O"."OBJ#"="I"."OBJ#") 17 - filter(BITAND("O"."FLAGS",128)=0)Statistics----------------------------------------------------------     0 recursive calls     0 db block gets    876 consistent gets     0 physical reads     0 redo size   92582 bytes sent via SQL*Net to client    1339 bytes received via SQL*Net from client     79 SQL*Net roundtrips to/from client     1 sorts (memory)     0 sorts (disk)    1162 rows processedselect /*+ rule */* from dba_indexes;1162 rows selected.Elapsed: 00:00:00.55Execution Plan----------------------------------------------------------Plan hash value: 2107813288--------------------------------------------------------------| Id | Operation              | Name      |--------------------------------------------------------------|  0 | SELECT STATEMENT          |        ||  1 | NESTED LOOPS OUTER         |        ||  2 |  NESTED LOOPS OUTER        |        ||  3 |  NESTED LOOPS           |        ||  4 |   NESTED LOOPS          |        ||  5 |   NESTED LOOPS OUTER       |        ||  6 |    NESTED LOOPS         |        ||  7 |    NESTED LOOPS OUTER      |        ||  8 |     NESTED LOOPS        |        ||* 9 |     TABLE ACCESS FULL     | OBJ$      ||* 10 |     TABLE ACCESS BY INDEX ROWID| IND$      ||* 11 |      INDEX UNIQUE SCAN     | I_IND1     || 12 |     TABLE ACCESS BY INDEX ROWID | OBJ$      ||* 13 |     INDEX UNIQUE SCAN     | I_OBJ1     || 14 |    TABLE ACCESS BY INDEX ROWID | OBJ$      ||* 15 |     INDEX UNIQUE SCAN      | I_OBJ1     || 16 |    TABLE ACCESS CLUSTER     | USER$     ||* 17 |    INDEX UNIQUE SCAN      | I_USER#    || 18 |   TABLE ACCESS CLUSTER      | USER$     ||* 19 |    INDEX UNIQUE SCAN       | I_USER#    || 20 |   TABLE ACCESS CLUSTER      | USER$     ||* 21 |   INDEX UNIQUE SCAN       | I_USER#    || 22 |  TABLE ACCESS CLUSTER       | SEG$      ||* 23 |   INDEX UNIQUE SCAN        | I_FILE#_BLOCK# || 24 |  TABLE ACCESS CLUSTER       | TS$      ||* 25 |  INDEX UNIQUE SCAN        | I_TS#     |--------------------------------------------------------------Predicate Information (identified by operation id):---------------------------------------------------  9 - filter(BITAND("O"."FLAGS",128)=0) 10 - filter(BITAND("I"."FLAGS",4096)=0) 11 - access("O"."OBJ#"="I"."OBJ#") 13 - access("I"."INDMETHOD#"="ITO"."OBJ#"(+)) 15 - access("I"."BO#"="IO"."OBJ#") 17 - access("ITO"."OWNER#"="ITU"."USER#"(+)) 19 - access("U"."USER#"="O"."OWNER#") 21 - access("IO"."OWNER#"="IU"."USER#") 23 - access("I"."TS#"="S"."TS#"(+) AND "I"."FILE#"="S"."FILE#"(+) AND       "I"."BLOCK#"="S"."BLOCK#"(+)) 25 - access("I"."TS#"="TS"."TS#"(+))Note-----  - rule based optimizer used (consider using cbo)Statistics----------------------------------------------------------     0 recursive calls     0 db block gets   25254 consistent gets     26 physical reads     0 redo size   93977 bytes sent via SQL*Net to client    1339 bytes received via SQL*Net from client     79 SQL*Net roundtrips to/from client     0 sorts (memory)     0 sorts (disk)    1162 rows processed

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.