文章分类 -  Performance Tuning II

摘要:一、本文说明: 操作系统:rhel 5.4 x32 数据库:oracle 11g r2 x32二、等待事件的相关知识:1.1、等待事件主要可以分为两类,即空闲(IDLE)等待事件和非空闲(NON-IDLE)等待事件。1)、空闲等待事件指ORACLE正等待某种工作,在诊断和优化数据库的时候,不用过多注意这部分事件。 2)、非空闲等待事件专门针对ORACLE的活动,指数据库任务或应用运行过程中发生的等待,这些等待是在调整数据库的时候需要关注与研究的。 在Oracle 10g中的等待事件有874个,11g中等待事件有1118个。我们可以通过v$event_name视图来查看等待事件的相关信息。1.2 阅读全文
posted @ 2013-02-26 15:22 I’m Me! 编辑
摘要:第一篇: 《Oracle等待事件1之分别用表和索引上数据的访问来产生db file scattered read等待事件》第二篇: 《Oracle等待事件2之构造一个DB File Sequential Read等待事件和构造一个Direct Path Read等待事件》第三篇: 《暂无》三、构造一个DB File Sequential Read等待时间,等待事件需要在v$session_wait和10046 trace文件中显示出来,贴出整个演示过程。db file sequential read等待事件:是由于数据块顺序读产生的,当数据块(索引块)从磁盘一个一个读到内存中时,在这个过程中o 阅读全文
posted @ 2013-02-26 10:52 I’m Me! 编辑
摘要:诊断并解决ORA-04031错误 当我们在共享池中试图分配大片的连续内存失败的时候,Oracle首先清除池中当前没使用的所有对象,使空闲内存块合并。如果仍然没有足够大单个的大块内存满足请求,就会产生ORA-04031错误。当这个错误出现的时候你得到的错误解释信息类似如下: 1 [oracle@yft ~]$ oerr ora 04031 2 04031, 00000, "unable to allocate %s bytes of shared memory (\"%s\",\"%s\",\"%s\",\"%s\& 阅读全文
posted @ 2013-02-22 14:32 I’m Me! 编辑
摘要:第一篇: 《Oracle等待事件1之分别用表和索引上数据的访问来产生db file scattered read等待事件》第二篇: 《Oracle等待事件2之构造一个DB File Sequential Read等待事件和构造一个Direct Path Read等待事件》第三篇: 《暂无》 引言:其实等待事件我想大家都不会陌生,那么Oracle研究出来等待事件是为了什么呢?它会告诉我们在什么情况时数据库的性能是快还是慢,我们可以根据数据库在等待什么资源来进行性能优化(是否资源太忙,idle较多,latch争用严重,会话有阻塞了),解决方案例如是增加SGA,还是PGA,还是系统I/0等,我们在日 阅读全文
posted @ 2013-02-17 10:01 I’m Me! 编辑
摘要:如今,一般DBA使用会话跟踪、SQL跟踪并进行分析已不是稀奇的事情,我估计常用的方法有SQL_TRACE、10046事件等。另外,如果我们需要跟踪其他会话,那需要如何做呢?大家估计最熟悉的是使用ORADEBUG。其实,Oracle提供的跟踪方法非常丰富,本文就将这些方法一一介绍,大家可以选择自己喜欢的方式并熟练使用它们。TRACE目录 首先,我可能会关心咱跟踪的trace文件放在哪里,Oracle 10g和11g存放trace目录是不一样的,Oracle 10g中一般是$ORACLE_BASE/admin/$ORACLE_SID/udump和$ORACLE_BASE/admin/$ORACL. 阅读全文
posted @ 2013-02-04 21:18 I’m Me! 编辑
摘要:一、本文说明本文整理于谭大师的让Oracle跑得更快1。二、只读表空间与数据备份和恢复的关系 表空间设置成只读之后,只需要执行一次备份操作即可,在后续备份时不再需要考虑这些表空间的备份。 原因很容易理解,这些表空间中的数据已经不再改变,存储在表空间中的数据状态始终保持在表空间设置为Read-Only那一刻,就像是给表空间做了一个快照一样,Oracle也不需要对它们进行额外的恢复工作,比如应用归档。 看下面的例子: 我们创建两个表空间,一个是只读(Read-Only)的,一个是常规的(Read-Write),下面来比较这两个表空间数据文件的变化情况。 1 SQL> create table 阅读全文
posted @ 2013-02-03 14:24 I’m Me! 编辑
摘要:Oracle Bind Variable(绑定变量)就其本质来说就是把本来需要Oracle做硬解析的SQL变成了软解析,以减少Oracle花费在SQL解析上的时间和资源。 我们设想一个银行ATM机系统,这是一个比较典型的OLTP系统,用户分别在不同的ATM机上做操作,其实所有的用户做的操作基本上是相同的,主要是这样3种,查询,取款,存款。 对于查询,发出的查询大概就是这样的一条SQL: Select account_value from account_info where acount_name = 'myname'; 而对于取款和存款,对于数据库来说是一样的,不过是修改当前 阅读全文
posted @ 2013-02-02 15:28 I’m Me! 阅读(4992) 评论(0) 推荐(1) 编辑
摘要:我们都知道在Oracle中每条SQL语句在执行之前都需要经过解析,这里面又分为软解析和硬解析。在Oracle中存在两种类型的SQL语句,一类为DDL语句(数据定义语言),他们是从来不会共享使用的,也就是每次执行都需要进行硬解析。还有一类就是DML语句(数据操纵语言),他们会根据情况选择要么进行硬解析,要么进行软解析。 DML:INSERT、UPDATE、DELETE、SELECT; DDL:CREATE、DROP、ALTER一、SQL解析过程Oracle对此SQL将进行几个步骤的处理过程: 1、语法检查(syntax check):检查此sql的拼写是否有语法错误; 2、语义检查(semant 阅读全文
posted @ 2013-02-01 21:58 I’m Me! 阅读(657) 评论(0) 推荐(0) 编辑
摘要:一、解释OLTP必须要求变量绑定的原因: 在OLTP系统中,SQL语句大多是比较简单或操作的结果集都很小。比如拿银行的ATM系统来说,尽管用户操作的表可能非常大(银行的用户非常多),但是用户操作的记录数可能只有1行(或者几行),如果再这张表上创建了索引,那么这种极小结果集的操作使用索引最适用,并且几乎所有SQL的执行计划中的索引都会毫无悬念地被选择,因为在这种情况下,索引可能只需要扫过几个数据块就可以定位到数据,而全表扫描将会相当费资源。因此,在这种情况下,即使每个用户的谓词条件不一样,执行计划也是一样的,就是统统使用索引来访问数据,几乎不大可能出现走全表扫描的情况。在这种执行计划几乎是唯一的 阅读全文
posted @ 2013-01-31 11:45 I’m Me! 阅读(598) 评论(0) 推荐(0) 编辑
摘要:一、本文说明 在浏览Dave的博客的时候发现有一篇关于索引维护的文章,感觉挺好的,自己对索引的维护了解甚少,因此在这里转载+模拟一下,如果想要看原文可以点击友情链接中的Dave在他的博客中可以找到。二、查看系统表中的用户索引 在Oracle中,SYSTEM表空间是安装数据库时自动建立的,它包含数据库的全部数据字典,存储过程、包、函数和触发器的定义以及系统回滚段。 一般来说,应该尽量避免在SYSTEM表空间中存储非SYSTEM用户的对象。因为这样会带来数据库维护和管理的很多问题。一旦SYSTEM表空间损坏了,只能重新生成数据库。我们可以用下面的语句来检查在SYSTEM表内有没有其他用户的索引存在 阅读全文
posted @ 2013-01-24 17:20 I’m Me! 阅读(929) 评论(0) 推荐(0) 编辑
摘要:一、本文说明: 今天在做测试的时候发现字段上有索引,但是执行计划就是不走索引,经过在网上查找才发现原来是索引的集群因子过高导致的。本文属于转载+模拟。二、官网说明The index clustering factor measures row order in relation to an indexed value suches employee last name.The more order that exists in rowstorage for this value,the lower the clustering factor. ----row存储的越有序,clustering 阅读全文
posted @ 2013-01-24 14:49 I’m Me! 阅读(6007) 评论(0) 推荐(2) 编辑
摘要:一、声明: 本人写的一些文章,其中有些是属于个人原创,有些属于转载+个人改编。就如本文属于转载+个人改编。二、什么是水线(High Water Mark)? 所有的Oracle段(segments,在此,为了理解方便,建议把segments作为表的一个同义词)都有一个在段内容纳数据的上限,我们把这个上限称为"high water mark"或HWM。这个HWM是一个标记,用来说明已经有多少没有使用的数据块分配给这个segment。HWM通常增长的幅度为一次5个数据块,原则上HWM只会增大,不会缩小,即使将表中的数据全部删除,HWM还是为原值,由于这个特点,使HWM很像一个水 阅读全文
posted @ 2013-01-06 13:49 I’m Me! 编辑
摘要:一、SQL TRACE 当SQL语句出现性能问题时,我们可以用SQL_TRACE来跟踪SQL的执行情况,通过跟踪,我们可以了解一条SQL或者PL/SQL包的运行情况,SQL_TRACE命令会将SQL执行的整个过程输出到一个trace文件中,我们可以读这个trace文件来了解在这个SQL执行过程中Oracle都做了哪些操作。 可以通过sql命令启动SQL_TRACE,或者在初始化参数里面。1 SQL> alter session set sql_trace=true;2 3 Session altered.4----- 或者----------- 5 SQL> alter syste 阅读全文
posted @ 2012-12-27 15:11 I’m Me! 编辑
摘要:一、说明 在上一章中讲了一些实例的分享,这一章我们将更加深入的了解执行计划。二、执行计划的概念 所谓执行计划,顾名思义,就是对一个查询任务,做出一份怎样去完成任务的详细方案。举个生活中的例子,我从珠海要去英国,我可以选择先去香港然后转机,也可以先去北京转机,或者去广州也可以。但是到底怎样去英国划算,也就是我的费用最少,这是一件值得考究的事情。同样对于查询而言,我们提交的SQL仅仅是描述出了我们的目的地是英国,但至于怎么去,通常我们的SQL中是没有给出提示信息的,是由数据库来决定的。 -----先看一个执行计划的对比,创建一张表jack------------- 1 SQL> create 阅读全文
posted @ 2012-12-25 09:54 I’m Me! 编辑
摘要:一、引言: 我们随便执行一条查询语句,并打开autotrace: 1 SQL> set autotrace traceonly; 2 SQL> select * from emp; 3 4 14 rows selected. 5 6 7 Execution Plan 8 ---------------------------------------------------------- 9 Plan hash value: 395616093210 11 ---------------------------------------------------------------- 阅读全文
posted @ 2012-12-24 22:19 I’m Me! 编辑
摘要:一、启用Autotrace功能 任何以SQL*PLUS连接Session都可以用Autotrace,不过还是要做一些设置的,否则可能报错。 1、报错示例: 1 SQL :> set autotrace on; 2 SP2-0613: Unable to verify PLAN_TABLE format or existence 3 SP2-0611: Error enabling EXPLAIN report 4 SP2-0618: Cannot find the Session Identifier. Check PLUSTRACE role is enabled 5 SP2-0611 阅读全文
posted @ 2012-12-14 22:53 I’m Me! 编辑
摘要:特此说明:本文引自http://f.dataguru.cn/forum.php?mod=viewthread&tid=38865&fromuid=303"执行计划的执行顺序":先从开头一直往右看,一直看到最右边有并列代码部分。如果遇到并列的,就从上往下看。对于并列的步骤,靠上的先执行;对于不并列的步骤,靠右的先执行。 引言:oracle执行计划对我们并不陌生,往往我们在工作中只会在发生性能瓶颈时看一下,没有想过执行计划是如何生成的。下面用实例来模拟数据访问方式和数据处理方式的演变。 1.执行计划--通过表访问数据 TABLE ACCESS FULL 1 SQ 阅读全文
posted @ 2012-12-12 17:09 I’m Me! 编辑
摘要:在CBO的优化模式下,我们可以使用optimizer_mode参数控制优化模式。主要有两种模式,一种是ALL_ROWS模式,另外一种是FIRST_ROWS模式。 ALL_ROWS模式适用场景:希望优化程序给出一种尽快得到全部记录的执行计划,目标是增加系统的吞吐量。 FIRST_ROWS模式适用场景:希望优化程序给出一种可以迅速的得到第一行的执行计划,目标是减少系统的响应时间。 两种模式需要具体场景具体分析,比如常见的Web应用,很少有一次性得到全部记录的情况,都是分多页交互的响应操作者,因此默认的ALL_ROWS模式就不太合适了,应该考虑使用FIRST_ROWS模式进行优化。又如,我们想要生. 阅读全文
posted @ 2012-12-12 14:38 I’m Me! 编辑
摘要:数据库是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。 在数据库中有两种基本的锁类型:排他锁(Exclusive Locks,即X锁)和共享锁(Share Locks,即S锁)。当数据对象被加上排他锁时,其他的事务不能对它读取和修改;加了共享锁的数据对象可以被其他事务读取,但不能修改。 根据保护对象的不同,Oracle数据库锁可以分为以下几大类: (1). DML lock (data locks,数据锁):用于保护数据的完整性; (2). DDL lock(dic. 阅读全文
posted @ 2012-11-30 17:03 I’m Me! 编辑

点击右上角即可分享
微信分享提示