Oracle 如何使v$sql\u计划中的游标保持更长的活动时间

Oracle 如何使v$sql\u计划中的游标保持更长的活动时间,oracle,oracle11g,sql-execution-plan,Oracle,Oracle11g,Sql Execution Plan,我试图分析Oracle数据库中的查询执行计划。我已经准备好了 alter system set statistics_level = all; 这样我可以比较估计基数和时间与实际基数和时间。现在,我运行这个语句是为了显示这些信息 select * from table(dbms_xplan.display_cursor( sql_id => '6dt9vvx9gmd1x', cursor_child_no => 2, FORMAT => 'ALLS

我试图分析Oracle数据库中的查询执行计划。我已经准备好了

alter system set statistics_level = all;
这样我可以比较估计基数和时间与实际基数和时间。现在,我运行这个语句是为了显示这些信息

select * from table(dbms_xplan.display_cursor(
    sql_id => '6dt9vvx9gmd1x', 
    cursor_child_no => 2, 
    FORMAT => 'ALLSTATS LAST'));
但我一直收到这个信息

NOTE: cannot fetch plan for SQL_ID: 6dt9vvx9gmd1x, CHILD_NUMBER: 2 
      Please verify value of SQL_ID and CHILD_NUMBER; 
      It could also be that the plan is no longer in cursor cache (check
      v$sql_plan)
执行查询时,
子单元编号
是正确的。另外,当我在查询的同时运行
dbms\u xplan.display\u cursor
时,我得到了实际的计划。但是我的JDBC连接在执行后立即关闭
PreparedStatement
,所以这可能就是执行计划从
v$sql\u计划中消失的原因


我是否出错,或者如何在执行后分析估计值/实际值?

增加共享池以为游标创建更多缓存空间。
如果在11g中,使用优化器捕获sql计划基线捕获基线中的sql计划。这将计划存储在dba_sql_plan_基线中。

您可以始终固定光标,这在11g中是新的-

dbms_shared_pool.keep ('[address, hash_value from v$open_cursor]', 'C');

很好,我不知道。我猜您必须使用
dbms\u shared\u pool.purge
?是的。或者关闭实例。它不会自动重新输入。啊,我想我更喜欢
清除
而不是关闭它:)