Oracle专家调优秘密(二)

oracle

SQL调优

  Oracle的SQL调优是一个复杂的主题,甚至是需要整本书来介绍Oracle SQL调优的细微差别。不过有一些基本的规则是每个Oracle DBA都需要跟从的,这些规则可以改善他们系统的性能。SQL调优的目标是简单的:

  . 消除不必要的大表全表搜索:不必要的全表搜索导致大量不必要的I/O,从而拖慢整个数据库的性能。调优专家首先会根据查询返回的行数目来评价SQL。在一个有序的表中,如果查询返回少于40%的行,或者在一个无序的表中,返回少于7%的行,那么这个查询都可以调整为使用一个索引来代替全表搜索。对于不必要的全表搜索来说,最常见的调优方法是增加索引。可以在表中加入标准的B树索引,也可以加入bitmap和基于函数的索引。要决定是否消除一个全表搜索,你可以仔细检查索引搜索的I/O开销和全表搜索的开销,它们的开销和数据块的读取和可能的并行执行有关,并将两者作对比。在一些情况下,一些不必要的全表搜索的消除可以通过强制使用一个index来达到,只需要在SQL语句中加入一个索引的提示就可以了。

  . 在全表搜索是一个最快的访问方法时,将小表的全表搜索放到捍嬷校饔抛矣Ω萌繁S幸桓鲎诺氖莼撼逵米餍谢撼濉T贠racle7中,你可以使用alter table xxx cache语句,在Oracle8或以上,小表可以被强制为放到KEEP池中缓冲。

  . 确保最优的索引使用 :对于改善查询的速度,这是特别重要的。有时Oracle可以选择多个索引来进行查询,调优专家必须检查每个索引并且确保Oracle使用正确的索引。它还包括bitmap和基于函数的索引的使用。

  . 确保最优的JOIN操作:有些查询使用NESTED LOOP join快一些,有些则是HASH join快一些,另外一些则是sort-merge join更快。

  这些规则看来简单,不过它们占SQL调优任务的90%,并且它们也无需完全懂得Oracle SQL的内部运作。以下我们来简单概览以下Oracle SQL的优化。

  我们首先简要查看Oracle的排序,并且看一看排序操作是如何影响性能的。

  调整Oracle的排序操作

  排序是SQL语法中一个小的方面,但很重要,在Oracle的调整中,它常常被忽略。当使用create index、ORDER BY或者GROUP BY的语句时,Oracle数据库将会自动执行排序的操作。通常,在以下的情况下Oracle会进行排序的操作:

  使用Order by的SQL语句

  使用Group by的SQL语句

  在创建索引的时候

  进行table join时,由于现有索引的不足而导致SQL优化器调用MERGE SORT

  当与Oracle建立起一个session时,在内存中就会为该session分配一个私有的排序区域。如果该连接是一个专用的连接(dedicated connection),那么就会根据init.ora中sort_area_size参数的大小在内存中分配一个Program Global Area (PGA) 。如果连接是通过多线程服务器建立的,那么排序的空间就在large_pool中分配。不幸的是,对于所有的session,用做排序的内存量都必须是一样的,我们不能为需要更大排序的操作分配额外的排序区域。因此,设计者必须作出一个平衡,在分配足够的排序区域以避免发生大的排序任务时出现磁盘排序(disk sorts)的同时,对于那些并不需要进行很大排序的任务,就会出现一些浪费。当然,当排序的空间需求超出了sort_area_size的大小时,这时将会在TEMP表空间中分页进行磁盘排序。磁盘排序要比内存排序大概慢14,000倍。

  上面我们已经提到,私有排序区域的大小是有init.ora中的sort_area_size参数决定的。每个排序所占用的大小由init.ora中的sort_area_retained_size参数决定。当排序不能在分配的空间中完成时,就会使用磁盘排序的方式,即在Oracle实例中的临时表空间中进行。

  磁盘排序的开销是很大的,有几个方面的原因。首先,和内存排序相比较,它们特别慢;而且磁盘排序会消耗临时表空间中的资源。Oracle还必须分配缓冲池块来保持临时表空间中的块。无论什么时候,内存排序都比磁盘排序好,磁盘排序将会令任务变慢,并且会影响Oracle实例的当前任务的执行。还有,过多的磁盘排序将会令free buffer waits的值变高,从而令其它任务的数据块由缓冲中移走。

  接着,让我们看一下Oracle的竞争,并且看一下表的存储参数的设置是如何影响SQL UPDATE和INSERT语句的性能的。

时间: 2024-12-26 18:28:46

Oracle专家调优秘密(二)的相关文章

Oracle专家调优秘密

oracle Oracle专家调优秘密 前言 在过去的十年中, Oracle 已经成为世界上最专业的数据库之一.对于 IT 专家来说,就是要确保利用 Oracle 的强大特性来提高他们公司的生产力.最有效的方法之一是通过 Oracle 调优.它有大量的调整参数和技术来改进你的 Oracle 数据库的性能. Oracle 调优是一个复杂的主题.关于调优可以写整整一本书,不过,为了改善 Oracle 数据库的性能,有一些基本的概念是每个 Oracle DBA 都应该遵从的. 在这篇简介中,我们将简要

Oracle专家调优秘密(一)

oracle 前言 在过去的十年中,Oracle已经成为世界上最专业的数据库之一.对于IT专家来说,就是要确保利用Oracle的强大特性来提高他们公司的生产力.最有效的方法之一是通过Oracle调优.它有大量的调整参数和技术来改进你的Oracle数据库的性能. Oracle调优是一个复杂的主题.关于调优可以写整整一本书不过,为了改善Oracle数据库的性能,有一些基本的概念是每个Oracle DBA都应该遵从的. 在这篇简介中,我们将简要地介绍以下的Oracle主题: --外部调整:我们应该记住

Oracle专家调优秘密(三)

oracle 调整Oracle的竞争 Oracle的其中一个优点时它可以管理每个表空间中的自由空间.Oracle负责处理表和索引的空间管理,这样就可以让我们无需懂得Oracle的表和索引的内部运作.不过,对于有经验的Oracle调优专家来说,他需要懂得Oracle是如何管理表的extent和空闲的数据块.对于调整拥有高的insert或者update的系统来说,这是非常重要的. 要精通对象的调整,你需要懂得freelists和freelist组的行为,它们和pctfree及pctused参数的值有

Oracle性能调优实践中的几点心得

oracle|心得|性能        很多的时侯,做Oracle DBA的我们,当应用管理员向我们通告现在应用很慢.数据库很慢的时侯,我们到数据库时做几个示例的Select也发现同样的问题时,有些时侯我们会无从下手,因为我们认为数据库的各种命种率都是满足Oracle文档的建议.实际上如今的优化己经向优化等待(waits)转型了,实际中性能优化最根本的出现点也都集中在IO,这是影响性能最主要的方面,由系统中的等待去发现Oracle库中的不足.操作系统某些资源利用的不合理是一个比较好的办法,下面把

ORACLE SQL调优之'PLAN_TABLE' is old version

  在为国投做SQL调优时,他们开发说不要动现在的SQL,调整一下执行计划即可,即查询某个表时执行特定的执行计划.乍一听,我是吓了一跳!  由于他们开发不让动SQL结构(该SQL经过PLSQL优化后有500多行,其是2层嵌套递归查询,外边一个SQL如图1-2,外层SQL的每一个列是一个子查询如下图1-1,递归子查询有32个),所以只能从SQL涉及的表.索引下手,查找问题的具体原因及解决办法.我的做法是,先查看了SQL涉及的表的统计信息,问题SQL涉及了8张表(最大的表有300M左右,小表只有几M

oracle 性能调优之旅开始

1.先看三篇帖子: www.itpub.net/thread-137600-1-1.html http://www.itpub.net/thread-124424-1-1.html http://blog.itpub.net/post/96/14353 执行下面的语句: SQL> show parameter area_size; NAME                                 TYPE        VALUE ----------------------------

Oracle数据库系统调优方法

    Oracle 数据库广泛应用在社会的各个领域,特别是在Client/Server模式的应用,但是应用开发者往往碰到整个系统的性能随着数据量的增大显着下降的问题,为了解决这个问题,从以下几个方面:数据库服务器.网络I/O.应用程序等对整个系统加以调整,充分发挥Oracle的效能,提高整个系统的性能.    1 调整数据库服务器的性能    Oracle数据库服务器是整个系统的核心,它的性能高低直接影响整个系统的性能,为了调整Oracle数据库服务器的性能,主要从以下几个方面考虑:    1

看看葫芦里的药 ORACLE性能调优原则

oracle|性能 任何事情都有它的源头,要解决问题,也得从源头开始,影响ORACLE性能的源头非常多,主要包括如下方面: 数据库的硬件配置:CPU.内存.网络条件 1. CPU:在任何机器中CPU的数据处理能力往往是衡量计算机性能的一个标志,并且ORACLE是一个提供并行能力的数据库系统,在CPU方面的要求就更高了,如果运行队列数目超过了CPU处理的数目,性能就会下降,我们要解决的问题就是要适当增加CPU的数量了,当然我们还可以将需要许多资源的进程KILL掉: 2. 内存:衡量机器性能的另外一

Oracle性能调优条带宽度

无论是一个还是多个磁盘响应一个逻辑 I/O,我们都要求 I/O 能被一次处理.因而在确定了条带 深度的基础上,我们需要保证条带宽度  >= I/O 请求的大小 / 条带深度. 此外,考虑到以后系统容量的扩充,我们也需要规划好条带宽度. 如今大多数 LVM 都支持在线动态增加磁盘.也就是在磁盘容量不足时,我们可以随时将新磁盘加 入到一个已经使用的逻辑卷中.这样的话,我们在设置逻辑卷时就可以简单地将所有磁盘都归入到一 个卷中去. 但是,有些 LVM 可能还不支持动态增加磁盘.这时我们就需要考虑以后的