一. 10053事件 当一个SQL出现性能问题的时候,可以使用SQL_TRACE 或者 10046事件来跟踪SQL. 通过生成的trace来了解SQL的执行过程. 我们在查看一条SQL的执行计划的时候,只能看到CBO 最终告诉我们的执行计划结果,但是不知道CBO 是根据什么来做的. 如果遇到了执行计划失真,如:一个SQL语句,很明显oracle应该使用索引,但是执行计划却没有使用索引.无法进行分析判断. 而10053事件就提供了这样的功能.它产生的trace文件提供了Oracle如何选择执行计划…
Oracle 的事件很多. 具体参考blog: Oracle 跟踪事件 set event 转摘:http://blog.csdn.net/tianlesoftware/archive/2009/12/13/4977827.aspx 10046 事件主要用来跟踪SQL语句,它并不是ORACLE 官方提供给用户的命令,在官方文档上也找不到事件的说明信息. 但是用的却比较多,因为10046事件获取SQL的信息比SQL_TRACE 更多. 更有利于我们对SQL的判断. 10046 事件按照收集信息内容…
一. SQL_TRACE 当SQL语句出现性能问题时,我们可以用SQL_TRACE来跟踪SQL的执行情况,通过跟踪,我们可以了解一条SQL或者PL/SQL包的运行情况,SQL_TRACE命令会将SQL执行的整个过程输出到一个trace文件中,我们可以读这个trace 文件来了解在这个SQL执行过程中Oracle 都做了哪些操作: a.SQL是如何操作数据的.b.SQL执行过程中产生了那些等待时间.c.SQL执行中消耗了多少资源.d.SQL的实际执行计划.e.SQL产生的递归语句. 可以通过sql…
优化器生成正确执行计划的前提条件是要有正确的统计信息,不准确的统计信息往往会导致错误的执行计划.当通过SQL和基数推断出的执行计划和实际执行计划不同时,就可以借助10053事件.10053事件是用来诊断优化器如何估算成本和选择执行计划的,用它产生的trace文件提供了Oracle如何选择执行计划,为什么会得到这样的执行计划信息.和10046事件类似,它主要用于特殊情况下的分析和诊断. 1.测试环境:SQL> select * from v$version;BANNER--------------…
思维导图 10053事件概述 我们在查看一条SQL语句的执行计划时,只看到了CBO最终告诉我们的执行计划结果,但是我们并不知道CBO为何要这样做. 特别是当执行计划明显失真时,我们特别想搞清楚为什么CBO会做出这样的一个选择,那么就可以用10053事件来分析SQL分析过程的trace文件. 同10046事件一样,10053事件依然无法在官网上找到相关的信息. 10053事件为我们真正的揭开蒙在CBO身上的面纱. 如何做10053事件分析 Connected to Oracle Database…
一.Oracle跟踪文件 Oracle跟踪文件分为三种类型: 一种是后台报警日志文件,记录数据库在启动.关闭和运行期间后台进程的活动情况,如表空间创建.回滚段创建.某些alter命令.日志切换.错误消息等.在数据库出现故障时,应首先查看该文件,但文件中的信息与任何错误状态没有必然的联系.后台报警日志文件保存BACKGROUND_DUMP_DEST参数指定的目录中,文件格式为SIDALRT.LOG. 另一种类型是DBWR.LGWR.SMON等后台进程创建的后台跟踪文件.后台跟踪文件根据后台进程运行…
(1)选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表.如果有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表, 交叉表是指那个被其他表所引用的表. (2) WHERE子句中的连接顺序.: ORACLE采用自下而上的顺序解析WHERE…
Oracle11g中,真实应用测试选项(the Real Application Testing Option)提供了一个有用的特点,叫SQL性能分析器(SQL Performance Analyzer,SQLPA,SPA).系统包DBMS_SQLPA让你可以注册和比较SQL调优集(STS)中的SQL语句执行的统计信息.通过SQL性能分析器,可比较数据库变化前后SQL语句的执行情况.下面将通过简单例子说明该Oracle 11g 新特点. 1.  创建样例表和数据 为了稍后的说明,首先,需创建一张…
原文地址:http://android.xsoftlab.net/training/articles/perf-tips.html 本篇文章主要介绍那些能够提升总体性能的微小优化点.它与那些能突然改观性能效果的优化手段并不属于同一类.选择正确的算法与数据结构必定是我们的第一总则.可是这不是我们这篇文章要介绍的.你应该将这篇文章所提及的知识点作为编码的日常习惯,这能够提升常规代码的执行效率. 下面是书写代码的基本准则: 绝不要做你不须要的工作. 假设能够不申请内存就不要申请.要合理复用已有的对象.…
1.在SELECT语句中避免使用“*” 2.尽可能减小记录行数 3.使用rowid高效删除重复记录 实例: delete from stu s where s.rowid>(select min(t.rowid) from stu t where t.stu=t.stu / 4.使用truncate代替delete删除记录 5.高效统计记录行数 select tables_name,num_rows from user_tables where table_name='stu' / 6.尽量多使…