我们怎样才能看到该优化器目前在sqlplus中针对特定sql_id的SQL计划历史(已接受和未接受的计划)中所有计划的列表?
答案 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';