我们如何查看该优化器当前在 SQL 计划历史记录(已接受和未接受的计划)中针对来自 sqlplus 的特定 sql_id 的所有计划列表?
问问题
1444 次
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 回答