Oracle如何查看sql的真实执行计划

Oracle如何查看sql的真实执行计划,第1张

查询v$sql_plan视图中的实际执行计划

1:在窗口执行下面SQL语句

SELECT ENAME, SAL FROM SCOTTEMP, SCOTTDEPT

WHERE EMPDEPTNO =DEPTDEPTNO

AND   DEPTLOC='CHICAGO';

2:查看执行SQL的SQL_ID

SELECT SQL_ID, SQL_TEXT FROM V$SQL WHERE SQL_TEXT LIKE '%SELECT ENAME, SAL FROM SCOTTEMP, SCOTTDEPT%'

3: 查看v$sql_plan视图

SELECT FROM v$sql_plan WHERE SQL_ID='7m5qbhn98j1xw';

通过v$sql_plan视图查看实际执行计划,其实是不太现实的,因为阅读困难,可读性差,尤其是复杂SQL语句。

1、 查看最近执行的SQL语句

select /recentsql/sSQL_ID,sCHILD_NUMBER,sHASH_VALUE,sADDRESS,sEXECUTIONS,sSQL_TEXT

from v$sql s

where sPARSING_USER_ID = (

select uuser_id from all_users u

where uusername = 'YH_TEST'

) and sCOMMAND_TYPE in (2 ,3, 6,7 ,189)

and upper(sSQL_TEXT) not like upper( '%recentsql%')

2、使用dbms_xplandisplay_cursor查看执行计划,它的用法见笔记 《dbms_xplandisplay_cursor的用法》,

注意了:若dbms_xplandisplay_cursor要以ALLSTATS LAST格式输出的话,/+gather_plan_statistics/这个提示信息放到查询语句中是必须的。

select /+gather_plan_statistics/ /plan_statistics1/ name ,salary from test where name = 't1' ;

SQL server 如何查看执行计划的开销

数据库右键->报表->标准报表->对象执行统计信息,这里面可以看到视图、存储过程等执行情况,很详细。你只要看与索引相关的视图和存储过程的执行情况即可。

标准报表中还有很多其他类报表,也可作为性能优化的依据。

SQL执行计划指的是查看一条SQL语句在数据库中实际执行的时候,一步步的分别都做了什么,具体数据库查看执行计划的 *** 作步骤如下:

1、首先,打开一个的sql server的数据库管理界面当中。

2、然后选中的要执行的sql语句。

3、点击了的菜单中的查询的菜单。

4、点击了查询菜单之后,d出了下拉菜单选中为显示估计的执行计划的选项。

5、然后点击执行计划。

6、可以看到是相关的执行计划的相关的数据。

一在线查看执行计划表

如果PLAN_TABLE表不存在,执行$ORACLE_HOME/rdbms/admin/utlxplansql创建plan_table表。

1explain plan

for

select from

2select from table(DBMS_XPLANDisplay);

二使用oracle第三方工具:

plsql developer(F5)

Toad (Ctrl+E)

三使用SQLPLUS:

如果PLAN_TABLE表不存在,执行$ORACLE_HOME/rdbms/admin/utlxplansql创建plan_table表。

如果PLUSTRACE角色不存在,执行

$ORACLE_HOME/sqlplus/admin/plustrcesql

1sqlplus / as sysdba

set autotrace on;

关于Autotrace几个常用选项的说明:

SET AUTOTRACE OFF ---------------- 不生成AUTOTRACE 报告,这是缺省模式

SET AUTOTRACE ON EXPLAIN ------ AUTOTRACE只显示优化器执行路径报告

SET AUTOTRACE ON STATISTICS -- 只显示执行统计信息

SET AUTOTRACE ON ----------------- 包含执行计划和统计信息

SET AUTOTRACE TRACEONLY ------ 同set autotrace on,但是不显示查询

2执行sql

四sql trace

1alter session set sql_trace=true;

2执行sql

3alter session set sql_trace=false;

4查看相应的sql trace文件。

五诊断事件(10046)

1alter session set events '10046 trace name context forever,level 12';

2执行sql

3alter session set events '10046 trace name context off';

3查看相应的sql trace文件。

可利用TKPROF工具查看跟踪文件

TKPROF是一个用于分析oracle跟踪文件并且产生一个更加清晰合理的输出结果的可执行工具。如果一个系统的执行效率比较低,一个比较好的方法是跟踪用户的会话并且使用TKPROF工具的排序功能格式化输出,从而找出有问题的SQL语句。

TKPROF命令后面的选项及输出文件各个列的含义在这里不做详细的介绍。google一下就会有很多资料。

下面简单描述一下TKPROF工具的使用步骤:

1、在session级别设置sql_trace=true

sys@ORCL>alter session set sql_trace=true;

Session altered

如果要在pl/sql中对session级别设置true,可以使用dbms_system这个包:

sys@ORCL> exec dbms_systemset_sql_trace_in_session(sid,serial#,true);

2、指定一下生成的trace文件的名字,便于查找:

sys@ORCL>alter session set trace file_identifier='yourname';

3、执行SQL语句。

4、利用TKPROF工具格式化输出的trace 文件:

[oracle@q1test01~] $tkprof/oracle/admin/orcl/udump/orcl_ora_10266_yournametrc/oracle/yournametxtexplain=user/pwdaggregate=yessys=nowaits=yessort=fchela

5、查看生成的文件再设置sql_trace=false:

sys@ORCL>alter session set sql_trace=false;

最好是执行后用dbms_xplan看,直接explain

plan

for绑定的sql,执行计划可能不是真正的执行计划

绑定变量你要传变量啊,不传你要使用explain

plan

for查看,是不准的,只有传值的才有peeking

你是说过去对这张表所做的查询的执行计划,这个查不了。如果这个查询很慢(或者特别耗费时间,或者特别耗费cpu资源)那么可能能通过awr报告查到语句(一般时间为1月内或者一周内),如果仅仅想查执行计划,那是不可能的。

以上就是关于Oracle如何查看sql的真实执行计划全部的内容,包括:Oracle如何查看sql的真实执行计划、怎样通过dbvisualler查看sql的执行计划、SQL server 如何查看执行计划的开销等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/10185378.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存