gather_plan_statistics执行方式
真实执行计划
--加收集执行计划和统计信息的hint
alter session set statistics_level=ALL;
/*+ gather_plan_statistics */
select * from table(dbms_xplan.display_cursor(NULL,NULL,'ALLSTATS LAST'));
创建测试表及sql
create table t1020 as select * from dba_objects;
create table t1020_B as select * from dba_objects;
create index index_t1020_B on t1020_B(object_name) online;
select /*+ gather_plan_statistics */ count(A.object_id) from t1020 A ,t1020_B B where A.object_name=b.object_name and a.object_type='TABLE';
gather_plan_statistics示例
SYS@db11g> alter session set statistics_level=ALL;
Session altered.
SYS@db11g> select /*+ gather_plan_statistics */ count(A.object_id) from t1020 A ,t1020_B B where A.object_name=b.object_name;
COUNT(A.OBJECT_ID)
------------------
157565
SYS@db11g> select * from table(dbms_xplan.display_cursor(NULL,NULL,'ALLSTATS LAST'));
PLAN_TABLE_OUTPUT
-----------------------------------------------------------------------------------------------------------------------------------
SQL_ID 9wyd2dfnnkawr, child number 1
-------------------------------------
select /*+ gather_plan_statistics */ count(A.object_id) from t1020 A
,t1020_B B where A.object_name=b.object_name
Plan hash value: 294851109
-----------------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers | OMem | 1Mem | Used-Mem |
-----------------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 1 |00:00:00.08 | 1679 | | | |
| 1 | SORT AGGREGATE | | 1 | 1 | 1 |00:00:00.08 | 1679 | | | |
|* 2 | HASH JOIN | | 1 | 1442K| 157K|00:00:00.07 | 1679 | 6292K| 1707K| 8938K (0)|
| 3 | INDEX FAST FULL SCAN| INDEX_T1020_B | 1 | 77640 | 86463 |00:00:00.01 | 441 | | | |
| 4 | TABLE ACCESS FULL | T1020 | 1 | 89813 | 86463 |00:00:00.01 | 1238 | | | |
-----------------------------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - access("A"."OBJECT_NAME"="B"."OBJECT_NAME")
Note
-----
- dynamic sampling used for this statement (level=2)
26 rows selected.
输出解释
- Id: 每个执行计划步骤的唯一标识符,用于标识计划的特定部分。
- Operation: 描述此步骤的执行操作,例如 SELECT STATEMENT、SORT AGGREGATE、HASH JOIN、INDEX FAST FULL SCAN、TABLE ACCESS FULL 等。
- Name: 涉及的数据库对象名称(例如索引或表名),在此例中是 INDEX_T1020_B 或 T1020。
- Starts: 此操作被执行的次数。这在分析执行计划的行为时非常有用,例如了解一个步骤是否在循环中多次执行。
- E-Rows: 优化器估计的输出行数。
- A-Rows: 实际生成的输出行数。
- A-Time: 实际耗费的时间,以 hh:mm:ss.ff 格式显示。
- Buffers: 执行此操作过程中所访问的内存数据块数量,作为缓存利用的指标。
- OMem: 操作内存指示,显示操作的内存使用描述符,最大内存使用量。
- 1Mem: 单个内存分配的指示器,典型的内存使用量。
- Used-Mem: 描述实际使用的内存,包括内存分配和上限(括号中的数字为未使用内存)。