dbms_xplan包的输出

来源:互联网 发布:微信为什么要封淘宝客 编辑:程序博客网 时间:2024/05/19 05:38
dbms_xplan包能够显示存储在三个不同地方的执行计划:plan_table,library cache,awr中。 下面分别简单介绍display函数,display_cursor函数,display_awr函数的几个参数输入和基本用法:

display函数(搭配explain plan使用)的参数输入:

1. table_name: 默认为plan_table。

2. statement_id: 默认为NULL,在默认情况下,显示最近插入plan_table中的执行计划。

3. format:取值包括,basic,typical,serial,all和advance,默认值是typical, advance则是显示所有信息。

4. filter_preds: 默认值为NULL,指定在plan_table中添加一个约束。从Oracle 10gR2开始用这个参数。

使用display函数,调用者只需要有dbms_xplan包的execute权限和计划表的SELECT权限。

注意一点:无论何时只要包含绑定变量,explain plan产生的执行计划都是不准确的。

例子:

select * from table(dbms_xplan.display(NULL,NULL,'ADVANCE',NULL));

or

select * from table(dbms_xplan.display(NULL,NULL,'basic+predicate',NULL));

display_cursor函数的参数输入(不需要explain plan搭配使用):

display_cursor返回存储在library_cache中的执行计划,这个函数从Oracle 10g开始可以使用。

1. sql_id: 指定被返回执行计划的SQL语句的父游标,默认值是NULL,表示当前会话所执行的最后一条SQL语句的执行计划被返回。

2. cursor_child_no: 表示这个父游标下的子游标的序号,默认值为0,如果指定为NULL,则表示对应sql_id所指的父游标下所有子游标的执行计划都将被返回。

3. format:同display函数,默认值仍然为Typical, 如果我们通过设置STATSTICS_LEVEL=ALL或者在sql语句中加/*+gather_plan_statistics*/之类的hints的话,还可以显示更多的信息,比如E-ROWS和A-ROWS,等等。

使用display_cursor函数,调用者需要对v$session,v$sql,v$sql_plan和v$sql_plan_statistics_all有select权限,同时角色select_catalog_role和select any dictionary权限也要授予给调用者

例子:

SELECT * FROM table (dbms_xplan.display_cursor('2345wef23rfds',NULL,'Typical'));
SELECT * FROM table(dbms_xplan.display_curso (NULL,NULL,'iostats last'));
SELECT * FROM table(dbms_xplan.display_cursor(NULL,NULL,'runstats_last'));
SELECT * FROM table(dbms_xplan.display_cursor(NULL,NULL,'memstats last'));
SELECT * FROM table(dbms_xplan.display_cursor(NULL,NULL,'allstats last'));
SELECT * FROM table(dbms_xplan.display_cursor(NULL,NULL,'iostats'));
SELECT * FROM table(dbms_xplan.display_cursor(NULL,NULL,'runstats_tot'));
SELECT * FROM table(dbms_xplan.display_cursor(NULL,NULL,'memstats'));
SELECT * FROM table(dbms_xplan.display_cursor(NULL,NULL,'allstats'));


display_awr函数的参数输入:

1. sql_id: 指定被返回执行计划的SQL语句的父游标,这个参数没有默认值。

2. plan_hash_value: 指定被返回sql_id的执行计划的哈希值。默认为NULL,表示返回与sql_id参数指定的父游标相关的所有执行计划都会返回。

3. db_id:默认为NULL,表示当前数据库

4. format: 同display函数,默认值仍然为Typical

使用display_awr函数,必须要引诱dba_hist_sql_plan,dba_hist_sql_text的select权限,同时如果没有指定db_id,还必须要有v$database的select权限,通过要授予select_catalog_role角色。

例子:

select * from table (dbms_xplan.display_awr('2345wef23rfds',NULL,NULL,'BAISC'));

or

select * from table (dbms_xplan.display_awr('2345wef23rfds',2343512356,NULL,'basic'));


转自:http://blog.csdn.net/dazhabai/article/details/6681846

原创粉丝点击