0

我们如何查看该优化器当前在 SQL 计划历史记录(已接受和未接受的计划)中针对来自 sqlplus 的特定 sql_id 的所有计划列表?

4

1 回答 1

0

当且仅当计划在计划基线中时,该计划才被接受。语句的计划历史记录包含所有计划,包括已接受和未接受的计划。在优化器在计划基线中生成第一个接受的计划后,每个后续未接受的计划都将添加到计划历史记录中,等待验证,但不在 SQL 计划基线中。

从 Oracle Database 12c 开始,SMB 存储添加到 SQL 语句的计划历史记录中的新计划的计划行。DBMS_XPLAN.DISPLAY_SQL_PLAN_BASELINE函数从SMB获取并显示计划。对于在 Oracle Database 12c 之前创建的计划,该函数必须编译 SQL 语句并生成计划,因为 SMB 不存储行。

显示计划

SELECT PLAN_TABLE_OUTPUT
FROM   V$SQL s, DBA_SQL_PLAN_BASELINES b, 
       TABLE(
         DBMS_XPLAN.DISPLAY_SQL_PLAN_BASELINE(b.sql_handle,b.plan_name,'basic') 
       ) t
WHERE  s.EXACT_MATCHING_SIGNATURE=b.SIGNATURE
AND    b.PLAN_NAME=s.SQL_PLAN_BASELINE
AND    s.SQL_ID='31d96zzzpcys9';
于 2014-08-21T13:22:19.037 回答