Oracle的SQL调优的目标描述

数据库 Oracle
以下的文章主要是介绍Oracle SQL调优的实际应用以及Oracle SQL调优的目标是如何实现的,以下就是正文的详细内容的描述。

我们都知道Oracle的SQL调优是很复杂的,如果想细致的了解它我们甚至以整本书的内容来介绍Oracle SQL调优的细微差别。但是有一些基本的规则是每个Oracle DBA都需要跟从的,这些规则可以改善他们系统的性能。

SQL调优的目标是简单的:

消除不必要的大表全表搜索:不必要的全表搜索导致大量不必要的I/O,从而拖慢整个数据库的性能。调优专家首先会根据查询返回的行数目来评价SQL。在一个有序的表中,如果查询返回少于40%的行,或者在一个无序的表中,返回少于7%的行,那么这个查询都可以调整为使用一个索引来代替全表搜索。

对于不必要的全表搜索来说,最常见的调优方法是增加索引。可以在表中加入标准的B树索引,也可以加入bitmap和基于函数的索引。要决定是否消除一个全表搜索,你可以仔细检查索引搜索的I/O开销和全表搜索的开销,它们的开销和数据块的读取和可能的并行执行有关,并将两者作对比。

在一些情况下,一些不必要的全表搜索的消除可以通过强制使用一个index来达到,只需要在SQL语句中加入一个索引的提示就可以了。

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

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

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

这些规则看来简单,不过它们占Oracle 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时,由于现有索引的不足而导致Oracle 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的值变高,从而令其它任务的数据块由缓冲中移走。

【编辑推荐】

  1. 配置Oracle RAC中应注意的问题有哪些
  2. Oracle自增字段的实际应用
  3. Oracle使用游标触发器存储实操
  4. Oracle数据库中表的不同的连接方式描述
  5. Oracle数据库中表的连接方式的讲解
责任编辑:佚名 来源: 互联网
相关推荐

2010-07-19 13:35:51

SQL Server性

2010-04-22 16:39:21

Oracle 调优

2009-11-17 13:45:12

Oracle SQL调

2010-04-19 13:50:27

Oracle调整

2011-05-20 14:23:01

Oracle调优

2010-04-15 16:16:33

Oracle SQL

2011-05-18 10:16:24

Oracle调优

2011-05-20 15:02:01

Oracle性能调优

2010-04-09 10:32:03

Oracle 数据库

2023-11-10 09:25:36

Oracle数据库

2010-08-11 14:32:55

DB2数据库调优

2010-08-11 12:43:45

DB2数据库调优

2010-05-05 14:04:31

Oracle 性能

2011-03-10 14:40:54

LAMPMysql

2010-04-09 10:43:34

Oracle SQL

2009-11-09 17:27:38

Oracle编码SQL

2010-05-04 17:08:24

Oracle数据库

2022-02-28 10:11:22

查询数据SQL

2009-07-17 17:16:44

Swing实现的目标

2011-09-02 14:05:25

SQL Server性能调优
点赞
收藏

51CTO技术栈公众号