ExaGridDba

table access by index rowid batched, or not batched

Apr 26th, 2015
399
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. [oracle@stormking cdb12102 sqlplan]$ sqlplus /nolog @ batchedindexacces.SQL
  2.  
  3. SQL*Plus: RELEASE 12.1.0.2.0 Production ON Sun Apr 26 22:36:32 2015
  4.  
  5. Copyright (c) 1982, 2014, Oracle.  ALL rights reserved.
  6.  
  7. Connected.
  8. SQL> SET linesize 200
  9. SQL> SET pagesize 0
  10. SQL> SET trimspool ON
  11. SQL> WHENEVER oserror EXIT 1
  12. SQL> variable sqlid1 VARCHAR2(13)
  13. SQL> variable cld1 NUMBER
  14. SQL> variable phv1 NUMBER
  15. SQL> variable sqlid2 VARCHAR2(13)
  16. SQL> variable cld2 NUMBER
  17. SQL> variable phv2 NUMBER
  18. SQL> variable xplanopts VARCHAR2(40)
  19. SQL> EXEC :xplanopts := NULL
  20.  
  21. PL/SQL PROCEDURE successfully completed.
  22.  
  23. SQL>
  24. SQL> DROP TABLE p;
  25.  
  26. TABLE dropped.
  27.  
  28. SQL> CREATE TABLE p (
  29.   2  m NUMBER,
  30.   3  n NUMBER,
  31.   4  a NUMBER
  32.   5  );
  33.  
  34. TABLE created.
  35.  
  36. SQL> CREATE INDEX i ON p ( m, n );
  37.  
  38. INDEX created.
  39.  
  40. SQL> INSERT INTO p ( m, n, a )
  41.   2  SELECT
  42.   3  MOD ( LEVEL, 499979 ),
  43.   4  MOD ( LEVEL, 131 ),
  44.   5  MOD ( LEVEL, 137 )
  45.   6  FROM dual
  46.   7  CONNECT BY LEVEL <=1000000;
  47.  
  48. 1000000 ROWS created.
  49.  
  50. SQL> COMMIT;
  51.  
  52. COMMIT complete.
  53.  
  54. SQL>
  55. SQL> EXEC dbms_stats.gather_table_stats(NULL,'p' );
  56.  
  57. PL/SQL PROCEDURE successfully completed.
  58.  
  59. SQL>
  60. SQL> SELECT m, n, a FROM p WHERE m = 499978 AND n = 34;
  61.     499978         34        131
  62.  
  63. SQL> @ phv1
  64. SQL> spool plan1.txt
  65. SQL> BEGIN
  66.   2  SELECT sql_id, child_number, plan_hash_value INTO :sqlid1, :cld1, :phv1
  67.   3  FROM v$sql
  68.   4  WHERE ( sql_id, child_number ) IN (
  69.   5          SELECT prev_sql_id, prev_child_number
  70.   6          FROM v$session WHERE sid = SYS_CONTEXT( 'userenv','sid' )
  71.   7  );
  72.   8  END;
  73.   9  /
  74.  
  75. PL/SQL PROCEDURE successfully completed.
  76.  
  77. SQL> @ xpl1
  78. SQL> SELECT * FROM TABLE( dbms_xplan.display_cursor( :sqlid1, :cld1, :xplanopts ));
  79. SQL_ID  f8x4m8pwykd98, child NUMBER 0
  80. -------------------------------------
  81. SELECT m, n, a FROM p WHERE m = 499978 AND n = 34
  82.  
  83. PLAN hash VALUE: 1743606228
  84.  
  85. --------------------------------------------------------------------------------------------
  86. | Id  | Operation                           | Name | ROWS  | Bytes | COST (%CPU)| TIME     |
  87. --------------------------------------------------------------------------------------------
  88. |   0 | SELECT STATEMENT                    |      |       |       |     4 (100)|          |
  89. |   1 |  TABLE ACCESS BY INDEX ROWID BATCHED| P    |     1 |    11 |     4   (0)| 00:00:01 |
  90. |*  2 |   INDEX RANGE SCAN                  | I    |     1 |       |     3   (0)| 00:00:01 |
  91. --------------------------------------------------------------------------------------------
  92.  
  93. Predicate Information (IDENTIFIED BY operation id):
  94. ---------------------------------------------------
  95.  
  96.    2 - ACCESS("M"=499978 AND "N"=34)
  97.  
  98.  
  99. 19 ROWS selected.
  100.  
  101. SQL> spool off
  102. SQL>
  103. SQL> ALTER SESSION SET "_optimizer_batch_table_access_by_rowid" = FALSE;
  104.  
  105. SESSION altered.
  106.  
  107. SQL>
  108. SQL> SELECT m, n, a FROM p WHERE m = 499978 AND n = 34;
  109.     499978         34        131
  110.  
  111. SQL> @ phv2
  112. SQL> spool plan2.txt
  113. SQL> BEGIN
  114.   2  SELECT sql_id, child_number, plan_hash_value INTO :sqlid2, :cld2, :phv2
  115.   3  FROM v$sql
  116.   4  WHERE ( sql_id, child_number ) IN (
  117.   5          SELECT prev_sql_id, prev_child_number
  118.   6          FROM v$session WHERE sid = SYS_CONTEXT( 'userenv','sid' )
  119.   7  );
  120.   8  END;
  121.   9  /
  122.  
  123. PL/SQL PROCEDURE successfully completed.
  124.  
  125. SQL> @ xpl2
  126. SQL> SELECT * FROM TABLE( dbms_xplan.display_cursor( :sqlid2, :cld2, :xplanopts ));
  127. SQL_ID  f8x4m8pwykd98, child NUMBER 1
  128. -------------------------------------
  129. SELECT m, n, a FROM p WHERE m = 499978 AND n = 34
  130.  
  131. PLAN hash VALUE: 3946056664
  132.  
  133. ------------------------------------------------------------------------------------
  134. | Id  | Operation                   | Name | ROWS  | Bytes | COST (%CPU)| TIME     |
  135. ------------------------------------------------------------------------------------
  136. |   0 | SELECT STATEMENT            |      |       |       |     4 (100)|          |
  137. |   1 |  TABLE ACCESS BY INDEX ROWID| P    |     1 |    11 |     4   (0)| 00:00:01 |
  138. |*  2 |   INDEX RANGE SCAN          | I    |     1 |       |     3   (0)| 00:00:01 |
  139. ------------------------------------------------------------------------------------
  140.  
  141. Predicate Information (IDENTIFIED BY operation id):
  142. ---------------------------------------------------
  143.  
  144.    2 - ACCESS("M"=499978 AND "N"=34)
  145.  
  146.  
  147. 19 ROWS selected.
  148.  
  149. SQL> @ cmp
  150. SQL> SELECT :sqlid1, :cld1, :phv1, :sqlid2, :cld2, :phv2, CASE WHEN :phv1 = :phv2 THEN 'SAME' ELSE 'DIFFERENT' END cmp FROM dual;
  151. f8x4m8pwykd98                             0 1743606228 f8x4m8pwykd98                             1 3946056664 DIFFERENT
Advertisement
Add Comment
Please, Sign In to add comment