日期:2014-05-16 浏览次数:20474 次
Oracle 生成和显示执行计划的方法
生成执行计划
一条合法的语句在执行之后,就会在内存中至少产生一条执行计划,可以从视图v$sql_plan查询。每一条执行计划对于一个游标。一条语句生产的第一个游标的CHILD_NUMBER(即v$sql_plan中的CHILD_NUMBER)为0,同一条sql语句可能因为环境或版本等其他因素不同而产生不同的执行计划,也就是说一条sql可能有多个CHILD_NUMBER。
除执行过的sql会在内存中生成执行计划外,还可以通过explain plan让优化器对sql语句进行解析,生成查询计划。执行explain plan命令后,oracle会将解释生成的执行计划插入sys.plan_table$(10g之前,表名为plan_table;10g之后,通过公共同义词plan_table指向sys.plan_table$)中。explain plan产生的执行计划不会在语句执行时重用,而是以类似explain plan for<SQL>的形式在缓存中。
显示执行计划
通过DBMS_XPLAN包显示执行计划(推荐)
DBMS_XPLAN含有5个函数用于输出格式化的执行计划,如下:
display:显示explain plan命令解释的执行计划
display_cursor:显示内存中的执行计划
display_awr:awr历史数据中的执行计划
display_sqlset:SQL优化集中语句的执行计划
display_sql_plan_baseline:SQL执行计划基线
display的用法
语法:
DBMS_XPLAN.DISPLAY( table_name IN VARCHAR2 DEFAULT 'PLAN_TABLE', statement_id IN VARCHAR2 DEFAULT NULL, format IN VARCHAR2 DEFAULT 'TYPICAL', filter_preds IN VARCHAR2 DEFAULT NULL);参数:
Parameter | Description |
---|---|
|
存储查询计划的表名,默认值为PLAN_TABLE |
|
要显示查询计划的SQL语句的ID,如果为空,就会获取最近一条被解释的语句 |
|
输出格式,有以下几种预定义的格式可选择,还可以自定义(这里不多说):
|