oracle获取SQL语句的执行计划(转)
--你手动执行一遍的资源消耗成本不高,则可以
set long 9999 set line 250 set autotrace traceonly <执行你的sql> 如果这个sql有绑定变量,则按下面例子样子改 var x number; exec :x := 2; select number from table1 where tbname = :x
--通过awr看到了sql_id,则可以
--1.从内存的share pool中提取执行计划
set long 9999 set line 250 select * from TABLE(dbms_xplan.display_cursor('SQL_ID'));
--2.从awr的历史执行计划表中提取
select * from table(dbms_xplan.display_awr('SQL_ID'));
--3.生成一个awrsql的报告
SQL> @?/rdbms/admin/awrsqrpt
在提示中输入你的sql_id
--flush 单个语句的执行计划
当你通过例如降低高水位+执行统计信息收集之后,但是执行计划还未改变,可以通过下列语句把原来的执行计划刷出内存,再重新执行一遍sql就好啦~
--先找出地址和hash值
select a.sql_text,a.version_count,a.executions,a.address,a.hash_value from v$sqlarea a where a.sql_id='apkqt0cs3tmkz';
--执行flush
exec sys.dbms_shared_pool.purge('&address,&hash_value','c');

浙公网安备 33010602011771号