暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 19C 提示使用情况报告的用户界面

原创 Asher.HU 2021-02-04
947
19.3.3.2提示使用情况报告的用户界面

该报告包括所有优化程序提示的状态。其他提示的子集,包括PARALLELINMEMORY,也包括在内。

报告访问

默认情况下,提示跟踪处于启用状态。您可以使用以下DBMS_XPLAN功能访问提示使用情况报告

  • DISPLAY
  • DISPLAY_CURSOR
  • DISPLAY_WORKLOAD_REPOSITORY
  • DISPLAY_SQL_PLAN_BASELINE
  • DISPLAY_SQLSET

当您HINT_REPORTformat参数中指定值时,上述功能会生成报告该值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$2T1@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软件包的 更多信息


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论