您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > Oracle10g性能优化实践经验_v0.1
《系统工程师》月刊主办:东软系统工程师社区协办:解决方案技术中心、各大区\事业部技术支持中心联系方式:Emailsecoe@neusoft.com电话024836691202东软集团股份有限公司Oracle10g性能优化实践经验文:电力事业部宫春丽3东软集团股份有限公司目录1.简述..........................................................................................................42.确定Oracle性能瓶颈.......................................................................................43.优化数据库等待事件(WAITS).........................................................................64.优化TOPSQL............................................................................................115.优化I/O..................................................................................................146.调整分区...................................................................................................167.调整索引...................................................................................................177.1.检查并优化索引.....................................................................................177.2.重建索引.............................................................................................178.调整服务器内存分配.....................................................................................189.段的碎片整理.............................................................................................1810.调整数据结构设计........................................................................................1910.1.保留冗余列...........................................................................................1910.2.增加派生列...........................................................................................1910.3.调整分区.............................................................................................1910.4.调整索引.............................................................................................2011.优化性能相关参数........................................................................................2012.调优序列...................................................................................................2213.检查优化表空间...........................................................................................2213.1.包含索引和表的表空间的检查.....................................................................2213.2.数据表空间状态和使用情况检查..................................................................234东软集团股份有限公司1.简述随着管理水平的提高以及开发质量的要求,真正导致数据库崩溃的几率已经很少。而更多的时候,是用户现场反应应用访问速度慢,询问该如何解决。下面根据实际工作中的经验,总结一下性能问题的诊断及其调优方法。(主要是针对被动的调优,系统上线后,而非设计阶段、开发阶段的调优。)索引关键字:Oracle性能调优2.确定Oracle性能瓶颈要解决性能问题,首先必须找出系统的性能瓶颈在哪里,重点判断数据库资源占用情况及等待事件,最终找出影响Oracle性能的对象和sql语句,然后有针对性地进行优化。我们一般是通过以下方法来诊断分析系统性能瓶颈:1、通过Oracle等待接口v$system_event、v$session_event和v$session_wait中获得等待事件,进而找出影响性能的对象和sql语句,也可以通过EM监控工具进行监控分析,检查数据库资源占用情况(包括CPU、IO、内存)是否正常,检查数据库中是否存在大量锁等待、查看是否存在长时间执行不完的SQL、检查表空间使用情况、数据库告预警、阀值设置及其安全审计等。2、生成对应出现性能问题时间段的数据库报告(AWR、ADDM、ASH),报告中有关于性能的重要信息,如前5位的等待事件、cache大小、各种内存结构的命中率、每秒及每事务逻辑、物理读写数据块数、TOPSQL等,ADDM报告中还会给出相应的优化建议供参考,5东软集团股份有限公司通过分析数据库报告看看能否找出系统性能瓶颈,然后进行优化。3、检查ORACLE数据库的相关日志文件、报告及其跟踪文件有没有错误记录。可以检查一下数据库ALERT日志,TRACE文件,操作系统日志等,分析出问题期间,系统有哪些报错,有没有杀系统重要进程的操作,有没有“ORA-”之类的错误提示。4、通过操作系统的一些工具检查系统的状态,比如CPU、内存、交换、磁盘的利用率,根据经验或与系统正常时的状态相比对,有时系统表面上看起来看空闲这也可能不是一个正常的状态,因为cpu可能正等待IO的完成。除此之外我们还应观注那些占用系统资源(cpu、内存)的进程。可以使用包括vmstat、glance、topas、sar、iostat、cpustat、mpstat、netstat、top、osview等工具进行查看系统性能。5、查看中间件及其应用系统日志,判断应用本身是否存在问题,比如有没有控制好并发、程序是否存在无限循环、使用的数据库连接有没有及时关闭、有没有内存溢出等问题。6、判断网络是否存在丢包、不稳定等问题,当然网络问题要首先进行判断。NET*SQL负责数据在网络上的来往,大量的SQL会使网络速度变慢。7、检查数据库归档日志是否占满磁盘空间、数据库补丁是否更新、操作系统及其数据库参数设置是否合理等。通过以上的诊断分析,主要是为了找出系统性能瓶颈,判断是数据库本身的问题还是应用的问题,清楚Oracle在等待什么,是否存在SQL语句需要优化等等,然后进行有针对性的调整优化。6东软集团股份有限公司3.优化数据库等待事件(WAITS)大多的情况我们都是在优化等待事件,由系统中的等待来发现Oracle数据库的不足、操作系统某些资源利用的不合理是一个比较好的办法。我们可以通过v$session_wait这个视图,看等待的进程都在忙什么,语句是否合理,使用了多少IO等。下面列举的是经常碰到的几类等待事件说明及其解决办法:1、rowcachelock等待事件它是一个共享池相关的等待事件,是由于对于字典缓冲的访问造成的。如果发现这个等待十分高,一般来说可能是如下几类原因:1)、共享池太小了,需要增加共享池2)、SQL分析过于频繁,对于共享池的并发访问量过大。关键是要弄清楚哪些ROWCACHE的等待最为严重,如果发现dc_sequences等待比较严重,要通过优化SEQUENCE的访问性能(比如CACHE、NOORDER等)来达到目的。2、gcbufferbusy等待事件在RAC环境中,由于多节点的原因,会因为节点间的资源争用产生GC类的等待。若相同实例的其他进程正在从另外实例传送接收相应块过程中,直到传送结束为止要等待gcbufferbusy事件。gcbufferbusy事件的发生原因和解决方案大致如下:1)、热块(HotBlock)是gcbufferbusy事件发生的最主要原因。因此通过分散热块能解决问题,比如分区应用,建立反向索引,sequencecache大小的增加,PCTFREE的增加等是最平常使用的方法。7东软集团股份有限公司2)、通过SQL调优可以减少许多不必要的块交换。3)、根据业务特性分割应用,把出现gcbufferbusy等待的SQL,单独配置一个数据源,在执行的时候指定到集群中的某一个实例。3、enq:TS–contention等待事件这个等待一般是因为临时表空间存在问题或者临时表空间被占满而引起的。而SQL中使用大量的分组、排序等操作,会严重占用临时表空间。此等待通常的解决办法:增加临时表空间大小,或者找出严重占用临时表空间的SQL进行优化。如果是临时表空间存在问题,那么需要重建临时表空间。4、enq:TX-rowlockcontention等待事件与rowlockcontention相关的等待一般是由于应用引起的,其解决方法就是调整应用、避免交替约束的出现。需要确定是哪种情形造成的等待(唯一性约束、BITMAP索引、外键约束),我们要找到对应的SQL语句是什么,然后进行优化。5、BufferBusy缓冲区忙该等待事件表示正在等待一个以unshareable方式使用的缓冲区,或者表示当前正在被读入buffercache。一般使用如下的解决方法进行解决:如果这一等待位于undoheader,可以通过增加回滚段(rollbacksegment)来解决缓冲区的问题。如果等待位于undoblock上,我们可能需要检查相关应用,适当减少大规模的一致性读取,或者增大DB_CACHE_SIZE。8东软集团股份有限公司如果等待处于datablock,可以考虑将频繁并发访问的表或数据移到另一数据块或者进行更大范围的分布(可以增加pctfree值,扩大数据分布,减少竞争),以避开这个热点数据块。如果等待处于索引块,应该考虑重建索引、分割索引或使用反向键索引。为了防止与数据块相关的缓冲忙等待,也可以使用较小的块,或者可以设置更大的pctfree,使数据扩大物理分布,减少记录间的热点竞争。从多个节点对相同段进行大量的DML操作,可能发生广泛的bufferlock,Applicati
本文标题:Oracle10g性能优化实践经验_v0.1
链接地址:https://www.777doc.com/doc-6370647 .html