日期:2011-03-21 00:21:00 来源:本站整理
Oracle专家调优奥秘[Oracle防范]
本文“Oracle专家调优奥秘[Oracle防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
前言
在过去的十年中,Oracle已经成为世界上最专业的数据库之一.关于IT专家来说,就是要确保操纵Oracle的强盛特点来提高他们公司的生产力.最有效的办法之一是通过Oracle调优.它有大量的调整参数和技术来改良你的Oracle数据库的性能.
Oracle调优是一个复杂的主题.关于调优可以写整整一本书,不过,为了改进Oracle数据库的性能,有一些基本的概念是每个Oracle DBA都应当顺从的.
在这篇简介中,我们将扼要地介绍以下的Oracle主题:
--外部调整:我们应当记着Oracle并非单独运行的.因此我们将查看一下通过调整Oracle服务器以得到高的性能.
--Row re-sequencing以削减磁盘I/O:我们应当晓得Oracle调优最重要的目标是削减I/O.
--Oracle SQL调整.Oracle SQL调整是Oracle调整中最重要的范畴之一,只要通过一些简单的SQL调优法则便可以大幅度地晋升SQL语句的性能,这是一点都不奇特的.
--调整Oracle排序:排序关于Oracle性能也是有很大影响的.
--调整Oracle的竞争:表和索引的参数设置关于UPDATE和INSERT的性能有很大的影响.
我们首先从调整Oracle外部的环境开始.假如内存和CPU的资源不足的话,任何的Oracle调整都是没有帮忙的.
外部的性能问题
Oracle并非单独运行的.Oracle数据库的性能和外部的环境有很大的关系.这些外部的条件包含有:
.CPU--CPU资源的不足令查询变慢.当查询超越了Oracle服务器的CPU性能时,你的数据库性能就遭到CPU的限制.
.内存--可用于Oralce的内存数目也会影响SQL的性能,分外是在数据缓冲和内存排序方面.
.网络--大量的Net8通信令SQL的性能变慢.
很多新手都错误的认为应当首先调整Oracle数据库,而不是先确认外部资源能否充足.实际上,假如外部环境呈现瓶颈,再多的Oracle调整都是没有帮忙的.
在查抄Oracle的外部环境时,有两个方面是需求注意的:
1、当运行行列的数目超越服务器的CPU数目时,服务器的性能就会遭到CPU的限制.补偿的办法是为服务器增添额外的CPU大概关闭需求很多处理资源的组件,比方Oracle Parallel Query.
2、内存分页.当内存分页时,内存容量已经不足,而内存页是与磁盘上的交换区举行交互的.补偿的办法是增添更多的内存,削减Oracle SGA的大小,大概关闭Oracle的多线程服务器.
可以利用各种尺度的服务器工具来得到服务器的统计数据,比方vmstat,glance,top和sar.DBA的目标是确保数据库服务器拥有充足的CPU和内存资源来处理Oracle的恳求.
以下让我们来看一下Oracle的row-resequencing是若何可以极大地削减磁盘I/O的.
Row-resequencing(行的重新排序)
就象我们上面提到的,有经验的Oracle DBA都知道I/O是呼应时间的最大构成部份.此中磁盘I/O分外利害,因为当Oracle由磁盘上的一个数据文件得到一个数据块时,读的进程就必须等候物理I/O操作完成.磁盘操作要比数据缓冲慢10,000倍.因此,假如可以令I/O最小化,大概削减由于磁盘上的文件竞争而带来的瓶颈,便可以大大地改进Oracle数据库的性能.
假如系统呼应很慢,通过削减磁盘I/O便可以有一个很快的改进.假如在一个事件中通过按一定的范围搜索primary-key索引来拜候表,那么重新以CTAS的办法组织表将是你削减I/O的主要战略.通过在物理上将行排序为和primary-key索引一样的次序,便可以加快得到数据的速度.
就象磁盘的负载均衡一样,行的重新排序也是很简单的,并且也很快.通过与别的的DBA管理本领一同利用,便可以在高I/O的系统中大大地削减呼应的时间.
在高容量的在线事件处理环境中(online transaction processing,OLTP),数据是由一个primary索引得到的,重新排序表格的行便可以令持续块的次序和它们的primary索引一样,这样便可以在索引驱动的表格查询中,削减物理I/O并且改进呼应时间.这个本领仅在利用挑选多行的时刻有效,大概在利用索引范围搜索和利用发出多个查询来得到持续的key时有效.关于随机的唯一primary-key(主键)的拜候将不会由行重新排序中得到好处.
让我们看一下它是若何工作的.考虑以下的一个SQL的查询,它利用一个索引来得到100行:
select salary from employee where last_name like 'B%'; |
这个查询将会利用last_name_index,搜索此中的每一行来得到目标行.这个查询将会至少利用100次物理磁盘的读取,因为employee的行存放在差别的数据块中.
不过,假如表中的行已经重新排序为和last_name_index的一样,一样的查询又会怎样处理呢?我们可以看到这个查询只需求三次的磁盘I/O就读完好部100个员工的资料(一次用作索引的读取,两次用作数据块的读取),削减了97次的块读取.
重新排序带来的性能改进的程度在于在你开始的时刻行的乱序性若何,以及你需求由序列中拜候多少行.至于一个表中的行与索引的排序键的匹配程度,可以查看数据字典中的dba_indexes和dba_tables视图得到.
在dba_indexes的视图中,查看clustering_factor列.假如clustering_factor的值和表中的块数目大致一样,那么你的表和索引的次序是一样的.不过,假如clustering_factor 的值接近表中的行数目,那就表明表格中的行和索引的次序是不一样的.
行重新排序的作用是不可以藐视的.在需求举行大范围的索引搜索的大表中,行重新排序可以令查询的性能提高三倍.
一旦你已经决意重新排序表中的行,你可以利用以下的工具之一来重新组织表格.
. 利用Oracle的Create Table As Select (CTAS) 语法来拷贝表格
. Oracle9i自带的表格重新组织工具
以下,我们来看以下SQL语句的调优.
以上是“Oracle专家调优奥秘[Oracle防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |
评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论