`
yangzb
  • 浏览: 3503032 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Oracle数据库参数优化

阅读更多

为了访问数据库中的数据,Oracle数据库为所有用户提供一组后台进程,并且,有一些存储结构专门用来存储最近的有关对数据库访问的数据。这些存储区域可以通过减少对数据库文件的I/O次数来改善数据库性能。

数据库实例就是用来访问一个数据库文件集的一个存储结构以及后台进程的集合。它使一个单独的数据库可以被多个实例 访问(这是Oracle的并行服务器方式 )。决定实例的组成以及大小的参数存储在文件init.ora中。这个文件在实例启动时候需要装载,也可以在运行中被DBA装载 。instance的init.ora文件通常包含instance 的名字,比如一个instance叫ORA9,其init.ora将被起名为initORA9.ora。本文结合笔者实际工作中的Oracle数据库使用 经验讨论其相关参数的调整策略。

通常需要设置的参数

● DB_BLOCK_BUFFERS

该参数决定了数据库缓冲区的大小,这部分内存的作用主要是在内存中缓存从数据库中读取的数据块,数据库缓冲区越大,为用户已经在内存里的共享数据提供的内存就越大,这样可以减少所需要的磁盘物理读写次数。

在Oracle 9i以前版本数据库中,缓冲是由db_block_buffers*db_block_size来决定,db_block_size参数是在创建数据库时 设置的,它决定数据库里每个块的大小,9i以前不能改变已经存在的数据库的块大小,因此应该在最初创建数据库时就确保设置适当的数据库块大小。在创建数据 库时设置为8k,db_block_buffers*db_block_size的乘积占物理内存的20%~30%,物理内存在1G以内,可以占 20%,1G~2G之间可占25%,物理内存在2G以上,可以占30%,甚至更高。

说明:Oracle 8i以后的数据缓冲区(data buffer)实际可由三部分组成,分别是默认池、保留池(buffer keep)和回收池(buffer recycle)。保留池可用于存放需要极快的访问的小表,回收池可用于存放需要全表扫描的大表。保留池和回收池的大小分别由参数 buffer_pool_keep和buffer_pool_recycle决定。这两个参数通常在做性能调整时才设置,因此不建议设置这两个参数。

● shared_pool_size

Shared pool由三部分组成,分别是Dictionary cache(包括数据字典的定义,如表结构、权限等)、Library cache(包括共享的sql游标、sql原代码以及执行计划、存储过程和会话信息)和Control structure。它的大小由初始化参数shared_pool_size控制,它的作用是缓存已经被解析过的SQL,使其能被重用,不用再解析。 SQL的解析非常消耗CPU的资源,如果一条SQL在Shared pool中已经存在,则进行的仅是软解析(在Shared pool中寻找相同SQL),这将大大提高数据库的运行效率。当然,这部分内存也并非越大越好,太大的Shared pool,Oracle数据库为了维护共享结构,将付出更大的管理开销。

这个参数的设置建议在150M~500M之间。如果系统内存为1G,该值可设为150M~200M;如果为2G,该值设为250M~300M;每增加1G内存,该值增加100M;但该值最大不应超过500M。(Shared pool不足,Oracle将报4031错)。

● shared_pool_reserved_size

它的作用是在shared pool中保留一块区域以放置一些大对象(如大型软件包),如不设置此参数,系统缺省保留5%的shared pool空间用于放置大对象,不建议设置该参数,让系统自动分配即可。

● Sort_area_size

该参数是当查询需要排序的时候,Oracle将使用这部分内存做排序,当内存不足时,使用临时表空间做排序。这个 参数是针对会话(session)设置的,不是针对整个数据库。即如果应用有170个数据库连接(session),假设这些session都做排序操 作,则Oracle会分配8×170等于1360M内存做排序,而这些内存是在Oracle的SGA区之外分配的,即如果SGA区分配了1.6G内 存,Oracle还需要额外的1.3G内存做排序。

建议该值设置不超过3M,当物理内存为1G时,该值宜设为1M或更低(如512K);2G时可设为2M;但不论物理内存多大,该值也不应超过3M。

● sort_area_retained_size

这个参数的含义是当排序完成后至少为session继续保留的排序内存的最小值,该值最大可设为等于 Sort_area_size。这样设置的好处是可以提高系统性能,因为下次再做排序操作时不需要再临时申请内存,缺点是如果Sort_ara_size 设得过大并且session数很多时,将导致系统内存不足。建议该值设为Sort_area_size的10%~20%左右,或者不设置(缺省为0)。

● Log_buffer

Log_buffer是重做日志缓冲区,对数据库的任何修改都按顺序被记录在该缓冲,然后由LGWR进程将它写入 磁盘。LGWR的写入条件是:用户提交、有1/3重做日志缓冲区未被写入磁盘、有大于1M重做日志缓冲区未被写入磁盘、超时、DBWR需要写入的数据的 SCN 号大于LGWR记录的SCN 号,DBWR 触发LGWR写入。从中可以看出,大于1M的log buffer值意义并不大,建议不论物理内存多大,该值统一设为1M。

● Large_pool_size

Oracle的large_pool用于MTS、并行查询和RMAN。如果使用了MTS或RMAN,large_pool特别有用,它可以降低用户对shared_pool的争用,这个参数不推荐设置。(或设为1M)。

● Java_pool_size

Oracle 8i以后版本中,Oracle数据库内置了对Java的支持,短消息系统并未使用这些功能,因此java_pool_size的值可以减少到1M。但如果 数据库安装时选择了JServer组件,则这个值可以设置为20M~30M之间。(可以查询v$option动态视图,如果java那一项值为true, 则表示安装了JServer,为false,表示未安装)。

● SESSION_CACHED_CURSOR

该参数指定要高速缓存的会话游标的数量。对同一SQL语句进行多次语法分析后,它的会话游标将被移到该会话的游标高速缓存中。这样可以缩短语法分析的时间,因为游标被高速缓存,无需被重新打开。设置该参数有助于提高系统的运行效率,建议无论在任何平台都应被设为50。

● re_page_sga

该参数表示将把所有SGA装载到内存中,以便使该实例迅速达到最佳性能状态。这将增加例程启动和用户登录的时间,但在内存充足的系统上能减少缺页故障的出现。建议在2G以上(含2G)内存的系统都将该值设为true。

● ML_LOCKS

该参数表示所有用户获取的表锁的最大数量。对每个表执行 DML 操作均需要一个 DML锁。例如,如果3个用户修改 2 个表,就要求该值为 6。该值过小可能会引起死锁问题。这个参数同transaction参数有关系,缺省为4倍的transaction大小。建议该参数不应该低于600, 可以检查系统的当前值,若比600小,则将transaction参数改为150以上,dml_locks参数会自动变为transaction的4倍。

● OB_QUEUE_PROCESS

该参数指定每个例程的SNP作业队列进程的数量。当使用job或复制时,一定要设置该参数,推荐设为3或4。

并行查询中需要设置的参数

并行查询仅当在多CPU处于空闲状态且数据分布在不同磁盘时才会对某些查询(有全表扫描操作)的性能产生有益的影响,而且即使在这种情况下,并行查询服务器的最大数量最好也不要超过CPU的数量。这里面应该修改的参数如下。

● DB_FILE_MULTIBLOCK_READ_

COUNT

该参数主要同全表扫描有关。当Oracle在请求大量连续数据块的时候,该参数控制块的读入速率。 DB_FILE_MULTIBLOCK_READ_COUNT参数能对系统性能产生较大的影响,它和DB_BLOCK_SIZE参数之间有重要关系。因为 在Unix物理层上,Oracle总是以最小64K的数据库块进行读入,因此应该使这2个参数的乘积为64K。即如果DB_BLOCK_SIZE为 8192,则DB_FILE_MULTIBLOCK_READ_COUNT应设为8。

● DB_BLOCK_LRU_LATCHES

在多CPU机器上通过初始化参数DB_BLOCK_LRU_LATCHES允许多个LRU锁存器。当DBWR和服 务器进程扫描数据块缓冲Cache时,它们需要获取LRU锁存器。这种锁存器对于避免缓冲区变脏以及避免被其他进程改变都是必要的,这也避免了扫描时返回 不一致的结果。如果没有使用锁存器,某个扫描自由缓冲区的进程可能会发现一个自由缓冲区,但是立刻就可能被其他进程使用。每一个LRU 锁存器至少保护50个数据块缓冲区。所有缓冲区都被Oracle基于Hash算法分配到特定的LRU锁存器之上。如果该值太小,在数据库活动量很大时就会 潜在地导致竞争。在多CPU机器之上这种竞争会高一些,这是因为多个服务器进程可能排队以获取一个LRU Cache。该参数默认值为CPU个数的一半,在多CPU系统中,推荐设为等于CPU数目或CPU数目的2倍~3倍(在Oracle 9i中,该参数已经变为一个隐含参数)。

● OPEN_CURSORS

指定一个会话一次可以打开的游标 (环境区域) 的最大数量,并且限制PL/SQL使用的PL/SQL游标高速缓存的大小,以避免用户再次执行语句时重新进行语法分析。请将该值设置得足够高,这样才能防止应用程序耗尽打开的游标。此值建议设置为250~300。

● LOG_CHECKPOINT_INTERVAL

该参数同检查点有关,检查点由ckpt 进程执行,检查点发生时Oracle会同步数据文件、控制文件和redo文件。该参数指定当写入重做日志文件中的OS 块 (而不是数据库块) 的数量达到设定值时,强制执行一次检查点。该值较低可以缩短例程恢复所需的时间,但可能导致磁盘操作过量。在Oracle 8i中该值缺省为100000。当值为0时,表示此参数不起作用。该参数的设定需要考虑的因素较多,建议使用缺省值。

● LOG_CHECKPOINT_TIMEOUT

该参数仍然同检查点有关。它指定距下一个检查点出现的最大时间间隔(秒数)。将该时间值指定为0,将禁用以时间为 基础的检查点。较低的值可以缩短例程恢复的时间,但可能导致磁盘操作过量。在8i中该值缺省为1800。如果想强制某一时间段后执行检查点,则用此选项。 不建议修改该值。

Oracle 8i OPS的特殊参数设置。

OPS是指Oracle并行服务器(Oracle Parallel Server),它允许多个实例在同一时刻访问单一的数据库。OPS增强了数据库的可用性,单个节点的故障并不会使整个数据库不可用。而且如果应用分割合 理,OPS也可以提高系统的处理性能。但由于OPS本身的复杂性,如果对并行操作的使用不当,经常会出现系统操作性能比单节点还慢的结果。

在OPS中,Oracle通过集成分布式锁管理器(Integrated Distributed Lock Manager,IDLM)来协调资源的使用,防止发生冲突。一旦某个节点上的实例启动后,它就可以获取各种各样的DLM锁,这些锁主要划分为 PCM(Parallel Cache Management,并行Cache管理)锁和非PCM锁。并行Cache管理是一种技术,这种技术允许多个实例同时访问共享资源。它允许一个节点访问 位于另一个节点的缓冲区Cache中的数据。PCM锁用于锁住数据库块,非PCM锁用于锁住所有其他的共享DLM资源(例如共享池中的数据文件和对象)。

Oracle 9i中主要参数设置

● undo_management

Oracle 9i中新引入了undo tablespace,它可以自动管理Oracle的回滚,不再需要手工建立回滚段,但9i也支持继续使用手工建立的回滚段。由 Undo_management参数决定是使用undo tablespace还是使用手工建立的回滚段。如果该参数为auto,则表示使用undo tablespace。为manual,表示使用手工管理回滚段,这时同8i一样,也需要建立回滚表空间,且要建立回滚段。在9i R2(9i R2指Oracle 9.2.X.X,下同)中,该参数缺省值为auto。建议继续使用该缺省值,即使用undo tablespace,也不用手工建立回滚段。

● undo_retention

该参数的单位为秒,当undo_management参数为auto时,undo_retention表示在 undo_tablespace中保留多长时间的回滚信息,Oracle 9i的flash_back功能同该值有关。该值设为多大同undo_tablespace的大小有关,在9i R2中缺省值为10800,一般情况下已经够了,不建议修改该参数。

● sga_max_size

Oracle 9i中该值决定了SGA区的最大值。只要SGA区不大于该值,就可以动态调整数据库缓冲区和share pool的大小。建议该值取物理内存的50%。

● db_cache_size

在Oracle 9i中,数据库缓冲区的大小由db_cache_size决定,Oracle 8i中的db_block_buffers被取消。db_cache_size的单位是字节,它直接决定了数据库缓冲区的大小,而不再是块的数量。对该值 的建议值可以参照Oracle 8i中对数据库缓冲区的大小建议来设置。

● db_nk_cache_size

这是Oracle 9i中引入的新参数。Oracle 9i允许以不同的数据库块大小(db_block_size)建立表空间。比如标准db_block_size(即建立数据库时定义的大小)为 8k,Oracle 9i还允许以4k、16k、32k等不同的db_block_size值建立表空间。与此相对应,需要建立不同块尺寸的数据库缓冲区,这就需要定义 db_nk_cache_size,如db_4k_cache_size等。考虑到我们系统的实际情况,不建议配置该参数。

● workarea_size_policy

这也是Oracle 9i新引入的参数,如果该参数设为auto,Oracle会为所有的session在SGA区之外分配一块大的内存区域做为UGA,该内存由 pga_aggregate_target设置。每个session都在这块大内存区中做排序等操作,从而不用再设置其他的“*_area_size” 参数。该值在Oracle 9i中缺省设为auto,建议继续使用缺省值。

● pga_aggregate_target

该参数指定连接到例程的所有服务器进程的目标 PGA 总内存。建议对该值设置为每1G内存增加100M,但最大不要超过500M。设置了workarea_size_policy和 pga_aggregate_target参数后,不用再设置sort_area_size等参数。

分享到:
评论

相关推荐

    ORACLE数据库参数优化与分析

    ORACLE数据库参数优化与分析 ORACLE数据库参数优化与分析 ORACLE数据库参数优化与分析 ORACLE数据库参数优化与分析 ORACLE数据库参数优化与分析 ORACLE数据库参数优化与分析

    oracle数据库性能优化.pdf

    Oracle数据库性能优化是确保系统高效运行的关键环节,尤其是在大数据量和高并发的环境中。Oracle数据库因其先进、完整和集成的特性,在市场中占据主导地位,因此深入理解和掌握Oracle的优化技术至关重要。 首先,...

    ORACLE数据库设计与优化

    《ORACLE数据库设计与优化》 Oracle数据库是全球广泛使用的大型关系型数据库系统之一,它在数据存储、处理和管理方面具有强大的功能。本主题主要探讨Oracle数据库的设计原则和优化策略,以提升系统的性能和效率。 ...

    VMS操作系统下ORACLE数据库的优化.pdf

    通过对硬件性能提升、VMS操作系统资源参数调整和Oracle数据库参数优化的综合实施,包钢CSP生产线的计算机系统稳定性得到了显著提升,运行效率也大幅改善。这意味着生产过程中的数据库崩溃问题得到了解决,对现场物料...

    Oracle 数据库性能优化与运维最佳实践

    首先,性能优化涉及多个层面,包括SQL查询优化、存储结构优化、索引设计以及数据库参数调整。SQL查询优化是核心,通过分析和重构SQL语句,减少全表扫描,利用索引,避免笛卡尔积等方法,可以显著提高查询速度。存储...

    Oracle数据库参数设置

    Oracle 数据库参数设置是指对 Oracle 数据库的各个参数进行调整和优化,以提高系统性能和稳定性。 Oracle 数据库参数主要包括磁盘 I/O、回滚段、redo 日志、SGA 参数等。 磁盘 I/O 是 Oracle 数据库的性能瓶颈之一...

    Oracle数据库性能优化实践指南

    《Oracle数据库性能优化实践指南》是一本专注于提升Oracle数据库运行效率的专业资料,旨在帮助数据库管理员和IT专业人士解决在日常工作中遇到的各种性能问题。通过深入理解Oracle数据库的工作原理和调优技术,读者...

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

    《ORACLE数据库参数设置技术手册》是一份详细指导如何配置Oracle数据库系统参数的重要参考资料,尤其对于数据库管理员和系统架构师来说,是优化数据库性能、确保系统稳定运行的关键工具。手册内容涉及了数据库的多个...

    Oracle数据库性能优化.pdf

    Oracle数据库性能优化是确保数据库高效运行的关键环节,尤其是在处理大量数据和高并发访问的环境中。Oracle作为业界领先的数据库管理系统,其性能优化策略涵盖多个层面,包括系统配置、数据库设计、SQL语句优化、...

    Oracle数据库查询优化的方法

    Oracle数据库查询优化是数据库管理中的关键环节,它旨在提高数据检索速度,降低系统资源消耗,提升整体系统性能。本文将深入探讨Oracle数据库查询优化的各种方法和技术。 首先,我们从SQL语句的编写入手。良好的SQL...

    oracle数据库性能优化 合集 中文

    Oracle数据库是全球广泛使用的大型关系型数据库管理系统,其性能优化是一项关键任务,直接影响到系统的响应速度、资源利用率和整体稳定性。本合集包含了11个文档,全面涵盖了Oracle数据库性能优化的各种方面,旨在...

    《Oracle数据库性能优化实践指南》PDF

    《Oracle数据库性能优化实践指南》是一本专注于Oracle数据库性能调优的专业书籍,旨在帮助读者深入理解和掌握如何在实际环境中提升Oracle数据库的运行效率。Oracle数据库是全球广泛使用的大型企业级数据库管理系统,...

    Oracle数据库优化之数据库磁盘IO

    "Oracle数据库优化之数据库磁盘IO" Oracle数据库优化之数据库磁盘IO是指数据库管理员和开发者对Oracle数据库进行优化,以提高数据库的性能和稳定性。数据库磁盘IO是影响数据库性能的重要因素之一,因此优化数据库...

    ORACLE数据库系统优化.pdf

    Oracle数据库系统优化涉及多方面,包括操作系统配置参数的优化、Oracle安装时的优化、安装后对配置参数的优化、日常维护中对某些参数的调整性优化、表空间及基表结构的优化、索引的优化、SQL语句的优化等等。...

    Oracle数据库的优化学习总结

    Oracle数据库的优化是数据库管理员和开发人员关注的重要领域,它涉及到提高系统性能、减少资源消耗以及确保数据访问的高效性。以下是对Oracle数据库优化的详细分析: 一、SQL优化 SQL查询是数据库交互的核心,优化...

    Oracle数据库性能优化方案的研究

    Oracle数据库性能优化是一项系统工程,涉及数据库参数、内存管理、磁盘I/O、网络配置以及SQL语句等多个层面的综合考量。通过合理规划与持续优化,可以显著提升数据库的运行效率,保障业务连续性和用户体验,为企业的...

    Oracle数据库优化培训.ppt

    在实际操作中,我们可能需要调整SQL语句、创建或优化索引、更新统计信息,甚至调整数据库参数来改进性能。例如,通过使用绑定变量、避免全表扫描、减少I/O操作、合理使用索引和分区,以及优化连接操作,都能显著提高...

    oracle数据库整体优化方案全

    ### Oracle数据库整体优化方案 #### 一、概述 在当今数据驱动的世界中,数据库的性能直接影响着业务的高效运行和用户体验。Oracle作为一款广泛使用的数据库管理系统,其性能优化显得尤为重要。本文将详细介绍一种...

    Oracle数据库精讲之数据库管理_ Oracle数据库管理视频

    第八讲:Oracle数据库参数文件管理 第九讲:oracle数据库启动和关闭管理 第十讲:oracle undo sapce管理 第十一讲:oracle tablespace管理 第十二讲:oracle table管理 第十三讲:oracle index管理 第十四讲:oracle...

Global site tag (gtag.js) - Google Analytics