快捷搜索:

Oracle9i的动态SGA特性探索(1) - 动态SGA

Oracle9i数据库在内部特点方面有着异常大年夜的增强,此中一个最令Oracle DBA愉快的莫过于可以动态设置整个的Oracle SGA节制参数。与8i不合的是,原本都将初始化参数放到一个文本文件中,并且在数据库启动的时刻读取,Oracle9i却可以经由过程ALTER DATABASE和ALTER SYSTEM敕令复位整个的Oracle参数。

在9i前,假如想对Oracle数据库的处置惩罚模式作一些改变的话,Oracle治理员必须关闭数据库并且从新设置INIT.ORA文件中的参数,然后从新启动数据库。对付日间应用OLTP模式运作,晚上切换到数据仓库模式的Oracle数据库来说,这种从新设置是常常做的。

对付必要竣事和从新启动Oracle数据库来改动参数来说,Oracle9i在这方面有显着的加强,它令实现数据库继续可用的目标变得加倍简单。

这种可以在Oracle SGA中动态增添和缩小不合区域的能力为Oracle数据库治理员供给了一些令人激动的新特点。SGA每个区域的数据库活动都可以自力地被监视,而且也可以在Oracle数据库中,根据应用的模式分配和取回资本。

我们首先来看以下Oracle9i数据库和Oracle8i数据库的一些差别。Oracle9i的一个最紧张的加强是对付连接到Oracle数据库的整个专用连接,都无必要拥有一个自力的PGA空间。在Oracle8i中,对付专用的Oracle连接,我们都必要在内存平分配一个自力的区域,称为Program Global Area或者PGA。PGA空间中包孕有SORT_AREA_SIZE和额外的RAM节制布局以用来掩护连接义务的状态。在Oracle9i中,PGA空间已经被Oracle SGA中的一个新内存空间代替,它是经由过程PGA_AGGREGATE_TARGET参数来设置的(见图1)。

奸淫奸淫奸淫图一奸淫奸淫奸淫奸淫

(Oracle8i与Oracle9i在内存分配上的差别)

因为整个的内存应用都在Oracle SGA平分配,以是Oracle数据库治理员可以将分配给Oracle办事器的内存加大年夜,可以分配至直到Orace办事器整个内存的80%。Oracle建议将办事器另外的20%内存保留给操作系统的义务。

当用户连接到Oracle9i数据库时,排序事情所必要的内存将会在Oracle9i的PGA_AGGREGATE_TARGET区域平分配。这可以令Oracle9i比Oracle8i跑得更快,这是因为内存只在必要的时代才分配,并且在完成后就可以顿时开释给其它连接的Oracle义务应用。

动态改动SGA区域

因为Oracle治理员现在可以增添和削减SGA的整个区域,是以我们可以快速地查看一下SGA区域是如何的,这样我们就可以知道Oracle DBA若何监视这些区域的应用并且为Oracle数据库更有效地从新分配内存。SGA的区域可以分为以下的部分。

数据缓冲(Data buffers)--Oracle9i拥有多达7个自力的数据缓冲来保存磁盘送来的数据块。这些包孕有传统的KEEP pool,RECYCLE pool和DEFAULT pool,还有为每个Oracle数据库支持的块大年夜小(2K, 4K, 8K, 16K和32K) 而建立的自力数据缓冲池(见图2)。

图2 自力的Oracle9i数据缓冲

我们可以监视这7个数据缓冲区域的射中率,假如缓冲的射中率维持在百分之九十以上,我们可以削减分配给这些数据缓冲的内存,并且将它们从新分配给其它Oracle实例中必要额外内存的地方。

当数据缓冲的射中率(DBHR)下降时,我们可以将内存由一个数据缓冲平分离出来,并且将它从新分配给其它的数据缓冲(如图3所示)。

图3 在Oracle9i的数据缓冲之间从新分配内存

SGA的阀值择要

由下面的表一可以看到,在监视SGA的内存应用时,有几个显着的阀值可以使用。我们可以写一些脚本并在此中集成一些智能,这样就可以在处置惩罚的需求变更时从新设置SGA。

RAM Area Too-small Condition Too-Large Condition

Shared pool Library cache misses No misses

Data buffer cache Hit ratio95%

PGA aggregate high multi-pass executions 100% optimal executions

表1:SGA中的非常前提唆使

查看SGA内存区域的负载

Oracle9i应用了一些新的内部视图或者在现有的视图中加入新的列来赞助查看Oracle9i中的内部内存分配环境。以下的新V$视图可以赞助监视Oracle9i连接的内存应用。

V$PROCESS -在Oracle9i中加入了三个新的列以监视PGA内存的应用,新列的名字是pga_used_mem, pga_alloc_mem 和pga_max_mem。

V$SYSSTAT -加入了很多新的统计行,包括有area statistics for optimal, one-pass和multi-pass。

V$PGASTAT -该新视图展示了整个后台进程和专用连接的PGA内存应用

V$SQL_PLAN--这个新视图包孕了整个当前履行的SQL的履行计划信息。对付必要最优化的SQL语句的机能调剂专家来说这是异常吸惹人的。

V$WORKAREA -这个新视图供给了Oracle9i连接的累积内存统计的具体信息。

V$WORKAREA_ACTIVE - 这个新的视图供给了当前整个正在履行的SQL语句的内部内存应用信息。

它们的目的是经由过程这些V$视图来监视SGA中的内存应用,然后根据Oracle实例的处置惩罚要求,经由过程ALTER SYSTEM敕令从新分配内存。我们以下来看一些这些新的Oracle9i特点和脚本,它可以赞助我们查看具体的内存应用。

Aggregate PGA auto target -该列给出了可用于Oracle9i连接的整个内存。我们已经提过,这个值是由PGA_AGGREGATE_TARGET设置的。

Global memory bound -该统计表示work area的最大年夜值,Oracle建议在该统计值下降到1M时,你应该增添PGA_AGGREGATE_TARGET的值。

Total PGA allocated - 这个统计显示了数据库中整个PGA内存应用的高水位线。当应用增添时,你应该看到这个值靠近PGA_AGGREGATE_TARGET的值。

Total PGA used for auto workareas - 这个统计监视内存的应用或者整个运行在自动内存模式中的整个连接。要记着的是,并不是整个的内部进程应用自动内存特点。例如,Java和PL/SQL 将分配内存,然则这部分将不会统计到这个值中。是以我们可应用整体PGA的值来减去该值,以获得连接和Java and PL/SQL应用的内存。

Estimated PGA memory for optimal/one-pass - 该统计预计optimal模式下履行整个的连接义务所必要的内存。要记着的是,假如Oracle9i碰到内存不够时,它就会调用multi-pass操作。这个统计对付监视Oracle9i中的内存应用是异常紧张的,大年夜多半的Oracle DBA将会增添PGA_AGGREGATE_TARGET到这个值。

现在我们已经懂得了这个观点,以下就让我们来看一下自动从新设置设置设备摆设摆设SGA有哪些措施。

总述

在一个UNIX情况中,在处置惩罚需求改变时经由过程准时义务来改动内存设置设置设备摆设摆设是异常简单的。例如,许多Oracle数据库在一样平常的事情光阴以OLTP模式运作,在晚上的时刻则运行对内存需求很大年夜的批量申报。

我们知道在一个OLTP数据库中应该将DB_CACHE_SIZE设置为一个较大年夜的值,而在需求内存很大年夜的批量义务中则必要给PGA_AGGREGATE_TARGET分配额外的内存。

以下的UNIX脚本可以用来从新设置OLTP和DSS的SGA值而无需将实例停下来。在这个例子中,我们假定有一个伶仃的带有8GB内存的的Oracle办事器。我们还假定保留20%的内存供UNIX应用,而剩下的6GB内存则用作Oracle和Oracle连接。这些脚本是在HP/UX或者Solaris中应用的,并且吸收$ORACLE_SID作为一个参数。

DSS_CONFIG.KSH脚本将在每晚的6:00 p.m运行,以从新设置Oracle在晚上运行对内存需求很大年夜的批量义务。

dss_config.ksh

#!/bin/ksh

# First, we must set the environment . . . .

ORACLE_SID=$1

export ORACLE_SID

ORACLE_HOME=`cat /etc/oratab|grep ^$ORACLE_SID:|cut -f2 -d':'`

#ORACLE_HOME=`cat /var/opt/oracle/oratab|grep ^$ORACLE_SID:|cut -f2 -d':'`

export ORACLE_HOME

PATH=$ORACLE_HOME/bin:$PATH

export PATH

$ORACLE_HOME/bin/sqlplus -s /nologin

现在我们已经知道了一个常见的要领来改动Oracle的设置设置设备摆设摆设,我们也很轻易地看到可以很简单地开拓一个技巧来继续地监控Oracle的处置惩罚需求,并且根据现有的数据库需求来应用ALTER SYSTEM作改动。

结论

虽然Oracle9i中的内存治理仍旧必要很多的手工操作,不过大年夜部分的Oracle治理员可以应用对象来继续地监控Oracle SGA中的内存应用,并且可以根据Oracle instance中现在的应用环境来自动地从新分配内存。这样就可以令Oracle 治理员根据系统的变更来机动地从新设置他们的系统。

您可能还会对下面的文章感兴趣: