网管联盟 | 网管论坛 | 网管u家 | 网管博客 | 网管软件 | 网管求职 | 小游戏 | 网管搜索 | 网管原创 | 网管聚合 | 网管读摘 | 网管焦点 | 世界素材 | 会员投稿 | 会员中心 
中国网管联盟
Windows Linux Cisco 网络技术 数据库 黑客攻防 DotNet Java PHP 认证 新闻资讯 服务器 存储资讯 网络设备 网管学堂 技术专题 焦点 网吧频道
 当前位置: > bitsCN.com > 数据库技术 > Oracle > 体系架构 > Oracle优化的五个方面  

Oracle优化的五个方面

2007-04-03  作者:bitsCN整理  来源:  点评 投稿 收藏

 

    Row-resequencing(行的重新排序) 网管网www_bitscn_com

就象我们上面提到的,有经验的Oracle DBA都知道I/O是响应时间的最大组成部分。其中磁盘I/O特别厉害,因为当Oracle由磁盘上的一个数据文件得到一个数据块时,读的进程就必须等待物理I/O操作完成。磁盘操作要比数据缓冲慢10,000倍。因此,如果可以令I/O最小化,或者减少由于磁盘上的文件竞争而带来的瓶颈,就可以大大地改善Oracle数据库的性能。

网管朋友网www_bitscn_net

如果系统响应很慢,通过减少磁盘I/O就可以有一个很快的改善。如果在一个事务中通过按一定的范围搜索primary-key索引来访问表,那么重新以CTAS的方法组织表将是你减少I/O的首要策略。通过在物理上将行排序为和primary-key索引一样的顺序,就可以加快获得数据的速度。 网管u家www.bitscn.net

就象磁盘的负载平衡一样,行的重新排序也是很简单的,而且也很快。通过与其它的DBA管理技巧一起使用,就可以在高I/O的系统中大大地减少响应的时间。 网管u家www.bitscn.net

在高容量的在线事务处理环境中(online transaction processing,OLTP),数据是由一个primary索引得到的,重新排序表格的行就可以令连续块的顺序和它们的primary索引一样,这样就可以在索引驱动的表格查询中,减少物理I/O并且改善响应时间。这个技巧仅在应用选择多行的时候有用,或者在使用索引范围搜索和应用发出多个查询来得到连续的key时有效。对于随机的唯一primary-key(主键)的访问将不会由行重新排序中得到好处。 中国网管论坛bbs.bitsCN.com

让我们看一下它是如何工作的。考虑以下的一个SQL的查询,它使用一个索引来得到100行:

网管有家www.bitscn.net

selectsalaryfromemployeewherelast_name like 'B%';

网管有家www.bitscn.net

网管u家u.bitsCN.com
网管bitscn_com

这个查询将会使用last_name_index,搜索其中的每一行来得到目标行。这个查询将会至少使用100次物理磁盘的读取,因为employee的行存放在不同的数据块中。 网管朋友网www_bitscn_net

不过,如果表中的行已经重新排序为和last_name_index的一样,同样的查询又会怎样处理呢?我们可以看到这个查询只需要三次的磁盘I/O就读完全部100个员工的资料(一次用作索引的读取,两次用作数据块的读取),减少了97次的块读取。 网管网www.bitscn.com

重新排序带来的性能改善的程度在于在你开始的时候行的乱序性如何,以及你需要由序列中访问多少行。至于一个表中的行与索引的排序键的匹配程度,可以查看数据字典中的dba_indexes和dba_tables视图得到。

网管下载dl.bitscn.com

在dba_indexes的视图中,查看clustering_factor列。如果clustering_factor的值和表中的块数目大致一样,那么你的表和索引的顺序是一样的。不过,如果clustering_factor的值接近表中的行数目,那就表明表格中的行和索引的顺序是不一样的。 网管bitscn_com

行重新排序的作用是不可以小看的。在需要进行大范围的索引搜索的大表中,行重新排序可以令查询的性能提高三倍。

网管有家www.bitscn.net

一旦你已经决定重新排序表中的行,你可以使用以下的工具之一来重新组织表格。 网管u家u.bitscn@com

◆使用Oracle的Create Table As Select (CTAS)语法来拷贝表格 中国网管联盟bitsCN.com

Oracle9i自带的表格重新组织工具 网管联盟bitsCN@com

以下,我们来看以下SQL语句的调优。 网管网www_bitscn_com

    SQL调优

网管联盟bitsCN_com

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

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

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

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

网管网www.bitscn.com

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

网管有家bitscn.net

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

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

网管联盟bitsCN_com

 

网管网www.bitscn.com

  网管论坛bbs_bitsCN_com

网管论坛bbs_bitsCN_com

TAGs   方面   优化   Oracle   排序       一个   可以   索引   使用   性能      
 上一篇:Oracle DBA如何管理DB2   下一篇:Oracle和DB2间基本架构和管理的差异
Oracle优化的五个方面 评论:
loading.. 评论加载中…
评论:请自觉遵守互联网相关政策法规,评论不得超过250字。

验证码: 注册用户
本类热门排行:
最新推荐文章:
网管论坛交流: