19.3.3.2提示使用情况报告的用户界面
该报告包括所有优化程序提示的状态。其他提示的子集,包括PARALLEL和INMEMORY,也包括在内。
报告访问
默认情况下,提示跟踪处于启用状态。您可以使用以下DBMS_XPLAN功能访问提示使用情况报告:
DISPLAYDISPLAY_CURSORDISPLAY_WORKLOAD_REPOSITORYDISPLAY_SQL_PLAN_BASELINEDISPLAY_SQLSET
当您HINT_REPORT在format参数中指定值时,上述功能会生成报告。该值TYPICAL仅显示最终计划中ALL未使用的提示,而该值同时显示已使用和未使用的提示。
报告格式
假设您解释了以下提示查询:
SELECT /*+ INDEX(t1) FULL(@sel$2 t1) */ COUNT(*)
FROM jobs t1
WHERE t1.job_id IN (SELECT /*+ FULL(t1) */ job_id FROM employees t1);的以下输出DBMS_XPLAN.DISPLAY显示了计划,包括提示报告:
----------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
----------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 17 | 3 (34)| 00:00:01 |
| 1 | SORT AGGREGATE | | 1 | 17 | | |
| 2 | NESTED LOOPS | | 19 | 323 | 3 (34)| 00:00:01 |
| 3 | SORT UNIQUE | | 107 | 963 | 2 (0)| 00:00:01 |
| 4 | TABLE ACCESS FULL| EMPLOYEES | 107 | 963 | 2 (0)| 00:00:01 |
|* 5 | INDEX UNIQUE SCAN | JOB_ID_PK | 1 | 8 | 0 (0)| 00:00:01 |
----------------------------------------------------------------------------------
Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------
1 - SEL$5DA710D3
4 - SEL$5DA710D3 / "T1"@"SEL$2"
5 - SEL$5DA710D3 / "T1"@"SEL$1"
Predicate Information (identified by operation id):
---------------------------------------------------
5 - access("T1"."JOB_ID"="JOB_ID")
Column Projection Information (identified by operation id):
-----------------------------------------------------------
1 - (#keys=0) COUNT(*)[22]
2 - (#keys=0)
3 - (#keys=1) "JOB_ID"[VARCHAR2,10]
4 - (rowset=256) "JOB_ID"[VARCHAR2,10]
Hint Report (identified by operation id / Query Block Name / Object Alias):
Total hints for statement: 3 (U - Unused (1))
---------------------------------------------------------------------------
4 - SEL$5DA710D3 / "T1"@"SEL$2"
U - FULL(t1) / hint overridden by another in parent query block
- FULL(@sel$2 t1)
5 - SEL$5DA710D3 / "T1"@"SEL$1"
- INDEX(t1)报告标题显示报告中的提示总数。在这种情况下,该语句总共包含3条提示。如果提示未使用,未解决或存在语法错误,则标题将指定其编号。在这种情况下,只有1个提示未使用。
该报告在计划中显示的对象(例如查询块和表)下显示提示。每个对象之前都有一个数字,用于标识计划中对象首次出现的行。例如,前面的报告显示了适用于以下不同对象的提示:T1@SEL$2和T1@SEL$1。该表T1@SEL$2出现在SEL$5DA710D3计划第4行的查询块中。该表T1@SEL$1出现在计划第5行的同一查询块中。
提示可能指定不正确或与最终计划中不存在的对象相关联。如果查询块未出现在最终计划中,则报告将为其分配行号0。在前面的示例中,没有任何提示的行号为0,因此所有查询块都出现在最终计划中。
该报告显示提示文本。该提示可能还具有以下注释之一:
E表示语法错误。N表示未解决的提示。U表示最终计划中未使用相应的提示。
在前面的示例中,U - FULL(t1)指示查询块SEL$5DA710D3出现在最终计划中,但未FULL(t1)应用提示。
在每个对象中,未使用的提示出现在开头,然后是已使用的提示。例如,报告首先显示FULL(t1)未使用的提示,然后FULL(@sel$2 t1)显示已使用的提示。对于许多未使用的提示,该报告解释了为什么优化器未应用提示。在前面的示例中,报告指出FULL(t1)未使用该报告是由于以下原因:hint overridden by another in parent query block。
也可以看看:
Oracle Database PL / SQL软件包和类型参考以了解有关该DBMS_XPLAN软件包的 更多信息




