sql计划特定sql_ID的基线信息

时间:2013-10-04 21:18:13

标签: oracle11g baseline

我们怎样才能看到该优化器目前在sqlplus中针对特定sql_id的SQL计划历史(已接受和未接受的计划)中所有计划的列表?

1 个答案:

答案 0 :(得分: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';