Database 我能';无法在prod数据库中获取Oracle执行计划
我使用一个只读的单独帐户(没有DBA权限)连接到生产数据库,无法获取查询的执行计划。当我尝试时:Database 我能';无法在prod数据库中获取Oracle执行计划,database,oracle,sql-execution-plan,Database,Oracle,Sql Execution Plan,我使用一个只读的单独帐户(没有DBA权限)连接到生产数据库,无法获取查询的执行计划。当我尝试时: explain plan for select * from my_table where id = 10; select plan_table_output from table(dbms_xplan.display('plan_table',null,'typical')); 我每次都会对不相关的查询有不同的计划。我猜每秒有太多的查询,以至于该计划立即被其他查询所取代 然后,我尝试添加一
explain plan for
select * from my_table where id = 10;
select plan_table_output from
table(dbms_xplan.display('plan_table',null,'typical'));
我每次都会对不相关的查询有不同的计划。我猜每秒有太多的查询,以至于该计划立即被其他查询所取代
然后,我尝试添加一个“语句ID”:
但我得到了一个错误:
错误:无法获取语句\u id“st1”的计划
在高度并发的数据库中检索执行计划的最简单和一致的方法是什么?如何创建
plan\u表
?它应该是一个全局临时表。您是否以某种方式使用池连接<代码>解释计划不应该是普通应用程序代码的一部分,因此这两种方式都会令人惊讶。如果您想查看实际使用的执行计划,应该使用dbms\u xplan。使用sql\u id
显示光标<代码>解释计划
可以轻松misleading@AndrewSayer我不知道plan_表是如何创建的(这是AWS的Oracle,如果有用的话)。不幸的是,我只是一个凡人(没有特权),不能修改它。这是否意味着有多种方法可以创建此表?等等。。。表是在哪个模式中创建的?在我的只读用户帐户中,还是在主服务帐户中?我怎么知道?你是说sys?我不熟悉AWS是如何设置Oracle的,但基本原理应该与普通Oracle实例类似。temporary
列对此有何说明?同时检查视图all_synonyms
,对于计划表同义词,新版本上的新数据库为您创建一个(作为GTT)
explain plan set statement_id = 'st1' for
select * from my_table where id = 10;
select plan_table_output from
table(dbms_xplan.display('plan_table','st1','typical'));