网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.vsftpd-1.1.3配制实例之五:VIRT.
.Oracle数据库系统使用经验.
.MIS中的图像应用技术[DEVELOPER2.
.ORACLE应用中常见的傻瓜问题1000.
.Red Hat Linux 7.1使用手册(上).
.ORACLE问答精选.
.Connect To Oracle DataBase.
.ORACLE存储过程管道通信的例子.
.Oracle安全全程接触(完整版)一.
.ORACLE 锁.
.Oracle数据库管理员的利器EXP、I.
.如何在一台机子上配双网卡.
.(转)Oracle RMAN快速入门指南.
.由于控制文件计划不当而导致数据.
.Linux: 单边生存之路.
.WIN平台下仅开一个端口让Oracle穿.
.如何学习Oracle?.
.RedHat7下Oracle8i r2 v8.1.6安装.
.比较SQL Server2005和Oracle 10g.
.Oracle 中巧用FORMS_DDL.

Oracle专家调优秘密(二)

发表日期:2008-2-9



   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(转载) 人气:589
下一篇:Oracle专家调优秘密(一) 人气:526
浏览全部Oracle教程的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐