`
Josh_Persistence
  • 浏览: 1653582 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类

Oracle数据库性能调优

阅读更多

 一、基本原则:

       数据库性能优化的基本原则就是:通过尽可能少的磁盘访问获得所需要的数据。

二、评价指标:

       要评价数据库的性能,需要在数据库调节前后比较其评价指标即响应时间和吞吐量之间的权衡、数据库的可用性、数据库的命中率以及内存的使用效率,以此来衡量调节措施的效果和指导调整的方向。    

三、注意事项:

       对Oracle数据库进行性能调整时,应当按照一定的顺序进行,因为系统在前面步骤中进行的调整可以避免后面的一些不必要调整或者代价很大的调整。

四、怎样入手:     

        一般来说可以从两个阶段入手:  

        设计阶段:对其逻辑结构和物理结构进行优化设计,使之在满足需求条件的情况下,系统性能达到最佳,系统开销达到最小;   

        数据库运行阶段:采取操作系统级、数据库级的一些优化措施来使系统性能最佳;

五、具体措施: 

       1. 在系统设计开发阶段调整数据库  

       为了充分利用Oracle数据库的功能特性,在设计信息系统时,数据库设计人员需要根据业务情况(如访问量或客户端数量)和现有资源状况(如数据库服务器的配置)考虑系统结构和数据库的逻辑结构的设计:  

       1.1 调整应用程序结构设计

       即应用程序采用的是传统的C/S两层体系结构,还是B/W/D三层体系结构。不同的应用程序体系结构要求的数据库资源是不同的。  

       1.2 恰当使用分区、索引及存档功能。  

       如果某种业务的数据量增长非常快,可以考虑存放该业务的数据库表是否使用Oracle数据库的分区功能;对于经常访问的数据库表是否需要建立索引;对于经常访问但是当业务流程完成后不再变动的数据可采用放入历史档案的方法来实现应用系统中访问尽可能少的数据量。  

       1.3 恰当编写访问数据的SQL语句。  

       良好的SQL语句可以被数据库重复使用而减少分析时间;恰当的使用索引可使访问的数据块大大减少从而减少响应时间。应用程序的执行最终将归结为数据库中的SQL语句执行,因此SQL语句的执行效率决定了Oracle数据库的性能。

       Oracle公司推荐使用Oracle语句优化器(Oracle Optimizer)和行锁管理器(row-level manager)来调整优化SQL语句。  

       1.4 调整硬盘I/O : 硬盘之间的IO负载均衡

       这一步是在信息系统开发之前完成的。数据库管理员可以将组成同一个表空间的数据文件放在不同的硬盘上,做到硬盘之间I/O负载均衡。在磁盘比较富裕的情况下还应该遵循以下原则:将表和索引分开;创造用户表空间,与系统表空间(system)分开磁盘;

      创建表和索引时指定不同的表空间;  

      创建回滚段专用的表空间,防止空间竞争影响事务的完成;  

      创建临时表空间用于排序操作,尽可能的防止数据库碎片存在于多个表空间中。  

      1.5 确定数据块大小和存储参数。  

由于数据库的块大小在数据库创建以后就不能在修改(除非重建数据库),因此为了减少数据链接和行迁移,又提高磁盘空间的利用率,在设计数据库时要确定合适的数据块大小和存储参数。通常我们是根据样例数据确定数据块大小,而根据业务现状和未来发展趋势确定存储参数。  

      2、在数据库运行阶段调整数据库 

      数据库运行阶段调整数据库包括两个方面:操作系统级的调整;数据库级的调整。  

      2.1 操作系统级的调整  

     实施操作系统级调整的主要目的是减少内存交换,减少分页,使SGA(System Globle Area)可留驻内存。  

            2.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文件缓冲区的数量(特别是在使用裸设备时)。  

            2.1.2 控制分页  

       少量的内存分页不会太显著地影响系统的性能,因为应用程序不必全部放在内存中。但是分页过多将会造成系统性能下降。为了检测过多的分页,可在快速响应或空闲期间运行测量,并与响应迟缓时的测量进行比较。

        可通过以下办法来解决:  

        使用vmstat或sar -p监控分页;  

        安装更多的内存;  

        将一些工作移到另一系统中;  

        配置系统核心使用更少的内存;  

       保持SGA在单个共享内存段中。

             2.1.3 使SGA(System Globle Area)留驻内存  

       SGA是对数据库数据进行快速访问的一个系统全局区,若SGA本身需要频繁地进行释放、分配,则不可能达到快速访问数据的目的,因此,要求SGA驻留内存。这时,我们可以重新配置UNIX核心,调整一些操作系统参数以达到增加共享内存的目的。  

      2.2 数据库级的调整  

     每一个Oracle实例都是由一组Oracle后台进程和SGA的一个内存区组成的。这组后台进程会自动的读写数据库的数据文件,因此,数据库性能可以被这些因素所影响:

     SGA各部分的分配是否合理,使用效率是否正常;

     I/O和锁竞争是否较多。  

           2.2.1 SGA的分配及使用效率  

     分配给每个实例的内存,即SGA的使用效率如何,会大大影响数据库系统的性能。SGA由下列部分组成:共享池、数据块缓冲区、重做日志缓冲区、大池组成。  

     共享池(Shared pool): 共享池存放库缓存(存储共享SQL和PL/SQL区)和数据字典缓存(数据库对象信息)以及会话期间信息(对于MTS)。由于这些信息是应用程序需要经常访问的,因此这些信息需要保持高的命中率。可以通过以下语句来确认共享池数据的命中率:  

 库缓存:   select gethitratio from v$librarycache 应大于90% 。

                  select sum(reloads)/sum(pins) from v$librarycache 应小于1%  

数据字典缓存: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和响应时间。当然,一般只在比较小的数据表(如常用代码表)才缓存到内存中。  

        由于数据块缓冲区中不可能存放所有的数据,因此可使用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语句的重做条目。如果这个缓冲区分配太小会导致没有足够的空间来放重做条目而等待。  

          2.2.2 I/O和资源竞争  

       由于有众多的进程要写数据文件,因此需要通过I/O调整来解决I/O瓶颈问题。如果在设计阶段有效地考虑了表空间的合理分配,就能有效地在一定程度上减少I/O竞争。在数据库运行时,由于数据的动态增长,原来分配给表或索引的空间已经用完,Oracle会自动分配空间给这些数据库对象。而这个动态分配会对系统性能有所影响,所以要求:  

      避免动态空间管理  

      表空间的本地化管理,以减少与数据字典表空间的磁盘竞争。  

      在系统设计和试运行阶段数据量相对较小,效率低下的SQL可能并不会影响系统响应时间,但当系统数据量增长到一定程度时,需要在系统运行时监控并找出是哪些SQL不能有效使用索引或缺少索引,并进行相应调整:建立索引;修改SQL写法。  

      另外,在Oracle中,需要采用一些机制来保证数据库对象在使用期间的稳定性和数据的一致性,如使用锁存器(latch)、锁(lock)等。因此争用和这些机制相关的资源会影响数据库的性能。为了减少这种资源竞争,可以通过调整数据库的相关初始化参数(如db_block_lru_latches、dml_locks)来减少资源的争用,优化数据库性能。  

       

六、一些常用的性能优化手段和工具  

     Oracle数据库系统提供了一些工具和脚本来获取数据库的性能指标和优化的方法。如使用utlbstat.sql和utlestat.sql脚本获取一段时间内数据库的内存、磁盘I/O等的情况;使用动态性能视图和数据字典视图来获取命中率和系统等待事件等信息。当然,也可以使用Oracle Enterprise Manager图形化工具来监控。  

 

七、结束语  

      Oracle数据库的性能调整相当重要,但难度也较大。数据库管理员需要综合运用上面介绍的规律,在数据库建立时,就能根据应用的需要合理设计分配表空间以及存储参数、内存使用初始化参数,对以后的数据库性能有很大的益处。只有认真分析Oracle运行过程当中出现的各种性能问题,才能保证Oracle数据库高效可靠地运行。还需要指出的是:数据库的性能调整是一个系统工程,涉及的方面很多,不能仅仅根据一个时间点的情况就断定数据库运行性能的好与坏。如何有效地进行调整,数据库管理员需要经过反反复复的过程。这些都需要在大量的实践工作中不断地积累经验,从而更好地进行数据库的调优。

分享到:
评论

相关推荐

    oracle 数据库性能调优

    ### Oracle数据库性能调优:深度解析与实践指南 在企业级应用中,Oracle数据库作为核心的数据存储和处理系统,其性能直接影响着业务的流畅性和效率。因此,掌握Oracle数据库的性能调优技巧,对于DBA(数据库管理员...

    ORACLE数据库性能调优.docx

    Oracle数据库性能调优是DBA日常工作中至关重要的任务,它涉及到多个层面的分析和改进。在面对应用程序响应缓慢的问题时,通常需要从数据库层面、操作系统层面以及SQL查询优化三个方面进行深入排查。 首先,关注操作...

    oracle数据库性能调优和监控

    【Oracle数据库性能调优与监控】是数据库管理中至关重要的环节,主要目的是提高系统的吞吐量,缩短反应时间,从而提升整体性能。吞吐量衡量的是单位时间内数据库处理的SQL语句数量,而反应时间则关注用户等待结果的...

    Oracle数据库性能调优的研究.pdf

    Oracle数据库性能调优是一个系统工程,涉及到硬件资源、软件配置、数据库结构以及应用程序等多个层面。以下是对Oracle数据库性能影响因素及性能调优方法的知识点总结。 1. Oracle数据库性能影响因素 硬件因素: ...

    oracle数据库性能调优(3)

    本篇将继续深入探讨Oracle数据库性能调优的诸多方面,重点关注于嵌套循环执行计划,这是数据库多表操作中常见的连接方式之一。 首先,了解单表执行计划是理解多表执行计划的基础,单表执行计划涉及到了对单个表进行...

    Oracle数据库性能调优研究.pdf

    Oracle数据库性能调优是数据库管理的关键环节,旨在提高数据处理速度和系统响应时间,从而提升整体应用系统的效率。本文主要探讨了几个关键的调优策略。 首先,日志管理是数据库性能的重要因素。日志文件包含了...

    ORACLE数据库性能调优视频教程详细完整版

    内容包括: 第一章:oracle资源管理 第二章:oracle任务调度 ...第十章:性能调优好框架。 由于文件过大,只提供百度网盘下载地址和提取码,请放心下载。 信誉第一,如有任何问题,可以给我发私信或者评论区留言

    浅谈Oracle数据库性能调优.pdf

    【Oracle数据库性能调优】是IT领域中针对大型企业级应用的重要话题,Oracle数据库作为广泛使用的的关系型数据库管理系统,其性能优化直接关系到系统运行效率和用户体验。本文将深入探讨影响Oracle数据库性能的关键...

    oracle 数据库性能调优技术 2 中文

    ### Oracle数据库性能调优技术之深入理解单表执行计划 #### 概述 在数据库管理与维护工作中,性能调优是一项关键技能。特别是在大型企业级应用中,Oracle数据库的性能直接影响到系统的整体运行效率和用户体验。...

    上海港浦集公司ORACLE数据库性能调优.pdf

    Oracle数据库性能调优是确保系统高效稳定运行的关键环节,尤其对于像上海港浦集公司的集装箱生产系统这样的实时系统,后台数据库的性能直接影响整个系统的运行状况。由于系统是24小时不间断运行,数据库性能的降低会...

    Oracle数据库性能调优务实课件1-5

    本课程围绕"Oracle数据库性能调优务实课件1-5"展开,旨在深入理解并实践Oracle数据库的性能优化技术。 在"Oracle性能优化概述"中,我们首先会学习到性能调优的重要性以及它对业务运行效率的影响。课程可能涵盖如何...

    Oracle数据库性能调优的研究 (2).pdf

    Oracle数据库性能调优是数据库管理的关键环节,直接影响到数据库应用系统的效率和稳定性。本文主要探讨了Oracle数据库性能优化的策略、目标以及优化方法,并详细介绍了Oracle数据库的诊断和调优工具。 首先,Oracle...

    oracle 数据库性能调优技术 3 中文

    ### Oracle数据库性能调优技术——深入理解嵌套循环执行计划 #### 一、概述 本文是关于Oracle数据库性能调优技术系列文章的第三篇。在前一篇中,我们详细探讨了单表执行计划的重要性及其对多表执行计划理解的基础...

    Oracle 数据库性能调优的一些经验与体会.doc

    Oracle数据库性能调优是数据库管理员(DBA)的关键任务,旨在最大化系统效率并最小化响应时间。本篇文章基于HP8500服务器上的Oracle 9i数据库管理经验,分享了性能调优的方法和系统参数调整的原则。 首先,优化设计...

    浅谈Oracle数据库性能调优 (2).pdf

    Oracle数据库性能调优是一个DBA(数据库管理员)的重要任务,其目的是提升数据库的运行效率,降低存储空间占用,并优化查询性能。本文将围绕Oracle数据库的性能优化方法展开讨论,主要关注数据库系统的内存优化和...

    Oracle数据库性能调优技术与实现 (2).pdf

    Oracle数据库性能调优技术与实现 Oracle数据库作为目前最流行的数据库管理系统之一,广泛应用于大型数据库应用系统中。由于其市场占有率高,以及具有众多高端用户,对于Oracle数据库的性能调优研究具有重要的现实...

    ORACLE数据库性能调优研究——以天津东方海陆公司为例.pdf

    【Oracle数据库性能调优】是确保企业信息系统稳定高效运行的关键技术。随着企业对Oracle数据库的依赖加深,数据库的性能调优变得尤为重要。天津东方海陆集装箱码头有限公司的案例表明,对于24小时不间断运行的生产...

    oracle 数据库性能调优技术 1 中文

    ### Oracle数据库性能调优技术——索引调优 #### 一、概述 随着信息技术的快速发展,数据库在各行各业的应用越来越广泛,对于高性能的需求也随之增加。**数据库性能调优**是一项复杂而又重要的任务,它旨在通过一...

    oracle数据库性能调优(2)

    数据库性能调优是知识密集型的学科,需要综合考虑各种复杂的因素:数据库缓冲区的大小、索引的创建、语句改写等等。总之,数据库性能调优的目的在于使系统运行得更快。数据库调优技术可以在不同的数据库系统中使用。...

Global site tag (gtag.js) - Google Analytics