查询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 如何查看执行计划的开销等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)