要对sql语句进行分析,首先就是要去看sql语句的执行计划是否存在问题,oracle在10g之后,默认采用CBO基于代价的优化器,sql语句的执行计划根据统计信息分析来决定,如果统计信息未收集,则采取动态采样的方式来决定最优的执行计划!

一: 获取sql语句的执行计划,在使用执行计划前,先以sys用户运行脚本$ORACLE_HOME/sqlplus/admin/plustrce.sql,该脚本创建了plustrace角色,并给该角色查询v$sessstat,v$statname,v$mystat三个动态性能视图的权限;最后将plustrace角色授予普通用户

1:创建测试表,填充数据,创建索引

  1. SQL> create table t as select 1 id,object_name from dba_objects;
  2. Table created.
  3. SQL> select count(*) from t;
  4. COUNT(*)
  5. ----------
  6. 77262
  7. SQL> update t set id=99 where rownum=1;
  8. 1 row updated.
  9. SQL> commit;
  10. Commit complete.
  11. SQL> select id,count(*) from t group by id;
  12. ID   COUNT(*)
  13. ---------- ----------
  14. 1      77261
  15. 99          1
  16. SQL> create index i_t_id on t(id);
  17. Index created.

2:获取sql语句的执行计划,‘dynamic sampling used for this statement (level=2)’表示采取级别2的动态采样;执行计划的步骤为靠右靠上先执行,而不是第一列的id顺序,在本例中先执行缩进最靠右的I_T_ID索引范围扫描,然后根据索引扫描出来的结果定位到T表相应行的rowid,谓词中的"2 - access("ID"=99)"表示where后条件id=99会对id为2的INDEX RANGE SCAN造成决定行的影响,这个也很好理解,在本例中如果where语句后面为id=1,则必然选择全表扫描才是最优的执行计划;rows则会返回的结果集行数,统计信息中对应select语句主要看物理读和一致性读的个数

  1. SQL> set autot traceonly
  2. SQL> select * from t where id=99;
  3. Execution Plan
  4. ----------------------------------------------------------
  5. Plan hash value: 4153437776
  6. --------------------------------------------------------------------------------------
  7. | Id  | Operation                   | Name   | Rows  | Bytes | Cost (%CPU)| Time|
  8. --------------------------------------------------------------------------------------
  9. |   0 | SELECT STATEMENT            |        |     1 |    79 |     2   (0)| 00:00:01 |
  10. |   1 |  TABLE ACCESS BY INDEX ROWID| T      |     1 |    79 |     2   (0)| 00:00:01 |
  11. |*  2 |   INDEX RANGE SCAN          | I_T_ID |     1 |       |     1   (0)| 00:00:01 |
  12. --------------------------------------------------------------------------------------
  13. Predicate Information (identified by operation id):
  14. ---------------------------------------------------
  15. 2 - access("ID"=99)
  16. Note
  17. -----
  18. - dynamic sampling used for this statement (level=2)
  19. Statistics
  20. ----------------------------------------------------------
  21. 10  recursive calls
  22. 0  db block gets
  23. 67  consistent gets
  24. 1  physical reads
  25. 0  redo size
  26. 491  bytes sent via SQL*Net to client
  27. 420  bytes received via SQL*Net from client
  28. 2  SQL*Net roundtrips to/from client
  29. 0  sorts (memory)
  30. 0  sorts (disk)
  31. 1  rows processed

3:使用dbms_stats包对表进行收集统计信息,在本例中可以看出进行分析过的表,将不会继续使用动态采样的方式收集信息

  1. SQL> exec dbms_stats.gather_table_stats('HR','T',CASCADE=>TRUE);
  2. PL/SQL procedure successfully completed.
  3. SQL> select * from t where id=99;
  4. Execution Plan
  5. ----------------------------------------------------------
  6. Plan hash value: 4153437776
  7. --------------------------------------------------------------------------------------
  8. | Id  | Operation                   | Name   | Rows  | Bytes | Cost (%CPU)| Time|
  9. --------------------------------------------------------------------------------------
  10. |   0 | SELECT STATEMENT            |        |    14 |   378 |     2   (0)| 00:00:01 |
  11. |   1 |  TABLE ACCESS BY INDEX ROWID| T      |    14 |   378 |     2   (0)| 00:00:01 |
  12. |*  2 |   INDEX RANGE SCAN          | I_T_ID |    14 |       |     1   (0)| 00:00:01 |
  13. --------------------------------------------------------------------------------------
  14. Predicate Information (identified by operation id):
  15. ---------------------------------------------------
  16. 2 - access("ID"=99)
  17. Statistics
  18. ----------------------------------------------------------
  19. 0  recursive calls
  20. 0  db block gets
  21. 3  consistent gets
  22. 0  physical reads
  23. 0  redo size
  24. 491  bytes sent via SQL*Net to client
  25. 420  bytes received via SQL*Net from client
  26. 2  SQL*Net roundtrips to/from client
  27. 0  sorts (memory)
  28. 0  sorts (disk)
  29. 1  rows processed

4:对表分析后的表进行update操作,在未重新进行分析前,将产生错误的执行计划,重新分析后正常;因而在生产环境中,经常有DML操作的表应当根据实际情况进行分析,否则将产生类似的问题

  1. SQL> set autot off
  2. SQL> update t set id=99 where id=1;
  3. 77261 rows updated.
  4. SQL> update t set id=1 where rownum=1;
  5. 1 row updated.
  6. SQL> commit;
  7. Commit complete.
  8. SQL> select id,count(*) from t group by id;
  9. ID   COUNT(*)
  10. ---------- ----------
  11. 1          1
  12. 99      77261
  13. SQL> set autot traceonly
  14. SQL> select * from t where id=99;
  15. 77261 rows selected.
  16. Execution Plan
  17. ----------------------------------------------------------
  18. Plan hash value: 4153437776
  19. --------------------------------------------------------------------------------------
  20. | Id  | Operation                   | Name   | Rows  | Bytes | Cost (%CPU)| Time|
  21. --------------------------------------------------------------------------------------
  22. |   0 | SELECT STATEMENT            |        |    14 |   378 |     2   (0)| 00:00:01 |
  23. |   1 |  TABLE ACCESS BY INDEX ROWID| T      |    14 |   378 |     2   (0)| 00:00:01 |
  24. |*  2 |   INDEX RANGE SCAN          | I_T_ID |    14 |       |     1   (0)| 00:00:01 |
  25. --------------------------------------------------------------------------------------
  26. Predicate Information (identified by operation id):
  27. ---------------------------------------------------
  28. 2 - access("ID"=99)
  29. Statistics
  30. ----------------------------------------------------------
  31. 0  recursive calls
  32. 0  db block gets
  33. 11017  consistent gets
  34. 0  physical reads
  35. 13840  redo size
  36. 3170997  bytes sent via SQL*Net to client
  37. 57070  bytes received via SQL*Net from client
  38. 5152  SQL*Net roundtrips to/from client
  39. 0  sorts (memory)
  40. 0  sorts (disk)
  41. 77261  rows processed
  42. SQL> select /*+ full(t) */ *  from t where id=99;
  43. 77261 rows selected.
  44. Execution Plan
  45. ----------------------------------------------------------
  46. Plan hash value: 1601196873
  47. --------------------------------------------------------------------------
  48. | Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
  49. --------------------------------------------------------------------------
  50. |   0 | SELECT STATEMENT  |      |    14 |   378 |   101   (1)| 00:00:02 |
  51. |*  1 |  TABLE ACCESS FULL| T    |    14 |   378 |   101   (1)| 00:00:02 |
  52. --------------------------------------------------------------------------
  53. Predicate Information (identified by operation id):
  54. ---------------------------------------------------
  55. 1 - filter("ID"=99)
  56. Statistics
  57. ----------------------------------------------------------
  58. 1  recursive calls
  59. 0  db block gets
  60. 5477  consistent gets
  61. 0  physical reads
  62. 0  redo size
  63. 2357600  bytes sent via SQL*Net to client
  64. 57070  bytes received via SQL*Net from client
  65. 5152  SQL*Net roundtrips to/from client
  66. 0  sorts (memory)
  67. 0  sorts (disk)
  68. 77261  rows processed
  69. SQL> exec dbms_stats.gather_table_stats('HEROSTART_CN','T',CASCADE=>TRUE);
  70. PL/SQL procedure successfully completed.
  71. SQL> select * from t where id=99;
  72. 77261 rows selected.
  73. Execution Plan
  74. ----------------------------------------------------------
  75. Plan hash value: 1601196873
  76. --------------------------------------------------------------------------
  77. | Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
  78. --------------------------------------------------------------------------
  79. |   0 | SELECT STATEMENT  |      | 77241 |  2036K|   101   (1)| 00:00:02 |
  80. |*  1 |  TABLE ACCESS FULL| T    | 77241 |  2036K|   101   (1)| 00:00:02 |
  81. --------------------------------------------------------------------------
  82. Predicate Information (identified by operation id):
  83. ---------------------------------------------------
  84. 1 - filter("ID"=99)
  85. Statistics
  86. ----------------------------------------------------------
  87. 0  recursive calls
  88. 0  db block gets
  89. 10845  consistent gets
  90. 0  physical reads
  91. 0  redo size
  92. 3170997  bytes sent via SQL*Net to client
  93. 57070  bytes received via SQL*Net from client
  94. 5152  SQL*Net roundtrips to/from client
  95. 0  sorts (memory)
  96. 0  sorts (disk)
  97. 77261  rows processed

5:执行计划的另一种查看方法,使用explain,同set autot on方式比(set autot traceonly只产生执行计划和统计信息,不执行实际的sql语句,因而广泛用于生产环境中),不产生"Statistics"信息

  1. SQL> explain plan for select * from t where id=1;
  2. Explained.
  3. SQL> select * from table(dbms_xplan.display);
  4. PLAN_TABLE_OUTPUT
  5. --------------------------------------------------------------------------------
  6. Plan hash value: 4153437776
  7. --------------------------------------------------------------------------------------
  8. | Id  | Operation                   | Name   | Rows  | Bytes | Cost (%CPU)| Time |
  9. --------------------------------------------------------------------------------------
  10. |   0 | SELECT STATEMENT            |        |    14 |   378 |     2   (0)| 00:00:01 |
  11. |   1 |  TABLE ACCESS BY INDEX ROWID| T      |    14 |   378 |     2   (0)| 00:00:01 |
  12. |*  2 |   INDEX RANGE SCAN          | I_T_ID |    14 |       |     1   (0)| 00:00:01 |
  13. --------------------------------------------------------------------------------------
  14. Predicate Information (identified by operation id):
  15. ---------------------------------------------------
  16. 2 - access("ID"=1)
  17. 14 rows selected.

二:直方图(histogram),指数据在列上的值分布情况;倾斜表场合,应当做对索引列做直方图,否则同样会产生错误的执行计划
DBMS_STATS包对表进行分析主要包含
1:表本身的分析,包括表的行数,数据块数,每一行的长度等信息
2:列的分析,包括列的重复数,列的空值数,列的值分布情况等
3:索引的分析,包括索引的块数,索引的深度(blevel),索引的聚合因子等

  1. SQL> create table t1 as select  1 id,object_name from dba_objects;
  2. Table created.
  3. SQL> update t1 set id=99 where rownum=1;
  4. 1 row updated.
  5. SQL> commit;
  6. Commit complete.
  7. SQL> create index i_t1_id on t1(id);
  8. Index created.
  9. SQL> select table_name,column_name,endpoint_number,endpoint_value from user_hist
  10. ograms where table_name='T1';
  11. no rows selected
  12. SQL> exec dbms_stats.gather_table_stats('HEROSTART_CN','T1',CASCADE=>TRUE);
  13. PL/SQL procedure successfully completed.
  14. SQL> select table_name,column_name,endpoint_number,endpoint_value from user_hist
  15. ograms where table_name='T1';
  16. TABLE_NAME           COLUMN_NAME          ENDPOINT_NUMBER ENDPOINT_VALUE
  17. -------------------- -------------------- --------------- --------------
  18. T1                   ID                                 0              1
  19. T1                   OBJECT_NAME                        0     2.4504E+35
  20. T1                   ID                                 1             99
  21. T1                   OBJECT_NAME                        1     6.2963E+35
  22. SQL> select count(*),id from t1 group by id;
  23. COUNT(*)         ID
  24. ---------- ----------
  25. 77267          1
  26. 1         99
  27. SQL> set autot traceonly
  28. SQL> select * from t1 where id=99;
  29. Execution Plan
  30. ----------------------------------------------------------
  31. Plan hash value: 1111474805
  32. ---------------------------------------------------------------------------------------
  33. | Id  | Operation                   | Name    | Rows  | Bytes | Cost (%CPU)| Time     |
  34. ---------------------------------------------------------------------------------------
  35. |   0 | SELECT STATEMENT            |         |    14 |   378 |     2   (0)| 00:00:01 |
  36. |   1 |  TABLE ACCESS BY INDEX ROWID| T1      |    14 |   378 |     2   (0)| 00:00:01 |
  37. |*  2 |   INDEX RANGE SCAN          | I_T1_ID |    14 |       |     1   (0)| 00:00:01 |
  38. ---------------------------------------------------------------------------------------
  39. Predicate Information (identified by operation id):
  40. ---------------------------------------------------
  41. 2 - access("ID"=99)
  42. Statistics
  43. ----------------------------------------------------------
  44. 0  recursive calls
  45. 0  db block gets
  46. 351  consistent gets
  47. 0  physical reads
  48. 0  redo size
  49. 487  bytes sent via SQL*Net to client
  50. 420  bytes received via SQL*Net from client
  51. 2  SQL*Net roundtrips to/from client
  52. 0  sorts (memory)
  53. 0  sorts (disk)
  54. 1  rows processed
  55. SQL> select * from t1 where id=1;
  56. 77267 rows selected.
  57. Execution Plan
  58. ---------------------------------------------------------
  59. Plan hash value: 3617692013
  60. --------------------------------------------------------------------------
  61. | Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
  62. --------------------------------------------------------------------------
  63. |   0 | SELECT STATEMENT  |      | 77254 |  2036K|   101   (1)| 00:00:02 |
  64. |*  1 |  TABLE ACCESS FULL| T1   | 77254 |  2036K|   101   (1)| 00:00:02 |
  65. --------------------------------------------------------------------------
  66. Predicate Information (identified by operation id):
  67. ---------------------------------------------------
  68. 1 - filter("ID"=1)
  69. Statistics
  70. ----------------------------------------------------------
  71. 8  recursive calls
  72. 0  db block gets
  73. 5489  consistent gets
  74. 0  physical reads
  75. 0  redo size
  76. 2357825  bytes sent via SQL*Net to client
  77. 57081  bytes received via SQL*Net from client
  78. 5153  SQL*Net roundtrips to/from client
  79. 3  sorts (memory)
  80. 0  sorts (disk)
  81. 77267  rows processed
  82. SQL> set autot off
  83. SQL> exec dbms_stats.delete_column_stats('HR','T1','ID');
  84. PL/SQL procedure successfully completed.
  85. SQL> select table_name,column_name,endpoint_number,endpoint_value from user_hist
  86. ograms where table_name='T1';
  87. TABLE_NAME           COLUMN_NAME          ENDPOINT_NUMBER ENDPOINT_VALUE
  88. -------------------- -------------------- --------------- --------------
  89. T1                   OBJECT_NAME                        0     2.4504E+35
  90. T1                   OBJECT_NAME                        1     6.2963E+35
  91. SQL> set autot traceonly
  92. SQL> select * from t1 where id=99;
  93. Execution Plan
  94. ----------------------------------------------------------
  95. Plan hash value: 1111474805
  96. ---------------------------------------------------------------------------------------
  97. | Id  | Operation                   | Name    | Rows  | Bytes | Cost (%CPU)| Time     |
  98. ---------------------------------------------------------------------------------------
  99. |   0 | SELECT STATEMENT            |         |   773 | 20871 |    77   (0)| 00:00:01 |
  100. |   1 |  TABLE ACCESS BY INDEX ROWID| T1      |   773 | 20871 |    77   (0)| 00:00:01 |
  101. |*  2 |   INDEX RANGE SCAN          | I_T1_ID |   309 |       |    75   (0)| 00:00:01 |
  102. ---------------------------------------------------------------------------------------
  103. Predicate Information (identified by operation id):
  104. ---------------------------------------------------
  105. 2 - access("ID"=99)
  106. Statistics
  107. ----------------------------------------------------------
  108. 0  recursive calls
  109. 0  db block gets
  110. 351  consistent gets
  111. 0  physical reads
  112. 0  redo size
  113. 487  bytes sent via SQL*Net to client
  114. 420  bytes received via SQL*Net from client
  115. 2  SQL*Net roundtrips to/from client
  116. 0  sorts (memory)
  117. 0  sorts (disk)
  118. 1  rows processed
  119. SQL> select * from t1 where id=1;
  120. 77267 rows selected.
  121. Execution Plan
  122. ----------------------------------------------------------
  123. Plan hash value: 1111474805
  124. ---------------------------------------------------------------------------------------
  125. | Id  | Operation                   | Name    | Rows  | Bytes | Cost (%CPU)| Time     |
  126. ---------------------------------------------------------------------------------------
  127. |   0 | SELECT STATEMENT            |         |   773 | 20871 |    77   (0)| 00:00:01 |
  128. |   1 |  TABLE ACCESS BY INDEX ROWID| T1      |   773 | 20871 |    77   (0)| 00:00:01 |
  129. |*  2 |   INDEX RANGE SCAN          | I_T1_ID |   309 |       |    75   (0)| 00:00:01 |
  130. ---------------------------------------------------------------------------------------
  131. Predicate Information (identified by operation id):
  132. ---------------------------------------------------
  133. 2 - access("ID"=1)
  134. Statistics
  135. ----------------------------------------------------------
  136. 1  recursive calls
  137. 0  db block gets
  138. 10781  consistent gets
  139. 0  physical reads
  140. 0  redo size
  141. 3171208  bytes sent via SQL*Net to client
  142. 57081  bytes received via SQL*Net from client
  143. 5153  SQL*Net roundtrips to/from client
  144. 0  sorts (memory)
  145. 0  sorts (disk)
  146. 77267  rows processed
  147. SQL> exec dbms_stats.gather_table_stats('HR','T1',CASCADE=>TRUE);
  148. PL/SQL procedure successfully completed.
  149. SQL> set autot off
  150. SQL> select table_name,column_name,endpoint_number,endpoint_value from user_hist
  151. ograms where table_name='T1';
  152. TABLE_NAME           COLUMN_NAME          ENDPOINT_NUMBER ENDPOINT_VALUE
  153. -------------------- -------------------- --------------- --------------
  154. T1                   ID                              5527             99
  155. T1                   ID                              5526              1
  156. T1                   OBJECT_NAME                        0     2.4504E+35
  157. T1                   OBJECT_NAME                        1     6.2963E+35

三:动态采样,动态采样分0-10,11个级别,级别越高,采样的结果越精确,需要消耗的数据库成本也越高

level0:不进行动态采样

level1:对没有进行分析的表进行动态采样,要求同时满足下列4个条件;
sql语句中至少有一个未分析的表
未分析的表出现在关联查询或者子查询中
未分析的表没有索引
未分析的表占用的数据块大于动态采样默认的数据块(32个)

level2:对所有未分析的表做分析,动态采样的数据块是默认数据块的2倍

level3:采样的表包含满足level2定义的所有表,同时包括,谓词中包含的潜在的需要动态采样的表

level4:采样的表满足level3定义的所有表,同时还包括一些表,他们包含一个单表的谓词会引用另外的2个列或者更多的列

level5,6,7,8,9:采样的表包含满足level4定义的所有表,同时分别使用默认数据库的2,4,8,32,128倍的数量做动态采样

level10:采样的表满足level9定义的所有表,同时对表的所有数据进行动态采样

1:创建基表,未收集统计信息前,user_tables视图中的相关信息未填充,11g版本中,user_indexes视图中的信息会被填充

  1. SQL> create table t2 as select object_id,object_name from dba_objects;
  2. Table created.
  3. SQL> create index i_t2_id on t2 (object_id);
  4. Index created.
  5. SQL> select num_rows,avg_row_len,blocks,last_analyzed from user_tables where tab
  6. le_name='T2';
  7. NUM_ROWS AVG_ROW_LEN     BLOCKS LAST_ANALYZED
  8. ---------- ----------- ---------- ---------------
  9. SQL> select blevel,leaf_blocks,distinct_keys,num_rows,last_analyzed from user_in
  10. dexes where table_name='T2';
  11. BLEVEL LEAF_BLOCKS DISTINCT_KEYS   NUM_ROWS LAST_ANALYZED
  12. ---------- ----------- ------------- ---------- -------------------
  13. 1         171         77265      77265 2012-06-07:13:55:04

2:执行查询,毫无疑问的采用动态采样,也能获取正确的执行计划,‘1 - filter("OBJECT_ID">30)’表示对结果进行过滤

  1. SQL> set autot traceonly
  2. SQL> select * from t2 where object_id > 30;
  3. 77236 rows selected.
  4. Execution Plan
  5. ----------------------------------------------------------
  6. Plan hash value: 1513984157
  7. --------------------------------------------------------------------------
  8. | Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
  9. --------------------------------------------------------------------------
  10. |   0 | SELECT STATEMENT  |      | 58208 |  4490K|   105   (0)| 00:00:02 |
  11. |*  1 |  TABLE ACCESS FULL| T2   | 58208 |  4490K|   105   (0)| 00:00:02 |
  12. --------------------------------------------------------------------------
  13. Predicate Information (identified by operation id):
  14. ---------------------------------------------------
  15. 1 - filter("OBJECT_ID">30)
  16. Note
  17. -----
  18. - dynamic sampling used for this statement (level=2)
  19. Statistics
  20. ----------------------------------------------------------
  21. 24  recursive calls
  22. 0  db block gets
  23. 5586  consistent gets
  24. 6  physical reads
  25. 0  redo size
  26. 3005346  bytes sent via SQL*Net to client
  27. 57059  bytes received via SQL*Net from client
  28. 5151  SQL*Net roundtrips to/from client
  29. 6  sorts (memory)
  30. 0  sorts (disk)
  31. 77236  rows processed

3:使用hint提示符,禁用动态采样,将产生错误的执行计划

  1. SQL> select /*+ dynamic_sampling(t2 0) */ * from t2 where object_id > 30;
  2. 77236 rows selected.
  3. Execution Plan
  4. ----------------------------------------------------------
  5. Plan hash value: 3661687773
  6. ---------------------------------------------------------------------------------------
  7. | Id  | Operation                   | Name    | Rows  | Bytes | Cost (%CPU)| Time     |
  8. ---------------------------------------------------------------------------------------
  9. |   0 | SELECT STATEMENT            |         |  1556 |   120K|     8   (0)| 00:00:01 |
  10. |   1 |  TABLE ACCESS BY INDEX ROWID| T2      |  1556 |   120K|     8   (0)| 00:00:01 |
  11. |*  2 |   INDEX RANGE SCAN          | I_T2_ID |   280 |       |     3   (0)| 00:00:01 |
  12. ---------------------------------------------------------------------------------------
  13. Predicate Information (identified by operation id):
  14. ---------------------------------------------------
  15. 2 - access("OBJECT_ID">30)
  16. Statistics
  17. ----------------------------------------------------------
  18. 1  recursive calls
  19. 0  db block gets
  20. 10897  consistent gets
  21. 165  physical reads
  22. 0  redo size
  23. 3314234  bytes sent via SQL*Net to client
  24. 57059  bytes received via SQL*Net from client
  25. 5151  SQL*Net roundtrips to/from client
  26. 0  sorts (memory)
  27. 0  sorts (disk)
  28. 77236  rows processed

3:收集统计信息后,user_tables视图相应的内容会被填充,禁用动态采样也能获取正确的执行计划

  1. SQL> set autot off
  2. SQL> exec dbms_stats.gather_table_stats('HR','T2',CASCADE=>TRUE);
  3. PL/SQL procedure successfully completed.
  4. SQL> select num_rows,avg_row_len,blocks,last_analyzed from user_tables where tab
  5. le_name='T2';
  6. NUM_ROWS AVG_ROW_LEN     BLOCKS LAST_ANALYZED
  7. ---------- ----------- ---------- -------------------
  8. 77266          29        381 2012-06-07:14:05:52
  9. SQL> select blevel,leaf_blocks,distinct_keys,num_rows,last_analyzed from user_in
  10. dexes where table_name='T2';
  11. BLEVEL LEAF_BLOCKS DISTINCT_KEYS   NUM_ROWS LAST_ANALYZED
  12. ---------- ----------- ------------- ---------- -------------------
  13. 1         171         77265      77265 2012-06-07:14:05:52
  14. SQL> set autot traceonly
  15. SQL> select /*+ dynamic_sampling(t2 0) */ * from t2 where object_id > 30;
  16. 77236 rows selected.
  17. Execution Plan
  18. ----------------------------------------------------------
  19. Plan hash value: 1513984157
  20. --------------------------------------------------------------------------
  21. | Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
  22. --------------------------------------------------------------------------
  23. |   0 | SELECT STATEMENT  |      | 77242 |  2187K|   106   (1)| 00:00:02 |
  24. |*  1 |  TABLE ACCESS FULL| T2   | 77242 |  2187K|   106   (1)| 00:00:02 |
  25. --------------------------------------------------------------------------
  26. Predicate Information (identified by operation id):
  27. ---------------------------------------------------
  28. 1 - filter("OBJECT_ID">30)
  29. Statistics
  30. ----------------------------------------------------------
  31. 12  recursive calls
  32. 0  db block gets
  33. 5516  consistent gets
  34. 0  physical reads
  35. 0  redo size
  36. 3005346  bytes sent via SQL*Net to client
  37. 57059  bytes received via SQL*Net from client
  38. 5151  SQL*Net roundtrips to/from client
  39. 5  sorts (memory)
  40. 0  sorts (disk)
  41. 77236  rows processed

本文以《让oracle跑的更快》为指导,如有雷同,不胜荣幸!

浅谈Oracle执行计划相关推荐

  1. oracle hash join outer,CSS_浅谈Oracle中的三种Join方法,基本概念 Nested loop join: Outer - phpStudy...

    浅谈Oracle中的三种Join方法 基本概念 Nested loop join: Outer table中的每一行与inner table中的相应记录join,类似一个嵌套的循环. Sort mer ...

  2. mysql维护计划任务_浅谈MySQL event 计划任务

    一.查看event是否开启 show variables like '%sche%'; set global event_scheduler =1; 二. -- 设置时区并设置计划事件调度器开启,也可 ...

  3. mysql 计划任务消耗_浅谈MySQL event 计划任务

    一.查看event是否开启 show variables like '%sche%'; set global event_scheduler =1; 二. -- 设置时区并设置计划事件调度器开启,也可 ...

  4. 浅谈Oracle RAC --集群管理软件GI

    浅谈Oracle RAC --集群管理软件GI基本架构 今天周五,想想可以过周末,心情大好.一周中最喜欢过的就是周五晚上,最不喜欢过的是周日晚上和周一,看来我不是个热爱劳动的人啊.趁着现在心情愉悦,赶 ...

  5. 浅谈oracle树状结构层级查询

    oracle树状结构查询即层次递归查询,是sql语句经常用到的,在实际开发中组织结构实现及其层次化实现功能也是经常遇到的,虽然我是一个java程序开发者,我一直觉得只要精通数据库那么对于java开发你 ...

  6. 浅谈Oracle RAC -- OHAS组件

    浅谈Oracle RAC – OHAS组件 懒惰了一周没有更新博客.这两天天气不好,索性利用今天下午的时间继续写一篇关于OHAS组件的介绍. 之前我们多次提到了OHAS组件是GI的根守护进程.这个组件 ...

  7. Oracle执行计划突变诊断之统计信息收集问题

    Oracle执行计划突变诊断之统计信息收集问题 1.  情形描述 DB version:11.2.0.4 WITH SQL1 AS(SELECT LAC,CI,TO_NUMBER(C.LONGITUD ...

  8. ORACLE执行计划的一些基本概念

    本文介绍了ORACLE执行计划的一些基本概念,供学习应用. 一.相关的概念 Rowid的概念:rowid是一个伪列,既然是伪列,那么这个列就不是用户定义,而是系统自己给加上的.对每个表都有一个rowi ...

  9. Oracle 执行计划

    Oracle执行计划是什么 关于执行计划的概念,相信大家都有过基础的了解.这里不详细解释概念性东西,只需要知道.执行计划是Oracle根据SQL语句生成的一个执行步骤的表述即可. 执行计划分三部分:1 ...

  10. 海天 oracle,Oracle执行计划详解

    作者:TTTBLOG --- 简介: 本文全面详细介绍oracle执行计划的相关的概念,访问数据的存取方法,表之间的连接等内容. 并有总结和概述,便于理解与记忆! +++ 目录 --- 一.相关的概念 ...

最新文章

  1. 关于类和对象的进一步讨论 C++
  2. fliqlo windows_Windows小众软件工具推荐
  3. HDOJ 1202 The calculation of GPA
  4. linux ant 解决 错误: 找不到或无法加载主类 org.apache.tools.ant.launch.Launcher
  5. keytool安装tls证书_TLS使用指南(一):如何在Rancher 2.x中进行TLS终止?
  6. nginx配置文件中location与root访问时的联系
  7. Web Service学习笔记(4)
  8. leetcode 419. Battleships in a Board | 419. 甲板上的战舰(二维矩阵DFS经典“感染”思路)
  9. 《c程序设计语言》练习1-12
  10. Python 下划线
  11. ansys怎么建立弯曲圆柱_ANSYS复合材料分析
  12. The Wave kernel Signature: A Quantum Mechanical Approach to shape Analysis
  13. 现有系统如何集成Consul服务发现
  14. 计算机硕论题目,硕士论文题目精选(计算机方向)
  15. 查询CI框架的版本号
  16. 条码枪接入智能网关,通过条码查询数据库,数据写入PLC寄存器
  17. vim 插件安装 (ubuntu OS)
  18. JavaScript ES6介绍
  19. java获取京东token_京东宙斯平台使用方法(accesstoken,appkey,appsecret参数和SDK的获取)...
  20. 电子商务要学计算机吗 难学吗,电子商务专业对数学要求高吗

热门文章

  1. lxml.etree.SerialisationError: IO_ENCODER
  2. Python3——使用exec和eval执行字符串及计算其结果
  3. 李宏毅机器学习homework0
  4. Windows下配置QGIS和Python
  5. ArcGIS 设置暂时固定存储地址
  6. Acrobat XI 安装教程方法!
  7. 从Spring代理的bean中获取代理对象
  8. python强行终止程序,如何终止Python脚本
  9. 豆瓣9.3的高分! 牛逼的Git !!!
  10. CTO@全体成员,未经允许和评审不让用反射,Java反射到底慢在哪?