专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »数据库 » oracle数据库优化:Oracle数据库性能优化技术开发者网络Oracle »正文

oracle数据库优化:Oracle数据库性能优化技术开发者网络Oracle

来源: 发布时间:星期二, 2008年12月23日 浏览:2次 评论:0
正在看ORACLE教程是:Oracle数据库性能优化技术开发者网络Oracle介绍:细处着手巧处用功高手和菜鸟的间差别就是:高手什么都知道菜鸟知道电脑小窍门技巧收集最新奇招高招让你轻松踏上高手的路
  摘要: Oracle数据库是当前应用最广泛大型数据库的而其性优化直接关系到系统运行效率本文以数据库性能优化基本原则为出发点阐述了在数据库设计阶段如何避免竞争和如何优化数据访问在数据库运行阶段如何从操作系统和数据库例子级别上调整内存和I/O来达到数据库性能优化各种技术
  关键词:Oracle数据库;性能优化;内存;I/O
  1. 引言
  随着网络应用和电子商务不断发展各个站点访问量越来越大数据库规模也随的不断扩大数据库系统性能问题就越来越突出因此如何对数据库进行调优至关重要:如何使用有限计算机系统资源为更多用户服务?如何保证用户响应速度和服务质量?这些问题都属于服务器性能优化范畴
  作为全球第大数据库厂商Oracle数据库在国内外获得了诸多成功应用据统计全球93%上市.COM公司、65家"财富全球100强"企业不约而同地采用Oracle数据库来开展电子商务我国很多企业、政府单位及电子商务网站WebSite也采用了Oracle作为数据库服务器Oracle数据库服务器是高度可优化软件Software产品经常性调整可以优化应用系统性能防止出现系统瓶颈
  数据库性能优化基本原则就是:通过尽可能少磁盘访问获得所需要数据要评价数据库性能需要在数据库调节前后比较其评价指标:响应时间和吞吐量的间权衡、数据库可用性、数据库命中率以及内存使用效率以此来衡量调节措施效果和指导调整方向
  对Oracle数据库进行性能调整时应当按照顺序进行系统在前面步骤中进行调整可以避免后面些不必要调整或者代价很大调整般来说可以从两个阶段入手:
  1、设计阶段:对其逻辑结构和物理结构进行优化设计使的在满足需求条件情况下,系统性能达到最佳系统开销达到最小;
  2、数据库运行阶段:采取操作系统级、数据库级些优化措施来使系统性能最佳;
  2. 在系统设计开发阶段调整数据库
  为了充分利用Oracle数据库功能特性在设计信息系统时数据库设计人员需要根据业务情况(如访问量或客户端数量)和现有资源状况(如数据库服务器配置)考虑系统结构和数据库逻辑结构设计:
  2.1调整应用结构设计
  即应用采用是传统C/S两层体系结构还是B/W/D 3层体系结构区别应用体系结构要求数据库资源是区别
  2.2恰当使用分区、索引及存档功能
  如果某种业务数据量增长非常快可以考虑存放该业务数据库表是否使用Oracle数据库分区功能;对于经常访问数据库表是否需要建立索引;对于经常访问但是当业务流程完成后不再变动数据可采用放入历史档案思路方法来实现应用系统中访问尽可能少数据量
  2.3恰当编写访问数据SQL语句
  良好SQL语句可以被数据库重复使用而减少分析时间;恰当使用索引可使访问数据块大大减少从而减少响应时间应用执行最终将归结为数据库中SQL语句执行因此SQL语句执行效率决定了Oracle数据库性能Oracle公司推荐使用Oracle语句优化器(Oracle Optimizer)和行锁管理器(row-level manager)来调整优化SQL语句
  2.4调整硬盘I/O
  这步是在信息系统开发的前完成数据库管理员可以将组成同个表空间数据文件放在区别硬盘上做到硬盘的间I/O负载均衡在磁盘比较富裕情况下还应该遵循以下原则:

   将表和索引分开;
   创造用户表空间和系统表空间(system)分开磁盘;
   创建表和索引时指定区别表空间;
   创建回滚段专用表空间防止空间竞争影响事务完成;
   创建临时表空间用于排序操作尽可能防止数据库碎片存在于多个表空间中
  2.5确定数据块大小和存储参数
  由于数据库块大小在数据库创建以后就不能在修改(除非重建数据库)因此为了减少数据链接和行迁移又提高磁盘空间利用率在设计数据库时要确定合适数据块大小和存储参数通常我们是根据样例数据确定数据块大小而根据业务现状和未来发展趋势确定存储参数


[NextPage]

3. 在数据库运行阶段调整数据库
  数据库运行阶段调整数据库包括两个方面:操作系统级调整;数据库级调整
  3.1 操作系统级调整
  实施操作系统级调整主要目是减少内存交换减少分页使SGA( Globle Area)可留驻内存
  3.1.1减少内存交换
  内存交换(swapping)可能会造成很大内存开销应将它最小化运行在Solaris Unix操作系统上Oracle数据库可利用vmstat或sar命令来检查交换查看到系统级内存和硬盘I/O使用情况调整unix数据缓冲池大小、每个进程所能使用内存大小等参数

   vmstat命令
  它报告Solaris上进程、虚拟内存、磁盘、分页和CPU活动情况下面命令将显示系统每5秒钟做事情概要:
% vmstat 5
   sar命令
  用于监控交换、分页、磁盘和CPU活动下面命令用于每10秒显示10次分页活动概要:
% sar -p 10 10
  若系统内存交换较多且需要节省内存可采用以下措施:
  1) 避免运行不必要系统daemon进程或应用进程;
  2) 在不明显影响数据块命中率前提下减少数据库缓冲区数量以释放些内存;
  3) 减少UNIX文件缓冲区数量(特别是在使用裸设备时)
  3.1.2控制分页
  少量内存分页不会太显著地影响系统性能应用不必全部放在内存中但是分页过多将会造成系统性能下降为了检测过多分页可在快速响应或空闲期间运行测量并和响应迟缓时测量进行比较可通过以下办法来解决:
   使用vmstat或sar -p监控分页;
    安装更多内存;
    将些工作移到另系统中;
    配置系统核心使用更少内存;
    保持SGA在单个共享内存段中
  3.1.3使SGA( Globle Area)留驻内存
  SGA是对数据库数据进行快速访问个系统全局区若SGA本身需要频繁地进行释放、分配则不可能达到快速访问数据因此要求SGA驻留内存这时我们可以重新配置UNIX核心调整些操作系统参数以达到增加共享内存
  3.2 数据库级调整
  每个Oracle例子都是由组Oracle后台进程和SGA个内存区组成这组后台进程会自动读写数据库数据文件因此数据库性能可以被这些原因所影响:SGA各部分分配是否合理使用效率是否正常;I/O和锁竞争是否较多
  3.2.1 SGA分配及使用效率
  分配给每个例子内存即SGA使用效率如何会大大影响数据库系统性能SGA由下列部分组成:共享池、数据块缓冲区、重做日志缓冲区、大池组成
  l 共享池(Shared pool)
  共享池存放库缓存Cache(存储共享SQL和PL/SQL区)和数据字典缓存Cache(数据库对象信息)以及会话期间信息(对于MTS)由于这些信息是应用需要经常访问因此这些信息需要保持高命中率可以通过以下语句来确认共享池数据命中率:
  库缓存Cache:
select gethitratio from v$librarycache 应大于90%
select sum(reloads)/sum(pins) from v$librarycache 应小于1

[1] [2] 下

正在看ORACLE教程是:Oracle数据库性能优化技术开发者网络Oracle%

  数据字典缓存Cache:
select sum(getmisses)/sum(gets) from v$rowcache 应小于15%
  由于设计人员水平参差不齐可能存在大匿名块这会导致SQL不能重用因此需要找出大匿名块以转换为存储过程达到重用:
select * from v$sqlarea where command_type=47 and length(sql_text)>500
  而对于些应用系统非常频繁使用SQL对象如存储过程、、包等可以通过钉在内存中方式来防止由于共享池太小被移出:
exec dbms_shared_pool.keep(对象名)
   数据块缓冲区(Db block buffer):
  数据块缓冲区存放用户所经常访问数据文件数据块内容以及用户修改数据内容数据库把数据文件里内容读到内存中下次需要时直接从内存中读取从而减少了磁盘I/O和响应时间当然般只在比较小数据表(如常用代码表)才缓存Cache到内存中
  由于数据快缓冲区中不可能存放所有数据因此可使用LRU算法来确定移出哪些数据块但又尽量保证有较高数据命中率
  查看数据块命中率SQL语句为:
select 1-(phy.value/(cur.value+con.value)) from v$sysstat cur,v$sysstat con,v$sysstat phy
where cur.name='db block gets' and con.name='consistent gets'
and phy.name='physical gets'
  如果这个命中率小于0.85就要考虑为数据块缓冲区分配更多内存了
   重做日志缓冲区(Log buffer):
  重做日志缓冲区存放从用户内存区复制来每个DML或DDL语句重做条目如果这个缓冲区分配太小会导致没有足够空间来放重做条目而等待
  3.2.2 I/O和资源竞争
  由于有众多进程要写数据文件因此需要通过I/O调整来解决I/O瓶颈问题如果在设计阶段有效地考虑了表空间合理分配就能有效地在定程度上减少I/O竞争在数据库运行时由于数据动态增长原来分配给表或索引空间已经用完Oracle会自动分配空间给这些数据库对象而这个动态分配会对系统性能有所影响所以要求:
   避免动态空间管理
   表空间本地化管理以减少和数据字典表空间磁盘竞争
  在系统设计和试运行阶段数据量相对较小效率低下SQL可能并不会影响系统响应时间但当系统数据量增长到定程度时需要在系统运行时监控并找出是哪些SQL不能有效使用索引或缺少索引并进行相应调整:建立索引;修改SQL写法
  另外在Oracle中需要采用些机制来保证数据库对象在使用期间稳定性和数据致性如使用锁存器(latch)、锁(lock)等因此争用和这些机制相关资源会影响数据库性能为了减少这种资源竞争可以通过调整数据库相关化参数(如db_block_lru_latches、dml_locks)来减少资源争用优化数据库性能
  4. 些常用性能优化手段和工具
  Oracle数据库系统提供了些工具和脚本来获取数据库性能指标和优化思路方法如使用utlbstat.sql和utlestat.sql脚本获取段时间内数据库内存、磁盘I/O等情况;使用动态性能视图和数据字典视图来获取命中率和系统等待事件等信息当然也可以使用Oracle Enterprise Manager图形化工具来监控
  5. 结束语
  Oracle数据库性能调整相当重要但难度也较大数据库管理员需要综合运用上面介绍规律在数据库建立时就能根据应用需要合理设计分配表空间以及存储参数、内存使用化参数对以后数据库性能有很大益处只有认真分析Oracle运行过程当中出现各种性能问题才能保证Oracle数据库高效可靠地运行还需要指出是:数据库性能调整是个系统工程涉及方面很多不能仅仅根据个时间点情况就断定数据库运行性能好和坏如何有效地进行调整数据库管理员需要经过反反复复过程这些都需要在大量实战工作中不断地积累经验从而更好地进行数据库调优











页 [1] [2]

相关文章

读者评论

  • 共0条 分0页

发表评论

  • 昵称:
  • 内容: