介绍几个Oracle本身就带的优秀的查看SQL执行计划的工具。
1.PLAN_TABLE。PLAN_TABLE是一个表,可以用来存放解释执行计划信息。数据库刚安装的时候并没有这个表,而是需要运行$ORACLE_HOME/rdbms/admin/utlxplan.sql或者
ORACLE_HOMErdmbsutlxplan.sql来创建。创建完执行计划表之后,就可以在SQLPLUS中运行SET AUTOTRACE ON,然后再运行想要查看执行计划的SQL语句就可以了。如果只想查看执行计划,而不看具体的查询返回的数据,可以用SET AUTOTRACE TRACEONLY。这两个方法都是要求语句真正执行一遍,可能速度很慢,如果只想看ORACLE是采用什么执行计划,而不真正执行语句,可以使用explain plan命令:具体如下:
Explain plan {set statement_id='<your ID>'}
{into table <table name>}
for <SQL statement>
上面的语句运行后,会在plan_table或者指定的表中存放sql语句的执行计划。可以用下面的语句来查看执行计划:
set pagesize 9999;
select lpad(' ',2*(level-1))||operation operation,options,
object_name,position from plan_table where
statement_id='statement_id';
2.TKPROF工具
TKPROF工具用来跟踪SQL执行计划、执行细节等内容的一个工具软件。该软件对通过设置了SQL_TRACE=TRUE而生成的跟踪文件进行格式化,使之成为可以理解的文件,包括语句执行信息。查看TKPROF帮助可以单独使用该命令就可以列出这个程序的版主信息了。
SQL_TRACE可以在当前SESSION中设置:ALTER SESSION SET SQL_TRACE=TRUE,也可以在其他的会话中设置。如果想在其他的会话中设置,可以用DBMS_SYSTEM的SET_SQL_TRACE_IN_SESSION函数,也可以用DBMS_SUPPORT.START_TRACE_IN_SESSION函数。设置好之后,就可以让相应的程序运行一些语句或者正常工作,ORACLE就会在user_dump_dest下生成跟踪文件。跟踪结束后,应该结束跟踪。DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION函数提供结束跟踪功能;或者使用DBMS_SUPPORT.STOP_TRACE_IN_SESSION来结束跟踪。注意,DBMS_SUPPORT并没有默认安装,为了使用该包,需要运行/rdbms/admin/dbmssupp.sql和/rdbms/admin/prvtsupp.plb,而且这两个包的使用都应该在SYS模式下。
1.PLAN_TABLE。PLAN_TABLE是一个表,可以用来存放解释执行计划信息。数据库刚安装的时候并没有这个表,而是需要运行$ORACLE_HOME/rdbms/admin/utlxplan.sql或者
ORACLE_HOMErdmbsutlxplan.sql来创建。创建完执行计划表之后,就可以在SQLPLUS中运行SET AUTOTRACE ON,然后再运行想要查看执行计划的SQL语句就可以了。如果只想查看执行计划,而不看具体的查询返回的数据,可以用SET AUTOTRACE TRACEONLY。这两个方法都是要求语句真正执行一遍,可能速度很慢,如果只想看ORACLE是采用什么执行计划,而不真正执行语句,可以使用explain plan命令:具体如下:
Explain plan {set statement_id='<your ID>'}
{into table <table name>}
for <SQL statement>
上面的语句运行后,会在plan_table或者指定的表中存放sql语句的执行计划。可以用下面的语句来查看执行计划:
set pagesize 9999;
select lpad(' ',2*(level-1))||operation operation,options,
object_name,position from plan_table where
statement_id='statement_id';
2.TKPROF工具
TKPROF工具用来跟踪SQL执行计划、执行细节等内容的一个工具软件。该软件对通过设置了SQL_TRACE=TRUE而生成的跟踪文件进行格式化,使之成为可以理解的文件,包括语句执行信息。查看TKPROF帮助可以单独使用该命令就可以列出这个程序的版主信息了。
SQL_TRACE可以在当前SESSION中设置:ALTER SESSION SET SQL_TRACE=TRUE,也可以在其他的会话中设置。如果想在其他的会话中设置,可以用DBMS_SYSTEM的SET_SQL_TRACE_IN_SESSION函数,也可以用DBMS_SUPPORT.START_TRACE_IN_SESSION函数。设置好之后,就可以让相应的程序运行一些语句或者正常工作,ORACLE就会在user_dump_dest下生成跟踪文件。跟踪结束后,应该结束跟踪。DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION函数提供结束跟踪功能;或者使用DBMS_SUPPORT.STOP_TRACE_IN_SESSION来结束跟踪。注意,DBMS_SUPPORT并没有默认安装,为了使用该包,需要运行/rdbms/admin/dbmssupp.sql和/rdbms/admin/prvtsupp.plb,而且这两个包的使用都应该在SYS模式下。