切换导航
首页
技术问答
编程语言
前端开发
移动开发
开发工具
程序设计
行业应用
CMS系统
服务器
频道导航
▸ PHP
▸ Java
▸ Java SE
▸ Python
▸ C#
▸ C&C++
▸ Ruby
▸ VB
▸ asp.Net
▸ Go
▸ Perl
▸ netty
▸ Django
▸ Delphi
▸ Jsp
▸ .NET Core
▸ Spring
▸ Flask
▸ Springboot
▸ SpringMVC
▸ Lua
▸ Laravel
▸ Mybatis
▸ Asp
▸ Groovy
▸ ThinkPHP
▸ Yii
▸ swoole
▸ HTML
▸ HTML5
▸ JavaScript
▸ CSS
▸ jQuery
▸ Bootstrap
▸ Angularjs
▸ TypeScript
▸ Vue
▸ Dojo
▸ Json
▸ Electron
▸ Node.js
▸ extjs
▸ Express
▸ XML
▸ ES6
▸ Ajax
▸ Flash
▸ Unity
▸ React
▸ Flex
▸ Ant Design
▸ Web前端
▸ 微信小程序
▸ 微信公众号
▸ iOS
▸ Android
▸ Swift
▸ Hybrid
▸ Cocos2d-x
▸ Flutter
▸ Xcode
▸ Silverlight
▸ cocoa
▸ Cordova
前端之家
Oracle
Oracle执行计划的6种方法
Oracle执行计划的6种方法
2020-07-24
Oracle
前端之家
前端之家
收集整理的这篇文章主要介绍了
Oracle执行计划的6种方法
,
前端之家
小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_
404
_3@ /*
@H_
404
_3@ 总的结论:
@H_
404
_3@
@H_
404
_3@ 一.
获取
执行计划的6种
方法
(详细步骤已经在每个例子的开头注释部分说明了):
@H_
404
_3@ 1.explainplanfor
获取
;
@H_
404
_3@ 2.setautotraceon;
@H_
404
_3@ 3.statistics_level=all;
@H_
404
_3@ 4.通过dbms_xplan.display_cursor输入
sql
_id参数直接
获取
@H_
404
_3@ 5.10046trace跟踪 @H_
404
_3@ 6.awrsqrpt.
sql
@H_
404
_3@
@H_
404
_3@ 二.适用场合分析 @H_
404
_3@
@H_
404
_3@ 1.如果某
sql
执行非常长时间才会出结果,甚至慢到返回不了结果,这时候看执行计划就只能用
方法
1; @H_
404
_3@ 2.跟踪某条
sql
最简单的
方法
是
方法
1,其次就是
方法
2; @H_
404
_3@ 3.如果想观察到某条
sql
有多条执行计划的情况,只能用
方法
4和
方法
6; @H_
404
_3@ 4.如果
sql
中含有多
函数
,
函数
中套有
sql
等多层递归
调用
,想准确分析,只能使用
方法
5; @H_
404
_3@ 5.要想确保看到真实的执行计划,不能用
方法
1和
方法
2; @H_
404
_3@ 6.要想
获取
表被访问的
次数
,只能使用
方法
3; @H_
404
_3@
@H_
404
_3@
@H_
404
_3@ */
@H_
404
_3@ ----
方法
1(explainplanfor的方式。类似PL
sql
DEVELOPE里的F5)
@H_
404
_3@
@H_
404
_3@ /* @H_
404
_3@ 步骤1:explainplanfor"你的
sql
" @H_
404
_3@ 步骤2:select*fromtable(dbms_xplan.display()); @H_
404
_3@ */
@H_
404
_3@ /*
@H_
404
_3@ 优点:1.无需真正执行,快捷方便 @H_
404
_3@
@H_
404
_3@ 缺陷:1.没有
输出
运行时的相关
统计
信息(产生多少逻辑读,多少次递归
调用
,多少次物理读的情况); @H_
404
_3@ 2.无法判断是处理了多少行; @H_
404
_3@ 3.无法判断表被访问了多少次。 @H_
404
_3@
@H_
404
_3@ 确实啊,这毕竟都没有真正执行又如何得知真实运行产生的
统计
信息。 @H_
404
_3@ */
@H_
404
_3@ ----
方法
2(setautotraceon方式)
@H_
404
_3@ /* @H_
404
_3@ 步骤1:setautotraceon @H_
404
_3@ 步骤2:在此处执行你的
sql
即可,后续自然会有结果
输出
@H_
404
_3@
@H_
404
_3@ 另,有如下几种方式: @H_
404
_3@ setautotraceon(得到执行计划,
输出
运行结果) @H_
404
_3@ setautotracetraceonly(得到执行计划,不
输出
运行结果) @H_
404
_3@ setautotracetraceonlyexplain(得到执行计划,不
输出
运行结果和
统计
信息部分,仅展现执行计划部分) @H_
404
_3@ setautotracetraceonlstatistics(不
输出
运行结果和执行计划部分,仅展现
统计
信息部分) @H_
404
_3@ */
@H_
404
_3@ /*
@H_
404
_3@ --优点:1.可以
输出
运行时的相关
统计
信息(产生多少逻辑读,多少次递归
调用
,多少次物理读的情况); @H_
404
_3@ 2.虽然必须要等语句执行完毕后才可以
输出
执行计划,但是可以有traceonly开关来控制返回结果不打屏
输出
。 @H_
404
_3@
@H_
404
_3@ --缺陷:1.必须要等到语句真正执行完毕后,才可以出结果; @H_
404
_3@ 2.无法看到表被访问了多少次。 @H_
404
_3@
@H_
404
_3@ */
@H_
404
_3@ ----
方法
3(statisticslevel=all的方式)
@H_
404
_3@ /* @H_
404
_3@ 步骤1:altersessionsetstatistics_level=all; @H_
404
_3@ 步骤2:在此处执行你的
sql
@H_
404
_3@ 步骤3:select*fromtable(dbms_xplan.display_cursor(null,null,'allstatslast')); @H_
404
_3@
@H_
404
_3@ 另注: @H_
404
_3@
@H_
404
_3@ 1.如果你用/*+gather_plan_statistics*/的
方法
,可以省略步骤1,直接步骤2,3。 @H_
404
_3@ 2.关键字解读(其中OMem、1Mem和User-Mem在后续的课程中会陆续见到): @H_
404
_3@ Starts为该
sql
执行的
次数
。 @H_
404
_3@ E-Rows为执行计划预计的行数。 @H_
404
_3@ A-Rows为实际返回的行数。A-Rows跟E-Rows做比较,就可以确定哪一步执行计划出了问题。 @H_
404
_3@ A-Time为每一步实际执行的时间(HH:MM:SS.FF),根据这一行可以知道该
sql
耗时在了哪个地方。 @H_
404
_3@ Buffers为每一步实际执行的逻辑读或一致性读。 @H_
404
_3@ Reads为物理读。 @H_
404
_3@ OMem:当前操作完成所有内存工作区(WorkAera)操作所总共使用私有内存(PGA)中工作区的大小, @H_
404
_3@ 这个数据是由优化器
统计
数据以及前一次执行的
性能
数据估算得出的 @H_
404
_3@ 1Mem:当工作区大小无法满足操作所需的大小时,需要将部分数据写入临时磁盘空间中(如果仅需要写入一次就可以完成操作, @H_
404
_3@ 就称一次通过,One-Pass;否则为多次通过,Multi_Pass).该列数据为语句最后一次执行中,单次写磁盘所需要的内存 @H_
404
_3@ 大小,这个由优化器
统计
数据以及前一次执行的
性能
数据估算得出的 @H_
404
_3@ User-Mem:语句最后一次执行中,当前操作所使用的内存工作区大小,括号里面为(发生磁盘交换的
次数
,1次即为One-Pass, @H_
404
_3@ 大于1次则为Multi_Pass,如果没有使用磁盘,则
显示
OPTIMAL) @H_
404
_3@ OMem、1Mem为执行所需的内存评估值,0Mem为最优执行模式所需内存的评估值,1Mem为one-pass模式所需内存的评估值。 @H_
404
_3@ 0/1/M为最优/one-pass/multipass执行的
次数
。Used-Mem耗的内存 @H_
404
_3@
@H_
404
_3@ */
@H_
404
_3@ ----
方法
4(知道
sql
_id后,直接带入的方式,简单,就步骤1)
@H_
404
_3@
@H_
404
_3@
@H_
404
_3@ /* @H_
404
_3@
@H_
404
_3@ 步骤1:select*fromtable(dbms_xplan.display_cursor('&sq_id'));(该
方法
是从共享池里得到) @H_
404
_3@
@H_
404
_3@ 注: @H_
404
_3@ 1.还有一个
方法
,select*fromtable(dbms_xplan.display_awr('&sq_id'));(这是awr
性能
视图里
获取
到的) @H_
404
_3@ 2.如果有多执行计划,可以用类似
方法
查出 @H_
404
_3@ select*fromtable(dbms_xplan.display_cursor('cyzznbykb509s',0)); @H_
404
_3@ select*fromtable(dbms_xplan.display_cursor('cyzznbykb509s',1)); @H_
404
_3@
@H_
404
_3@ */
看懂执行计划:
查看视频教程地址:
http://www.tudou.com/programs/view/9HohzhJQZaI
前半部分如何
查询
执行计划
到 42分50秒:左右开始将执行计划的树形结构。隐藏列,每列的名字,含义。
85分24秒 讲实例
上一篇:Oracle归档日志满后导致远程访问失
下一篇:Oracle导入dmp文件还原数据库
猜你在找的Oracle相关文章
[Oracle]记一次由sequence引发的enq sv-contention等待事件
数据库版本:11.2.0.4 RAC(1)问题现象从EM里面可以看到,在23号早上8:45~8:55时,数据库...
作者:前端之家 时间:2021-02-21
oracle统计信息的锁定与解锁
(一)问题背景最近在对一个大约200万行数据的表查看执行计划时,发现存在异常,理论上应该...
作者:前端之家 时间:2021-02-21
【转】RMAN删除过期备份或非过期备份
(一)删除备份--DELETE命令用于删除RMAN备份记录及相应的物理文件。当使用RMAN执行备份操...
作者:前端之家 时间:2021-02-21
数据恢复顾问(DRA)
(1)DRA介绍 数据恢复顾问(Data Recovery Advise)是一个诊断和修复数据库的工具,DRA能...
作者:前端之家 时间:2021-02-21
RMAN备份与恢复(一)--认识RMAN
RMAN(Recovery Manager)是Oracle恢复管理器的简称,是集数据库备份(backup)、修复(re...
作者:前端之家 时间:2021-02-21
RMAN备份与恢复(二)--RMAN常用操作学习
(1)连接目标数据库 在RMAN中可以建立与目标数据库或恢复目录数据库的连接。与目标数据库...
作者:前端之家 时间:2021-02-21
ORA-00245问题总结
(1)问题描述 在进行数据库归档备份时(备份归档日志文件和控制文件),有时成功,有时失...
作者:前端之家 时间:2021-02-21
使用RMAN对数据文件进行恢复
(1)备份数据库 在使用RMAN进行数据库恢复之前,先用RMAN进行全库备份 (2)删除数据文件...
作者:前端之家 时间:2021-02-21
Oracle使用fy_recover_data恢复truncate删除的数据
(一)truncate操作概述在生产中,truncate是使用较多的命令,在使用不当的情况下,往往会造...
作者:前端之家 时间:2021-02-21
备份与恢复(四)--RMAN使用恢复目录catalog来保存档案资料库
(一)恢复目录概述RMAN档案资料库用于存储数据库备份、修复以及恢复所需的信息。这些信息...
作者:前端之家 时间:2021-02-21
编程分类
MySQL
MsSQL
Oracle
Sqlite
Postgre SQL
Mariadb
MongoDB
NoSQL
HBase
JDBC
最新文章
• [Oracle]记一次由sequence
• oracle统计信息的锁定与解
• 【转】RMAN删除过期备份或
• 数据恢复顾问(DRA)
• RMAN备份与恢复(一)--认
• RMAN备份与恢复(三)--RM
• RMAN备份与恢复(二)--RM
• ORA-00245问题总结
• 使用RMAN对数据文件进行恢
• Oracle使用fy_recover_dat
热门标签
更多 ►
undo日志
persistent-c
mysql-error-
postal-code
sql-match-al
mysql-5.6
mysql-8.0
database-tri
安装路径
系统错误
data_dir
丢失文件
主从同步
sql_mode
数据库目录
匿名用户
character_se
ID归零
数据库位置
查询表
重复字段
查询字段
截断日志
SUSPECT
7391
Remote Serve
Linked Serve
玄学问题
登录不上
开启远程访问