Oracle专家调优秘密(二)

原创 2004年08月04日 19:51:00
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语句的性能的。

个人收集的国外Oracle优秀技术博客分享

个人收集的国外的优秀的Oracle博客网站,有需要的拿去,不能访问的请自行翻墙 1. http://www.oratechinfo.co.uk/ http://www.oratechinfo.co...
  • skybluehao
  • skybluehao
  • 2014年06月05日 22:28
  • 1104

office 2013密钥office2013永久激活密钥

office 2013是一款功能强大的办公软件目前有两个版本分别为企业版和专业版,是继Microsoft Office 2010 后的新一代套装软件。2012年7月份,微软发布了免费的Office 2...
  • liuxuekai
  • liuxuekai
  • 2016年08月18日 23:57
  • 53108

【重磅干货】看了此文,Oracle SQL优化文章不必再看!

听“俊”一席话,胜读十年书。看了这篇由DBA+社群联合发起人丁俊大师(网名:dingjun123)分享的SQL优化大作,其他OracleSQL优化文章都不必再看了!...
  • u012245006
  • u012245006
  • 2015年12月14日 18:29
  • 1455

Oracle专家调优秘密

原文地址:作者newhappy2008http://blog.csdn.net/newhappy2008/archive/2009/02/26/3940751.aspx  在过去的十年中,Oracle...
  • kaertiger
  • kaertiger
  • 2011年05月05日 17:49
  • 358

oracle调优专家秘籍

注:本文不是给你一个案例,而是讲调优的方法,古人云:授人鱼不如授人渔,这里要讲的,就是教你怎么捕鱼。      这里要说的sql调优很有意思,得先从感恩节说起。      感恩节(英语:Tha...
  • yfleng2002
  • yfleng2002
  • 2011年12月01日 19:03
  • 1124

成为Java GC专家(5)—Java性能调优原则

这是“成为Java GC专家”系列的第五篇文章。在第一篇深入浅出Java垃圾回收机制中,我们已经学习了不同的GC算法流程、GC的工作原理、新生代(Young Generation)和老年代(Old...
  • byfworking
  • byfworking
  • 2015年12月04日 11:33
  • 305

Java GC 专家系列3:GC调优实践

本篇是”GC专家系列“的第三篇。在第一篇理解Java垃圾回收中我们学习了几种不同的GC算法的处理过程,GC的工作方式,新生代与老年代的区别。所以,你应该已经了解了JDK 7中的5种GC类型,以及每种G...
  • oSayMissyou0
  • oSayMissyou0
  • 2016年01月18日 17:38
  • 627

成为Java GC专家(5)—Java性能调优原则

本文由 ImportNew - 蒋 生武 翻译自 dzone。欢迎加入翻译小组。转载请参见文章末尾的要求。 这是“成为Java GC专家”系列的第五篇文章。在第一篇深入浅出Java垃圾回收机...
  • shayanxiang
  • shayanxiang
  • 2014年12月05日 11:12
  • 535

成为Java GC专家(5):Java应用性能调优的原则

This is the fifth article in the series of "Become a Java GC Expert". In the first issue Understa...
  • zhoudaxia
  • zhoudaxia
  • 2014年05月23日 10:44
  • 2415

成为Java GC专家(5)—Java性能调优原则

这是“成为Java GC专家”系列的第五篇文章。在第一篇深入浅出Java垃圾回收机制中,我们已经学习了不同的GC算法流程、GC的工作原理、新生代(Young Generation)和老年代(Old...
  • bright60
  • bright60
  • 2015年12月07日 14:34
  • 234
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Oracle专家调优秘密(二)
举报原因:
原因补充:

(最多只允许输入30个字)