oracle调优之sql语句

冰点繁云星pl

冰点繁云星pl

2016-02-19 19:46

清醒时做事,糊涂时读书,大怒时睡觉,无聊时关注图老师为大家准备的精彩内容。下面为大家推荐oracle调优之sql语句,无聊中的都看过来。

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

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

  .在全表搜索是一个最快的访问方法时,将小表的全表搜索放到缓存中,调优专家应该确保有一个专门的数据缓冲用作行缓冲。在Oracle7中,你可以使用altertablexxxcache语句,在Oracle8或以上,小表可以被强制为放到KEEP池中缓冲。

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

  .确保最优的JOIN操作:有些查询使用NESTEDLOOPjoin快一些,有些则是HASHjoin快一些,另外一些则是sort-mergejoin更快。

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

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

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

  调整Oracle的排序操作

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

  使用Orderby的SQL语句

  使用Groupby的SQL语句

  在创建索引的时候

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

  进行tablejoin时,由于现有索引的不足而导致SQL优化器调用MERGESORT

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

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

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

展开更多 50%)
分享

猜你喜欢

oracle调优之sql语句

编程语言 网络编程
oracle调优之sql语句

ORACLE SQL 语句分类

编程语言 网络编程
ORACLE SQL 语句分类

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Oracle专家调优秘密

编程语言 网络编程
Oracle专家调优秘密

Oracle中捕获问题SQL语句

编程语言 网络编程
Oracle中捕获问题SQL语句

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

Oracle命中率查询,SGA调优

编程语言 网络编程
Oracle命中率查询,SGA调优

DBA应遵循的Oracle调优原则

电脑网络
DBA应遵循的Oracle调优原则

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

使用CSS制作圆角效果

使用CSS制作圆角效果

Oracle诊断案例-redo log处于高激活

Oracle诊断案例-redo log处于高激活
下拉加载更多内容 ↓