Home >Database >Mysql Tutorial > ORACLE 深入解析10053事件

ORACLE 深入解析10053事件

WBOY
WBOYOriginal
2016-06-07 17:41:27892browse

新年新说:新年伊始,2012年过去了,我们又踏上了2013年的,回顾2012我们付出了很多,辛勤和汗水换来了知识和友谊,当我们技术成长的时候我才发现长路漫漫,唯心

新年新说:

新年伊始,2012年过去了,我们又踏上了2013年的,回顾2012我们付出了很多,辛勤和汗水换来了知识和友谊,当我们技术成长的时候我才发现长路漫漫,唯心可敬。一份耕耘一份收获,走技术之路是艰辛的 孤独的 漫长的,在此向刚入门的小伙子们,说一说心得体会。做好心理准备,可能你为了小小的虚荣心,为了生活所迫,才走上此路,但你也要走的洒脱 走的稳健,当你站在第一个里程碑时回顾来时路,你会发现你的收获是值得的,你的付出是有意思的,你才能有继续走下去的勇气。我要感谢 Alantany  tigerfish  海哥  张老师  飚哥  寅总 dingjun  晶晶 童mm 蓓蓓 还有 好多好多 帮助过我的人们,我的成长离不开你们的鼓励。飙完泪之后开始上干货吧:)

      

ORACLE 深入解析10053事件

本次我们主要讲解oracle 10053事件和实验,好多朋友可能对这个事件不是很熟悉,因为在日常运维中用到的不是很多。Oracle 10046和10053 都是非官方trace sql的方法,在官方文档上是找不到相关资料的,但在MOS上可以找到。sql_trace是官方推荐的trace sql的方法,在官方文档上是可以查询出来的。

10053事件:用来描述oracle如何选择执行计划的过程,然后输出到trace文件里,共我们参考,因为我们经常看执行计划怎么执行的消耗了哪些资源,而不是常看执行计划怎么选择出来了的。

10053场景:当SQL语句执行时走的是错误的执行计划,而又找不到原因时,这时请用10053来分析一下原因。

10053特点:

(1)只可以了解oracle执行计划的选择过程

(2)无法获知代价的计算公式,因为这是oracle内部的商业机密,美国服务器,而且每个oracle版本的优化器计算公式都不相同差距还是蛮大的,不同版本的同一个语句的代价也不一样,优化器现在还不是很成熟,还有待完善。

(3)在这个里面我们重点要了解的是“代价”是如何计算出来的,然后我们才能了解执行计划是如何选择的。

(4)在10053中可以了解哪些因素影响sql的执行代价

(5)oracle 8i cost等价IO资源消耗   9i以后cost等价IO+CPU+网络+等待事件+其他代价

一般IO资源的权重比较大 CPU权重较小

10053内容:

参数区:初始化参数,隐含参数,这些参数可以左右oracle工作方式

SQL区:执行的SQL语句,是否使用绑定变量,是否进行了转换操作

系统信息区:操作系统统计信息  cpu主频 CPU执行时间 IO寻址时间 单块读时间 多块读时间

对象统计信息区:

数据访问方式:访问方式不一样计算代价的方法也不一样,全表扫描 走索引 多表关联 代价都不同

关联查询:把每张表都作为驱动表去组合,择优选择“代价”最小的关联方式,与哪个表在前无关系

代价的最后修正:oracle会对选择出来的代价再进行最后的修正,使其更准确一些,更合理一些

选择出最终执行计划:这个过程是非常快速的,毫秒级就搞定啦

实验环境

LEO1@LEO1> select * from v$version;                     这是我的oracle edition

BANNER

--------------------------------------------------------------------------------

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

PL/SQL Release 11.2.0.1.0 - Production

CORE    11.2.0.1.0      Production

TNS for Linux: Version 11.2.0.1.0 - Production

NLSRTL Version 11.2.0.1.0 - Production

1.验证全表扫描的成本计算公式,贴出执行计划和计算公式。

LEO1@LEO1> col sname for a20

LEO1@LEO1> col pname for a20

LEO1@LEO1> col pual1 for a30

LEO1@LEO1> col pual2 for a30

LEO1@LEO1> select * from sys.aux_stats$;    查看操作系统统计信息

SNAME              PNAME                  PVAL1    PVAL2

-------------------- -------------------- ---------- ---------------------------------------------------

SYSSTATS_INFO        STATUS                             COMPLETED

SYSSTATS_INFO        DSTART                             08-15-2009 00:49

SYSSTATS_INFO        DSTOP                              08-15-2009 00:49

SYSSTATS_INFO        FLAGS                         1

SYSSTATS_MAIN        CPUSPEEDNW            2657.0122  

SYSSTATS_MAIN        IOSEEKTIM                    10   

SYSSTATS_MAIN        IOTFRSPEED                 4096

SYSSTATS_MAIN        SREADTIM      

SYSSTATS_MAIN        MREADTIM      

SYSSTATS_MAIN        CPUSPEED      

SYSSTATS_MAIN        MBRC      

SYSSTATS_MAIN        MAXTHR

SYSSTATS_MAIN        SLAVETHR

说明

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn