在10g以后我们可以通过利用gather_plan_statistics提示来了解更多的SQL执行统计信息,具体使用方法如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
SQL> set linesize 150
SQL> set pagesize 2000
SQL> set autotrace traceonly exp
SQL> select avg(SALARY),DEPARTMENT_NAME from
employees e,departments d where e.DEPARTMENT_ID=d.DEPARTMENT_ID group by DEPARTMENT_NAME;
Execution Plan
----------------------------------------------------------
Plan hash value: 3294250112
---------------------------------------------------------------------------------------------
| Id  | Operation             | Name        Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT          |         |    27 |   621 |     5  (20)| 00:00:01 |
|   1 |  HASH GROUP BY            |         |    27 |   621 |     5  (20)| 00:00:01 |
|   2 |   NESTED LOOPS            |         |   106 |  2438 |     4   (0)| 00:00:01 |
|   3 |    TABLE ACCESS FULL          | EMPLOYEES   |   107 |   749 |     3   (0)| 00:00:01 |
|   4 |    TABLE ACCESS BY INDEX ROWID| DEPARTMENTS |     1 |    16 |     1   (0)| 00:00:01 |
|*  5 |     INDEX UNIQUE SCAN         | DEPT_ID_PK  |     1 |       |     0   (0)| 00:00:01 |
---------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   5 - access("E"."DEPARTMENT_ID"="D"."DEPARTMENT_ID")
SQL> show parameter cursor_sharing
NAME                     TYPE    VALUE
------------------------------------ ----------- ------------------------------
cursor_sharing               string  EXACT
SQL>  show parameter statistics_level
NAME                     TYPE    VALUE
------------------------------------ ----------- ------------------------------
statistics_level             string  TYPICAL
SQL> set autotrace off;
SQL> select /*+ gather_plan_statistics */   avg(SALARY),DEPARTMENT_NAME from
employees e,departments d where e.DEPARTMENT_ID=d.DEPARTMENT_ID group by DEPARTMENT_NAME;
SQL> select from TABLE(dbms_xplan.display_cursor(NULL,NULL,'ALLSTATS LAST'));
PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------------------------------------------
SQL_ID  bctzu9xuxay18, child number 0
-------------------------------------
select /*+ gather_plan_statistics */  avg(SALARY),DEPARTMENT_NAME from employees e,departments d
where e.DEPARTMENT_ID=d.DEPARTMENT_ID group by DEPARTMENT_NAME
Plan hash value: 3294250112
-------------------------------------------------------------------------------------------------------
| Id  | Operation             | Name        | Starts | E-Rows | A-Rows |   A-Time   | Buffers |
-------------------------------------------------------------------------------------------------------
|   1 |  HASH GROUP BY            |         |      1 |     27 |     11 |00:00:00.01 |     219 |
|   2 |   NESTED LOOPS            |         |      1 |    106 |    106 |00:00:00.01 |     219 |
|   3 |    TABLE ACCESS FULL          | EMPLOYEES   |      1 |    107 |    107 |00:00:00.01 |       7 |
|   4 |    TABLE ACCESS BY INDEX ROWID| DEPARTMENTS |    107 |      1 |    106 |00:00:00.01 |     212 |
|*  5 |     INDEX UNIQUE SCAN         | DEPT_ID_PK  |    107 |      1 |    106 |00:00:00.01 |     106 |
-------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   5 - access("E"."DEPARTMENT_ID"="D"."DEPARTMENT_ID")
/* 可以从starts列看到某种操作执行了多少次,例如这里的INDEX UNIQUE SCAN为107次 */
/*也可以通过SQL_ID来定位计划信息 */
SQL> select t.*
from v$sql s
   table(dbms_xplan.display_cursor(s.sql_id,s.child_number,'ALL IOSTATS LAST')) t where s.sql_id = '&SQL_ID' ;
Enter value for sql_id: bctzu9xuxay18
old   3:    , table(dbms_xplan.display_cursor(s.sql_id,s.child_number,'ALL IOSTATS LAST')) t where s.sql_id = '&SQL_ID'
new   3:    , table(dbms_xplan.display_cursor(s.sql_id,s.child_number,'ALL IOSTATS LAST')) t where s.sql_id = 'bctzu9xuxay18'
PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------------------------------------------
SQL_ID  bctzu9xuxay18, child number 0
-------------------------------------
select /*+ gather_plan_statistics */ avg(SALARY),DEPARTMENT_NAME from
employees e,departments d where
e.DEPARTMENT_ID=d.DEPARTMENT_ID group by DEPARTMENT_NAME
Plan hash value: 3294250112
---------------------------------------------------------------------------------------------------------------------------------------
| Id  | Operation             | Name        | Starts | E-Rows |E-Bytes| Cost (%CPU)| E-Time   | A-Rows |   A-Time   | Buffers |
---------------------------------------------------------------------------------------------------------------------------------------
|   1 |  HASH GROUP BY            |         |      1 |     27 |   621 |     5  (20)| 00:00:01 |     11 |00:00:00.01 |     219 |
|   2 |   NESTED LOOPS            |         |      1 |    106 |  2438 |     4   (0)| 00:00:01 |    106 |00:00:00.01 |     219 |
|   3 |    TABLE ACCESS FULL          | EMPLOYEES   |      1 |    107 |   749 |     3   (0)| 00:00:01 |    107 |00:00:00.01 |       7 |
|   4 |    TABLE ACCESS BY INDEX ROWID| DEPARTMENTS |    107 |      1 |    16 |     1   (0)| 00:00:01 |    106 |00:00:00.01 |     212 |
|*  5 |     INDEX UNIQUE SCAN         | DEPT_ID_PK  |    107 |      1 |       |     0   (0)|          |    106 |00:00:00.01 |     106 |
---------------------------------------------------------------------------------------------------------------------------------------
Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------
   1 - SEL$1
   3 - SEL$1 / E@SEL$1
   4 - SEL$1 / D@SEL$1
   5 - SEL$1 / D@SEL$1
Predicate Information (identified by operation id):
---------------------------------------------------
   5 - access("E"."DEPARTMENT_ID"="D"."DEPARTMENT_ID")
Column Projection Information (identified by operation id):
-----------------------------------------------------------
   1 - "DEPARTMENT_NAME"[VARCHAR2,30], AVG("SALARY")[22]
   2 - "SALARY"[NUMBER,22], "DEPARTMENT_NAME"[VARCHAR2,30]
   3 - "SALARY"[NUMBER,22], "E"."DEPARTMENT_ID"[NUMBER,22]
   4 - "DEPARTMENT_NAME"[VARCHAR2,30]
   5 - "D".ROWID[ROWID,10]
SQL> alter session set statistics_level=ALL;
Session altered.
/* 在session级别设置statistics_level为ALL,可以为我们提供更为详尽的执行统计信息 */

本文转自maclean_007 51CTO博客,原文链接:http://blog.51cto.com/maclean/1277730

Gather more plan statistics by gather_plan_statistics hint相关推荐

  1. cannot fetch plan for SQL_ID: 5qgz1p0cut7mx, CHILD_NUMBER: 0

    SQL> set serveroutput off    --一定要关 SQL>  select * from table(dbms_xplan.display_cursor(null,n ...

  2. Oracle中Hint深入理解(原创)

    http://czmmiao.iteye.com/blog/1478465 Hint概述  基于代价的优化器是很聪明的,在绝大多数情况下它会选择正确的优化器,减轻了DBA的负担.但有时它也聪明反被聪明 ...

  3. oracle中hint 详解

    Hint概述 基于代价的优化器是很聪明的,在绝大多数情况下它会选择正确的优化器,减轻了DBA的负担.但有时它也聪明反被聪明误,选择了很差的执行计划,使某个语句的执行变得奇慢无比. 此时就需要DBA进行 ...

  4. hint java_Oracle中Hint深入理解

    Hint概述基于代价的优化器是很聪明的,在绝大多数情况下它会选择正确的优化器,减轻了DBA的负担.但有时它也聪明反被聪明误,选择了很差的执行计划,使某个语句的执行变得奇慢无比. 此时就需要DBA进行人 ...

  5. PLSQL_性能优化系列15_Oracle Explain Plan解析计划解读

    2014-12-19 Created By BaoXinjian 一.摘要 在SQL语句的执行计划中,包含很多字段项和很多模块,其不同字段代表了不同的含义且在不同的情形下某些字段.模块显示或不显示,下 ...

  6. 19c 新特性: Hint Usage Reports详解

    老张拉呱:thomas zhang,甲骨文云平台事业部资深技术顾问,2008年加入甲骨文公司数据库咨询部门,10+年甲骨文解决方案咨询支持经验,资深系统工程师.Oracle OCM认证专家,具有丰富的 ...

  7. Oracle Explan

    ORACLE EXPLAIN PLAN 在ORACLE数据库中,需要对SQL语句进行优化的话需要知道其执行计划,从而针对性的进行调整.ORACLE的执行计划的获得有几种方法,下面就来总结下 1.EXP ...

  8. Oracle 执行计划

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

  9. Oracle 分析及动态采样

    之前在说Oracle Optimizer中的CBO时讲到,当表没有做分析的时候,Oracle 会使用动态采样来收集统计信息. 获取准确的段对象(表,表分区,索引等)的分析数据,是CBO存在的基石,CB ...

  10. SQL调优:带函数的谓词导致CBO Cardinality计算误差

    今天处理了这样一问题,where条件中存在函数fun(date)<to_date('9999-01-01','YYYY-MM-DD')这样的无实际意义谓词,导致CBO计算基数时cardinali ...

最新文章

  1. 拨号用户如何使用局域网上的LinuxSamba服务器
  2. linux 系统装中文输入法 fcitx
  3. 【技术原创】MailEnable开发指南
  4. 中国科技大学校长朱清时:我的两次“错误”选择
  5. 基于业务解释的特征重要性计算
  6. Yii的路由机制分析
  7. 【数据结构与算法】二叉树
  8. qml 不刷新 放大还原_【显示器选择详解】你的电脑能否带动高分辨率,高刷新率显示器?...
  9. 中国内部物流输送系统市场趋势报告、技术动态创新及市场预测
  10. 逻辑运算符 用法解释
  11. 男人想要成功--必须明白的22个道理
  12. docker compose入门
  13. java实现word转pdf文件下载
  14. 前端汉字encode_js编码转码中文
  15. Android JetPack组件之DataBinding的使用详解
  16. 微信小程序的websocket使用stomp协议--简单实用的npm包
  17. 下面不是计算机网络面临的主要威胁是,网络安全复习题2
  18. 全国车牌归属地对应表 - sqlserver
  19. docker删除无用容器、镜像
  20. Uncaught ReferenceError: is not defined at HTMLAnchorElement.onclick

热门文章

  1. MVC整体流程机制原理概述
  2. WebApplication(Web应用程序)和WebSite(网站)的区别
  3. OpenCV的第一个小程序:读取图像并显示
  4. Colaboratory平台+Mask R-CNN进行模型训练和实例分割
  5. 《剑指offer》面试题27——二叉搜索树与双向链表(C++)
  6. keras中无法用save保存模型的问题
  7. 【空间分析】0 基本空间分析工具
  8. ElasticSearch解决中文搜索只能搜索单个字符的问题
  9. Java 单向链表翻转
  10. Android Measure测量实际应用心得(一)