`

Oracle内存配置的基本原则

阅读更多
转自:http://www.oraclefans.cn/forum/showblog.jsp?rootid=9

经常有人问我:“我们的系统有XX内存,怎么分配内存合适?”我的回答是“不知道”。这是一个很无奈的答案,因为这个问题确实无解。每个系统都有不同的特性,如果使用一种通用的模式去分配内存,那么肯定是无法达到目的的。优化内存配置的时候,首先需要注意一些原则性的问题,详细的内存分配方法,在本章的使用STATSPACK进行系统优化章节将进行进一步的介绍。以下几点是笔者在实际工作中总结的内存优化的基本原则:
第一,无论如何分配内存,绝对不能让系统存在较多的换页情况,最好的选择是让系统基本不存在换页。
第二,使用文件系统并不能给ORACLE数据库的IO性能带来好处,因此尽量使用裸设备,如果使用裸设备,SGA和PGA使用内存的总量可以高达70%,甚至更高,但是SGA、PGA、Oracle后台进程、Oracle前台进程、应用进程占用内存的总量一般不要超过系统物理内存总量的90%。上述的参考值仅仅提供参考,不能机械地说SGA和PGA不能占用超过物理内存的60%或者70%,而是要根据你的系统的实际情况进行调整。如果你的系统有很大的物理内存,那么这些指标值还可以更高,只要遵循系统不产生换页操作的原则,那么哪怕你使用了95%甚至更多的物理内存,那么你的配置也是合理的。在海量内存下,如果配置了很大的SGA,那么会消耗大量的CPU资源,因此如果数据库实际不需要使用那么多内存,配置过大的SGA会导致CPU资源的浪费。切忌在解决内存问题的同时带来新的性能故障。
第三,在内存允许的情况下,设置足够大的PGA空间,尽量避免硬盘排序。硬盘排序会造成IO压力增大和相应速度大幅度下降,因此在有条件的情况下,提高内存排序比例可以提高系统的性能。如果排序操作很大,而且物理内存也有限,那么产生部分硬盘排序也是正常的。但是如果系统中存在大量的multi-pass的硬盘排序,那么就应该加大PGA空间了。
第四,在一般情况下,共享池和各个数据块缓冲池的命中率尽量保持在95%以上(OLAP应用除外)。由于每个应用都有不同的特点,命中率指标不一定能够完全表现出数据缓冲池的实际情况,但是在大多数情况下,这个命中率具有一定的代表性。如果在使用多缓冲的情况下,总体的命中率指标超过95%不能证明数据库缓冲池没有问题。通过检查DEFAULT、KEEP、NK CACHE等的命中率情况,往往能够发现在整体命中率达标的情况下,个别缓冲区性能不佳的问题。
第五、在 Oracle 9i 之前,过大的 shared pool 会导致大量的管理开销,因此不能设置过大的 shared pool 。 Oracle 9i 改进了共享池的管理,并且采用了 subpool 机制,使大型共享池的性能得到了很大的改善。笔者曾经在 9i 数据库上使用过超过 2G 的共享池,没有发现由于共享池过大导致�性能问题。在一些移动公司的大型BOSS系统中,超过5GB的共享池也是十分常见的,我曾经见过一个有300G内存的系统,共享池配置了10GB。另外要注意的是,如果已经使用了很大的共享池,还是出现共享池不足的问题,那么调整应用比加大共享池更为有效,另外如果由于某种原因,共享池存在碎片问题,SUBPOOL可能成为一种负面的东西,这个时候禁止使用SUBPOOL会带来好的效果。如果存在较为严重的共享池碎片,那么PX MSG POOL可能会导致经常出现共享池无法分配的情况出现,这种情况下,将PX MSG POOL在LARGE POOL中分配,可以减轻共享池不足的现象,另外减少SESSION_CACHED_CURSORS也会起到好的效果。在一般情况下,过大的共享池是不正常的。过大的共享池也会带来加大 CPU 开销等问题,因此在适当的情况下加大共享池的大小,而不要片面调大共享池,在有些情况下,将 SQL 和 PL/SQL 对象 PIN 到共享池中可能比扩大共享池具有更好的效果。
第六、对于log buffer的设置,过大的log buffer不能改善REDO LOG的性能。一般来说LOG BUFFER的大小在几百K到几兆之间。Oracle 9i的安装指南建议LOG BUFFER的大小是128K*CPU的数量。对于REDO LOG产生量特别大的系统,可以使用这个建议值的2-4倍。但是过大的LOG BUFFER是没有任何意义的。

第七、一般来说,多数据缓冲池的使用会对系统的性能提高有益。由于缓冲池采用HASH链的方式进行管理,因此对于数据缓冲池很大的系统,管理单个大型缓冲池的开销要远大于管理多个较小缓冲池的开销。使用KEEP池、RECYCLE池以及NK缓冲池可以分散数据的分布,减少由于各种竞争带来的缓冲池的额外开销。

第八、通过工作缓冲(通过*_area_size参数设置)来减少SQL执行过程中使用临时表空间,可以提高SQL的响应速度,减少系统IO。如果是Oracle 9i以前的版本,通过设置合理的工作缓冲区参数,可以实现上述目标。在Oracle 9i以后的版本,可以通过PGA自动管理来管理这些缓冲区,     PGA自动管理可以大大提高各种工作缓冲区的使用率,在最小程度占用系统物理内存的情况下,提高各类工作缓冲区的使用率。

第九、LARGE POOL是和SHARED POOL类似的缓冲池,不过只有特定的BUFFER才会在LARGE POOL里分配。第一种情况,在SHARED SERVER模式(旧版本称为MTS)下,UGA空间是从LARGE POOL中分配的;第二种情况,作为顺序文件IO的缓冲区,最典型的就是RMAN备份的时候分配LARGE POOL作为缓冲区,另外从ORACLE 8I开始,如果PARALLEL_AUTOMATIC_TUNING设置为TRUE,那么并行操作的缓冲区也从LARGE POOL里分配。如果没有使用SHARED SERVER,那么系统对LARGE POOL的使用量是很小的,保持50-80M的LARGE POOL就足够了

第十、JAVA POOL是另外一个缓冲池,主要是为ORACLE JVM提供缓冲。如果应用软件很少使用JAVA的存储过程等,那么JAVA POOL不需要设置很大。

第十一、过大的数据块缓冲会导致大量的BUFFER GET扫描,增加CPU的开销。同时维护大量的缓冲池也会带来额外的CPU开销。同样,过大的共享池会导致共享池管理开销的增大。因此片面追求提高命中率的做法是不足取的。按需分配各种缓冲区的大小,不要过度分配缓冲区是一个十分重要的原则。

第十二、9i以后支持的SGA动态调整技术可以为缓冲区动态调整提供了技术手段。DBA可以根据实际情况,随时对SGA的各种缓冲进行调整。

第十三、Oracle 10G提供了自动共享内存管理(ASMM),ASMM机制可以根据系统的状态自动调整共享内存的大小。如果系统不是很大,内存资源比较充分,而且DBA的管理水平不足的话,使用ASMM可以免除DBA这方面的维护工作,使系统保持在一个较好的运行水平上。如果系统种存在性能瓶颈,而且系统的内存资源存在竞争,那么就要慎用ASMM。
分享到:
评论

相关推荐

    Oracle内存分配与调整--大牛冯春培的一篇文章

    不合理的内存配置可能导致性能下降甚至系统故障。冯春培作为一位经验丰富的Oracle专家,他的这篇文章清晰而深入地介绍了Oracle内存管理的关键方面,特别是系统全局区(SGA)和进程全局区(PGA)的配置与优化。 #### 二...

    Solaris系统平台Oracle数据库内存及其相关参数的使用原则.pdf

    Solaris系统平台Oracle数据库内存及其相关参数的使用原则.pdf

    Oracle内存参数调优技术详解

    如果实际内存不够再往虚拟内存中写。我们重点就是设置 SGA,理论上 SGA 可占 OS 系统物理内存的 1/2——1/3。 SGA 由五个区组成: 1. 数据缓冲区:用于存储由磁盘数据文件读入的数据。大小为 db_block_buffers*db_...

    ORACLE性能调整-调整内存分配.rar

    首先,我们来了解Oracle内存的基本架构,它主要由两大部分组成:PGA(Program Global Area)和SGA(System Global Area)。PGA是为每个服务器进程单独分配的内存区域,用于存储过程变量、游标、排序区等。而SGA则是...

    Oracle优化原则整理

    Oracle数据库是全球广泛使用的大型关系型数据库系统,其...以上是Oracle SQL优化的一些基本原则,但实际情况中需要结合具体业务和系统环境进行调整和优化。通过持续学习和实践,可以不断提升Oracle数据库的性能和效率。

    Oracle手工配置手册

    - **具体方法**: 在`.bash_profile`文件中找到`export ORACLE_SID=`这一行,将其设置为所需的实例名,例如`export ORACLE_SID=simondb`。 - **验证**: 完成编辑后,需要通过执行`source .bash_profile`命令来使更改...

    oracle数据库调优配置

    ### Oracle数据库调优配置:两种方案详解 在企业级应用中,Oracle数据库因其稳定性和高效性而被广泛采用。然而,随着数据量的急剧增长和业务需求的不断变化,优化Oracle数据库性能成为确保系统高效运行的关键。本文...

    oracle数据库物理设计原则概述.pdf

    Oracle 数据库物理设计原则概述 Oracle 数据库物理设计原则概述是指...Oracle 数据库物理设计原则概述包括环境配置、数据库设计原则、参数设置等几个方面。遵守这些原则可以确保 Oracle 数据库的稳定运行和高效性能。

    Oracle数据库内存参数调优技术

    通常,数据缓冲区占SGA的大部分,设置原则为可用内存的40%左右。 2. 共享池(shared_pool_size):存放数据字典、SQL语句缓存以及PL/SQL解析结果。增大共享池可以提高SQL执行速度,设置原则为可用内存的10%。 3. ...

    ORACLE数据库参数设置技术手册

    Oracle内存结构包括SGA(System Global Area)和PGA(Program Global Area),它们是数据库运行时存储数据和控制信息的关键区域。了解这些内存组件的工作原理和大小设置对整体性能至关重要。 4.1 BUFFER_POOL_KEEP...

    Oracle服务器端安装和配置

    Oracle服务器端的安装和配置是数据库管理中至关重要的一步,对于任何依赖于Oracle数据库的企业或组织来说,确保正确安装和配置Oracle服务器都是基础且必要的工作。以下将详细讲解Oracle服务器端安装和配置的过程。 ...

    oracle优化原则

    以下是对标题"oracle优化原则"及描述中提到的知识点的详细说明: 1. **选用适合的ORACLE优化器** Oracle的优化器主要有三种类型:基于规则(RULE)、基于成本(COST)和选择性(CHOOSE)。基于成本的优化器(CBO)...

    关于Oracle 数据库的配置方案

    Oracle 数据库的配置方案涉及到多种架构,以适应不同的系统需求和资源管理。这些配置包括用户/服务器进程相结合的结构、使用专用服务器进程的系统结构以及多线索服务器的系统结构。 1) 用户/服务器进程相结合的结构...

    调整Oracle应用系统性能的原则和方法

    避免过多依赖虚拟内存,因为这会导致频繁的磁盘I/O操作,降低系统效率。同时,保持Oracle进程的默认优先级,因为所有进程在Oracle系统中都有平等的重要性。 1.2 内存分配的调整 Oracle的内存管理主要包括三个关键...

    oracle 官方培训

    Oracle数据库培训大纲(2天) 基本内容 时间安排(天) 课程内容要点 基础和管理 1天 Oracle结构组件 ...Oracle的内存优化 数据库配置与IO优化 诊断工具和等待事件 SQL优化原则和案例 Oracle 10g自动SQL调整

    Oracle资料库配置

    ### Oracle资料库配置知识点 #### 一、Oracle资料库配置概览 在IT行业中,数据库管理系统(Database ...未来随着技术的发展,虽然Oracle版本可能会有所更新,但这些基本的配置原则和方法仍然具有很高的参考价值。

    ORACLE 19C SQL调优指南 中文版 Oracle DBA

    10. **内存结构优化**:包括PGA(程序全局区)、SGA(系统全局区)等,合理设置这些内存结构的大小,可以提高数据缓冲和查询缓存的效果。 11. **等待事件分析**:通过监控等待事件,可以发现数据库性能问题的根源。...

    OracleSql性能优化调整原则.doc

    标题与描述均提到了“Oracle SQL性能优化调整原则”,这是针对Oracle数据库系统中SQL查询的性能提升策略。本文将深入探讨文档中提及的关键知识点,包括优化器的选择、表访问方式的优化以及SQL语句的共享机制。 ### ...

    oracle+sql+优化原则

    Oracle SQL 优化原则是数据库管理员和开发人员提升数据库性能的关键技术。本文主要探讨了三个核心原则,即选择合适的优化器、优化访问表的方式以及共享SQL语句。 首先,Oracle提供了三种优化器:基于规则(RULE)、...

Global site tag (gtag.js) - Google Analytics