ers | Reads |------------------------------------------------------------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 1 | | | 3 (100)| | 25 |00:00:00.01 | 3 | 2 ||* 1 | COUNT STOPKEY | | 1 | | | | | 25 |00:00:00.01 | 3 | 2 || 2 | TABLE ACCESS FULL| T1 | 1 | 25 | 54400 | 3 (0)| 00:00:01 | 25 |00:00:00.01 | 3 | 2 |------------------------------------------------------------------------------------------------------------------------------
Starts为该sql执行的次数。E-Rows为执行计划预计的行数。A-Rows为实际返回的行数。A-Rows跟E-Rows做比较,就可以确定哪一步执行计划出了问题。A-Time为每一步实际执行的时间(HH:MM:SS.FF),根据这一行可以知道该sql耗时在了哪个地方。Buffers为每一步实际执行的逻辑读或一致性读。Reads为物理读。OMem、1Mem为执行所需的内存评估值,0Mem为最优执行模式所需内存的评估值,1Mem为one-pass模式所需内存的评估值。0/1/M 为最优/one-pass/multipass执行的次数。
?
4. display_awr 展示awr信息库中的执行计划SELECT * FROM table(DBMS_XPLAN.DISPLAY_AWR('09tr40mjc8vg5'));SELECT * FROM table(DBMS_XPLAN.DISPLAY_AWR('3hxb21q9h4t40',1367077082,null,'all'));
sql_id ? --输入存储在AWR中的sql_id,你可以先查dba_hist_sql_plan,dba_hist_sqltext,看看某个语句属于什么sql_id。plan_hash_value ?--如果是null的话该sql_id所有的执行计划会输出。默认nulldb_id ?--如果忽略,默认就是当前的databaseformat ?--参考display(),还是'basic','typical','all'这样,默认typical
?
1.请确保AWR已经运行。
?
2.权限:用户需要select on DBA_HIST_SQL_PLAN,DBA_HIST_SQLTEXT,V$DATABASE的权限。
3.查sql_id,根据sql文本查出sql_id ,可以从dba_hist_sqltext查。
?
4.来源:展示的执行计划的信息,来源于dba_hist_sql_plan。
?
5.详细:是否可以用allstats这样查看更详细的执行计划,这可能得取决于你当时的sql有没开启手机详细运行时统计信息。
?
5. display_sqlset ? 展示存储在sql turning set中的sql的执行计划。sqlset_name ?specified the name of the SQL tuning set.sql_id ? ?输入存储在sql tuning set中的sql_id,可以从DBA_SQLSET_PLANS看。plan_hash_value ? 如果是null,则该sql_id的所有执行计划会被输出。默认null。format ? ?参考display(),也是'basic','typical','all',默认'typical'sqlset_owner ? ? ?Specifies the owner of the SQL tuning set ?默认当前用户SELECT * FROM table(DBMS_XPLAN.DISPLAY_SQLSET('fwy_sqlset','3hxb21q9h4t40',1367077082,'all','fwy'));
?
6. display_sql_plan_baseline ?展示存储在SPM中的SQL执行计划查看SPM中baseline的执行计划:DBMS_XPLAN.DISPLAY_sql_plan_baselineSELECT * ?FROM table(DBMS_XPLAN.DISPLAY_sql_plan_baseline('SQL_a074c4f7bacd50da','SQL_PLAN_a0x64yyxcun6u06957ae0','ALL')); 这样看也行,就会看这个sql_handle下所有执行计划SELECT * FROM table(DBMS_XPLAN.DISPLAY_sql_plan_baseline(sql_handle => 'SQL_351fadd1a0ec16be' ));SELECT * ?FROM table(DBMS_XPLAN.DISPLAY_sql_plan_baseline(plan_name => 'SQL_PLAN_a0x64yyxcun6u06957ae0','ALL'));?
?
格式:sql_handle ?SPM中的sql_handle相当于v$sql中的sql_id,默认Nullplan_name ?SPM中唯一标识一个执行计划,就像v$sql中的plan_hash_value。默认null。如果是null,那么上面的sql_handle就必须指定。format:参考display(),默认typical。执行计划来源于:DBA_SQL_PLAN_BASELINES