Oracle内存管理(之五)

【深入解析--eygle】学习笔记

1.4. 2其他内存组件

Large Pool-大池是SGA的一个可选组件,通常用于共享服务器模式(MTS)、 并行计算或

RMAN的备份恢复等操作。

Java Pool-Java池主要用于JVM等Java选件。

Streams Pool-Streams pool是Oracle10g引入的概念,为Oracle的Streams功能所使用,如果不定义该参数,这部分内存将从Shread Pool中分配

对于SGA各部分内存分配,可以从数据库的视图中查询得到:

17:46:03 [email protected] SQL>select * from v$sga;

NAME                                          VALUE

--------------------------------------------------

Fixed Size                                  2228944

Variable Size                             335547696

Database Buffers                           75497472

Redo Buffers                                4272128

18:00:20 [email protected] SQL>

在Oracle9i中,Variable  Size  包括shared_pool_size,java_pool_size和large_pool_size部分,SGA_MAX_SIZE去除db_cache_size部分也被归入可变部分,所以很多时候我们看到的可变部分内存要远高于可变内存组件大小;

Redo Buffers指日志缓冲区分配的内存大小,这个参数值通常比log_buffers参数设置略大;因为Log  Buffer并非按照数据块大小分配,在内存中通常需要设置保护页对Log Buffer进行保护。

18:00:20 [email protected] SQL>select * from v$sgainfo;

NAME                                          BYTESRESIZE

-------------------------------------------------- ------

Fixed SGA Size                              2228944 No

Redo Buffers                                4272128 No

Buffer Cache Size                          75497472 Yes

Shared Pool Size                          171966464 Yes

Large Pool Size                             4194304 Yes

Java Pool Size                              4194304 Yes

Streams Pool Size                           8388608 Yes

Shared IO Pool Size                               0 Yes

Granule Size                                4194304 No

Maximum SGA Size                          417546240 No

Startup overhead in Shared Pool            65418776 No

Free SGA Memory Available                 146800640

12 rows selected.

18:06:23 [email protected] SQL>

当前SGA的分配和使用具体信息我们还可以通过V$SGASTAT视图查询得到:

select *

FROM(SELECT *

FROM v$sgastat

WHERE pool = ‘shared pool‘

ORDER BY BYTES DESC)

WHERE ROWNUM<= 5

18:06:23 [email protected] SQL>select *

18:08:05  2    FROM (SELECT *

18:08:05  3            FROM v$sgastat

18:08:05  4           WHERE pool = ‘sharedpool‘

18:08:05  5           ORDER BY BYTES DESC)

18:08:05  6   WHERE ROWNUM <= 5;

POOL                    NAME                                          BYTES

---------------------------------------------------------------- ----------

shared pool              free memory                                30868336

shared pool              SQLA                                       21540248

shared pool              KGLH0                                      19496600

shared pool              row cache                                   7593704

shared pool              PLMCD                                       6275624

18:08:07 [email protected] SQL>

1.4.3 SGA 与共享内存

SGA的设置在Linux/Unix上和一个操作系统内核参数有关,这个参数是:shmmax。不同操作系统,该参数设置的位置不同,在Solaris 上,该参数由/etc/system 文件中shmsys:shminfo_shmmax定义;在Linux上,该参数由/proc/sys/kernel/shmmax参数定义

很多人将该参数理解为共享内存的大小,这是不对的。实际上shmmax内核参数定义的是系统允许的单个共享内存段的最大值,如果该参数设置小于Oracle SGA设置,那么SGA仍然可以创建成功,但是会被分配多个共享内存段。我们通常推荐通过调整shmmax设置,将SGA限制在一个共享内存段中。

在Windows系统中,由于系统采用多线程服务器(所有oracle server   process 实际上都是一个进程中的线程),所以不存在共享内存的问题,无需进行特殊设置。

以64位Linux平台为例来看一下shmmax参数对于数据库的影响。

[[email protected] kernel]# uname -a

Linux felix 2.6.39-200.24.1.el6uek.x86_64 #1 SMPSat Jun 23 02:39:07 EDT 2012 x86_64 x86_64 x86_64 GNU/Linux

[[email protected] kernel]#

[[email protected] kernel]# pwd

/proc/sys/kernel

[[email protected] kernel]# ls shm*

shmall shmmax  shmmni

[[email protected] kernel]# cat shmmax

4398046511104

[[email protected] kernel]#

可以通过ipcs 命令查看此设置下共享内存的分配,我们可以看到Oracle分配了多个共享内存段以满足SGA设置的需要

[[email protected] kernel]# ipcs -sa

------ Shared Memory Segments --------

key       shmid      owner      perms     bytes      nattch     status

0x6c6c6536 0          root       600        4096       0

0x00000000 32769      gdm       600        393216     2         dest

0x00000000 65538      gdm       600        393216     2         dest

0x00000000 98307      gdm       600        393216     2         dest

0x00000000 131076     gdm       600        393216     2         dest

0x00000000 163845     gdm       600        393216     2         dest

0x00000000 229382    oracle     640       4096       0                      

0x00000000 262151    oracle     640        4096       0                      

0xb875ccb0 294920    oracle     640        4096       0     --在此可以看出,该oracle数据库使用了3个内存段                

------ Semaphore Arrays --------

key       semid      owner      perms     nsems

0x00000000 0          root       600        1

0x00000000 32769      root      600        1

0x549cc314 163842     oracle    640        154

------ Message Queues --------

key       msqid      owner      perms     used-bytes   messages

[[email protected] kernel]#

通过以上输出看到为了创建Oracle的SGA,系 统 共 分 配 了3个共享内存段。接下来针对一个后台进程,使用pmap工具查看一下每个共享内存段的地址空间

[[email protected] kernel]# ps  -ef | grep dbw

oracle   2493     1  0 10:22 ?        00:00:00 ora_dbw0_felix

root     2688  2201  0 10:31 pts/0    00:00:00 grep dbw

[[email protected] kernel]#

[[email protected] kernel]# pmap  2493

2493:  ora_dbw0_felix

0000000000400000 183412K r-x--  /u01/app/oracle/product/11.2.0/db_1/bin/oracle

000000000b91d000  1884K rwx-- /u01/app/oracle/product/11.2.0/db_1/bin/oracle

000000000baf4000   304K rwx--    [ anon ]

000000000d796000   444K rwx--    [ anon ]

0000000060000000      4K r-xs- /dev/shm/ora_felix_229382_0

0000000060001000  4092K rwxs- /dev/shm/ora_felix_229382_0

0000000060400000  4096K rwxs- /dev/shm/ora_felix_229382_1

0000000060800000  4096K rwxs- /dev/shm/ora_felix_262151_0

0000000060c00000  4096K rwxs- /dev/shm/ora_felix_262151_1

0000000061000000  4096K rwxs-  /dev/shm/ora_felix_262151_2

0000000061400000  4096K rwxs- /dev/shm/ora_felix_262151_3

0000000061800000  4096K rwxs- /dev/shm/ora_felix_262151_4

0000000061c00000  4096K rwxs- /dev/shm/ora_felix_262151_5

0000000062000000  4096K rwxs-  /dev/shm/ora_felix_262151_6

0000000062400000  4096K rwxs- /dev/shm/ora_felix_262151_7

0000000062800000  4096K rwxs- /dev/shm/ora_felix_262151_8

0000000062c00000  4096K rwxs- /dev/shm/ora_felix_262151_9

0000000077400000  4096K rwxs- /dev/shm/ora_felix_262151_91

0000000077800000  4096K rwxs- /dev/shm/ora_felix_262151_92

0000000077c00000  4096K rwxs- /dev/shm/ora_felix_262151_93

0000000078000000  4096K rwxs- /dev/shm/ora_felix_262151_94

0000000078400000  4096K rwxs- /dev/shm/ora_felix_262151_95

0000000078800000  4096K rwxs- /dev/shm/ora_felix_262151_96

0000000078c00000  4096K rwxs- /dev/shm/ora_felix_262151_97

0000000079000000  4096K rwxs- /dev/shm/ora_felix_294920_0

注意:这里的229382、262151等就是ipcs里所看到的共享内存ID(shmid)。

00000030a0800000   128K r-x--  /lib64/ld-2.12.so

00000030a0a21000      4K rwx--    [ anon ]

00000030a0c00000      4K r-x-- /lib64/libaio.so.1.0.1

00000030a138c000      4K rwx-- /lib64/libc-2.12.so

00000030a138d000    20K rwx--    [ anon ]

00000030a1400000   524K r-x--  /lib64/libm-2.12.so

00000030a1a18000      4K rwx-- /lib64/libpthread-2.12.so

00000030a1a19000    16K rwx--    [ anon ]

00000030a2207000      4K rwx-- /lib64/librt-2.12.so

00000030b1800000    32K r-x--  /usr/lib64/libnuma.so.1

00000030b2000000    88K r-x--  /lib64/libnsl-2.12.so

00000030b2016000  2044K -----  /lib64/libnsl-2.12.so

00000030b2215000      4K r-x-- /lib64/libnsl-2.12.so

00000030b2216000      4K rwx-- /lib64/libnsl-2.12.so

00000030b2217000      8K rwx--    [ anon ]

00007f7f3c5d0000    64K rwx--  /dev/zero

00007f7f3c5e0000    64K rwx--  /dev/zero

00007f7f3c5f0000   144K rwx--  /dev/zero

00007f7f3c614000  7588K rwx--    [ anon ]

00007f7f3cf8a000      4K rwx-- /lib64/libnss_files-2.12.so

00007f7f3cfab000      4K rwxs- /u01/app/oracle/product/11.2.0/db_1/dbs/hc_felix.dat

00007f7f3cfac000  1296K rwx--    [ anon ]

00007f7f3d0f0000      8K r-x-- /lib64/libdl-2.12.so

00007f7f3d0f2000  2048K -----  /lib64/libdl-2.12.so

00007f7f3d2f2000      4K r-x-- /lib64/libdl-2.12.so

00007f7f3d2f3000      4K rwx-- /lib64/libdl-2.12.so

00007f7f3d2f4000      4K rwx--    [ anon ]

00007f7f3d2f5000    44K r-x-- /u01/app/oracle/product/11.2.0/db_1/lib/libocrutl11.so

00007f7f3d300000  1024K ----- /u01/app/oracle/product/11.2.0/db_1/lib/libocrutl11.so

00007f7f3d400000      4K rwx-- /u01/app/oracle/product/11.2.0/db_1/lib/libocrutl11.so

00007f7f3d401000   652K r-x-- /u01/app/oracle/product/11.2.0/db_1/lib/libocrb11.so

00007f7f3d4a4000  1020K ----- /u01/app/oracle/product/11.2.0/db_1/lib/libocrb11.so

00007f7f3d5a3000      8K rwx-- /u01/app/oracle/product/11.2.0/db_1/lib/libocrb11.so

00007f7f3d5a5000      4K rwx--    [ anon ]

00007f7f3d5a6000   668K r-x-- /u01/app/oracle/product/11.2.0/db_1/lib/libocr11.so

00007f7f3df1c000  1020K -----  /u01/app/oracle/product/11.2.0/db_1/lib/libhasgen11.so

00007f7f3e01b000   136K rwx-- /u01/app/oracle/product/11.2.0/db_1/lib/libhasgen11.so

00007f7f3e03d000    28K rwx--    [ anon ]

00007f7f3e044000   136K r-x-- /u01/app/oracle/product/11.2.0/db_1/lib/libdbcfg11.so

00007f7f3e066000  1020K ----- /u01/app/oracle/product/11.2.0/db_1/lib/libdbcfg11.so

00007f7f3e609000   264K rwx-- /u01/app/oracle/product/11.2.0/db_1/lib/libnnz11.so

00007f7f3e64b000   144K rwx--    [ anon ]

00007f7f3e66f000   864K r-x-- /u01/app/oracle/product/11.2.0/db_1/lib/libskgxp11.so

00007f7f3e9ab000    40K rwx-- /u01/app/oracle/product/11.2.0/db_1/lib/libcell11.so

00007f7f3e9b5000      8K rwx--    [ anon ]

00007f7f3eab8000      4K rwx-- /u01/app/oracle/product/11.2.0/db_1/lib/libodmd11.so

00007f7f3eab9000      4K rwx--    [ anon ]

00007fffba5e0000   132K rwx--    [ stack ]

00007fffba7a6000      4K r-x--    [ anon ]

ffffffffff600000      4K r-x--    [ anon ]

total           656228K

为了避免多个共享内存段,可以修改shmmax内核参数,使SGA存在于一个共享内存段中。通过修改/proc/sys/kernel/shmmax参数可以达到此目的。

以下是一个环境中的设置:

[[email protected] root]# echo 1610612736 >/proc/sys/kernel/shmmax

[[email protected] root]# more /proc/sys/kernel/shmmax

1610612736

这里修改为1.5G。对于shmmax
文件的修改,系统重新启动后会复位。
可以通过修改/etc/sysctl.conf
文件使更改永久化。在该文件内添加以下一行,这个更改在系统重新启动后生效:

kernel.shmmax =1610612736

修改shmmax之后,需要重起数据库使更改生效。

通常,如果没有修改shmmax参数,Oracle在启动过程中就会在告警日志文件中记录如下警告:

Starting ORACLE instance (normal)

Thu Nov 17 09:27:29 2005

WARNING: EINVAL creating segment of size 0x0000000033400000

fix shm parameters in /etc/system or equivalent

这是一个WARNING的?示,说明是建议修正,但并非强制的内容。在Solaris平台上,有时候也会看到类似的警报:

Sun Apr 30 05:35:20 2006

Starting ORACLE instance (normal)

Sun Apr 30 05:35:20 2006

WARNING: Not enough physical memory forSHM_SHARE_MMU segment of size 0x000000006d400000

[flag=0x4000]

这通常是因为SGA设置过大,超过了物理内存而导致的,这种情况通过修正参数即可解决。有时候这类警告也可能是因为数据库异常关闭,后台进程未正常退出,共享 内 存 未 及 时 释放引起的,对于这种情况,可以通过ipcs命令找到共享内存段id(shared memory id),然后通过ipcrm命令可以强制释放该共享内存段,完成这些特殊处理后,数据库通常就可以正常启动了。

1.4.4  9i SGA管理

从Oracle9i开始,Oracle 推出了动态SGA调整,也就是说,允许我们不重新启动数据库而使得SGA的修改生效

在Oracle9i中,我们可以设置参数SGA_MAX_SIZE,该参数用以控制各缓冲池使用的内存总和,本质上是在进程中预先分配一段虚拟地址备用而不分配物理内存,目的是防止和进程私有地址段的冲突:

11:00:10 [email protected] SQL>show parameter sga_max

NAME                                 TYPE                   VALUE

---------------------------------------------------------- ------------------------------

sga_max_size                         big integer            400M

11:00:15 [email protected] SQL>

11:08:02 [email protected] SQL>select tname from tab where tname like‘%ADVICE%‘;

TNAME

------------------------------------------------------------

WRH$_STREAMS_POOL_ADVICE

WRH$_SHARED_POOL_ADVICE

WRH$_SGA_TARGET_ADVICE

WRH$_PGA_TARGET_ADVICE

WRH$_MTTR_TARGET_ADVICE

WRH$_MEMORY_TARGET_ADVICE

WRH$_JAVA_POOL_ADVICE

WRH$_DB_CACHE_ADVICE_BL

WRH$_DB_CACHE_ADVICE

V_$STREAMS_POOL_ADVICE

V_$SHARED_POOL_ADVICE

V_$SGA_TARGET_ADVICE

V_$PX_BUFFER_ADVICE

V_$PGA_TARGET_ADVICE_HISTOGRAM

V_$PGA_TARGET_ADVICE

V_$MTTR_TARGET_ADVICE

V_$MEMORY_TARGET_ADVICE

V_$JAVA_POOL_ADVICE

V_$DB_CACHE_ADVICE

SAM_SPARSITY_ADVICE

GV_$STREAMS_POOL_ADVICE

GV_$SHARED_POOL_ADVICE

GV_$SGA_TARGET_ADVICE

GV_$PX_BUFFER_ADVICE

GV_$PGA_TARGET_ADVICE

GV_$PGATARGET_ADVICE_HISTOGRAM

GV_$MTTR_TARGET_ADVICE

GV_$MEMORY_TARGET_ADVICE

GV_$JAVA_POOL_ADVICE

GV_$DB_CACHE_ADVICE

DBA_HIST_STREAMS_POOL_ADVICE

DBA_HIST_SHARED_POOL_ADVICE

DBA_HIST_SGA_TARGET_ADVICE

DBA_HIST_PGA_TARGET_ADVICE

DBA_HIST_MTTR_TARGET_ADVICE

DBA_HIST_MEMORY_TARGET_ADVICE

DBA_HIST_JAVA_POOL_ADVICE

DBA_HIST_DB_CACHE_ADVICE

38 rows selected.

11:08:24 [email protected] SQL>

其中和SGA相关的是V$DB_CACHE_ADVICE和V$SHARED_POOL_ADVICE,这些新功能通过在数据库运行时持续不断的收集信息,从而对内存的设置?供建议。

缓冲区高速缓存建议(buffer cacheadvisory) 受初始化参数DB_CACHE_ADVICE控制。该参数为动态参数,可用的值有三个OFF、ON 和READY。

DB_CACHE_ADVICE 不同参数值的含义分别如下:

OFF-关闭建议并且不为建议分配内存

ON-开启建议并且CPU 和内存开销都会发生

READY-关闭建议但是仍保留为建议分配的内存

在某些版本中,如果在参数为OFF 状态时尝试将其设置为ON 可能会出现ORA-4031错误,无法从共享池中分配内存;如果参数处于READY 状态则可以将其设置为ON 而不会发生错误,这是因为需要的内存已经分配。

11:08:24 [email protected] SQL>show parameterdb_cache_ad

NAME                                 TYPE                   VALUE

---------------------------------------------------------- ------------------------------

db_cache_advice                      string                 ON

11:13:35 [email protected] SQL>

我们看一下一个数据库中,Oracle收集的buffer cache建议信息:

11:13:35 [email protected] SQL>select id,

11:17:28  2         name,

11:17:28  3         block_size,

11:17:28  4         size_for_estimate         sfe,

11:17:28  5         size_factor               sf,

11:17:28  6        estd_physical_read_factor eprf,

11:17:28   7        estd_physical_reads       epr

11:17:28  8    from v$db_cache_advice;

ID NAME       BLOCK_SIZE        SFE         SF       EPRF        EPR

------------ ---------- ---------- ---------- ---------- ----------

3DEFAULT          8192          4     .0588     1.4798      20700

3DEFAULT          8192          8     .1176     1.3237      18517

3DEFAULT          8192         12     .1765     1.2074      16890

3DEFAULT          8192         16     .2353     1.1395      15940

3 DEFAULT          8192         20     .2941     1.1236      15717

3DEFAULT          8192         24     .3529     1.1033      15434

3DEFAULT          8192         28     .4118     1.0896      15242

3DEFAULT          8192         32     .4706     1.0838      15161

3DEFAULT          8192         36     .5294     1.0759      15050

3DEFAULT          8192         40     .5882     1.0715      14990

3DEFAULT          8192         44     .6471     1.0643      14889

3DEFAULT          8192         48     .7059     1.0614      14848

3DEFAULT          8192         52     .7647     1.0542      14747

3DEFAULT          8192         56     .8235     1.0441      14606

3DEFAULT          8192         60     .8824     1.0412      14565

3 DEFAULT          8192         64     .9412     1.0094      14120

 3 DEFAULT          8192         68          1          1     13989

3DEFAULT          8192         72    1.0588      .9964      13938

3DEFAULT          8192         76    1.1176      .9942      13908

3DEFAULT          8192         80    1.1765      .9877      13817

20 rows selected.

11:17:28 [email protected] SQL>

我们可以看到,伴随db_cache_size的增大,估计的物理读(estd_physical_reads)在逐渐减少,我们的选择就在于在db_cache_size的设置和physical_reads之间寻找一个边际效益最高点,使用可以接受的内存设置,获得尽量低的物理读。

而对于Shred  Pool
的建议则受到另外一个初始化参数的影响,这个参数是: STATISTICS_LEVEL。
STATISTICS_LEVEL控制数据库收集的统计信息的级别,该参数有三个选项:

(1)BASIC-收集基本的统计信息

(2)TYPICAL-收集大部分的统计信息,这是系统的缺省设置,为了从Oracle不断增加的新特性中受益,始终应该将该参数设置为典型.

(3)ALL-收集全部的统计信息.

可以通过v$statistics_level视图来查看该参数的影响范围,在Oracle11g中该视图中的条目已经增加到24个:

11:35:29 [email protected] SQL>col STATISTICS_NAME fora30;

11:35:52 [email protected] SQL>select STATISTICS_NAME,

11:36:00  2         SESSION_STATUS,

11:36:00  3         SYSTEM_STATUS,

11:36:00  4         ACTIVATION_LEVEL,

11:36:00  5         SESSION_SETTABLE

11:36:00  6    from v$statistics_level;

STATISTICS_NAME                SESSION_STATUS   SYSTEM_STATUS    ACTIVATION_LEV SESSIO

------------------------------ -------------------------------- -------------- ------

Buffer Cache Advice            ENABLED          ENABLED          TYPICAL        NO

MTTR Advice                    ENABLED          ENABLED          TYPICAL        NO

Timed Statistics               ENABLED          ENABLED          TYPICAL        YES

Timed OS Statistics            DISABLED         DISABLED         ALL            YES

Segment Level Statistics       ENABLED          ENABLED          TYPICAL        NO

PGA Advice                     ENABLED          ENABLED          TYPICAL        NO

Plan Execution Statistics      DISABLED         DISABLED         ALL            YES

Shared Pool Advice             ENABLED          ENABLED          TYPICAL        NO

Modification Monitoring        ENABLED          ENABLED          TYPICAL        NO

Longops Statistics            ENABLED          ENABLED          TYPICAL        NO

Bind Data Capture              ENABLED          ENABLED          TYPICAL        NO

Ultrafast Latch Statistics     ENABLED          ENABLED          TYPICAL        NO

Threshold-based Alerts         ENABLED          ENABLED          TYPICAL        NO

Global Cache Statistics        ENABLED          ENABLED          TYPICAL        NO

Active Session History         ENABLED          ENABLED          TYPICAL        NO

Undo Advisor, Alerts and Fast  ENABLED          ENABLED          TYPICAL        NO

Ramp up

Streams Pool Advice            ENABLED          ENABLED          TYPICAL        NO

Time Model Events              ENABLED          ENABLED          TYPICAL        YES

Plan Execution Sampling        ENABLED          ENABLED          TYPICAL        YES

Automated Maintenance Tasks    ENABLED          ENABLED          TYPICAL        NO

SQL Monitoring                 ENABLED          ENABLED          TYPICAL        YES

Adaptive Thresholds Enabled    ENABLED          ENABLED          TYPICAL        NO

V$IOSTAT_* statistics          ENABLED          ENABLED          TYPICAL        NO

23 rows selected.

可以看到在TYPICAL设置下,除Timed OS Statistics 
和  Plan Execution Statistics  信息不收集外,其他信息都被收集
。其中,  Buffer  Cache Advice 
受  db_cache_advice 参数独立控制, Timed  Statistics 
受  timed_statistics  参数独立控制。其他统计信息的收集都受到STATISTICS_LEVEL 
参数的控制。当STATISTICS_LEVEL为Basic时,除受独立参数影响的Buffer Cache Advice 
和TimedStatistics  外,其他信息收集都将被禁止。

我们可以通过查询V$SHARED_POOL_ADVICE视图获得关于Shared Pool的建议信息:

11:36:01 [email protected] SQL>selectSHARED_POOL_SIZE_FOR_ESTIMATE SPSFE,

11:47:38  2        SHARED_POOL_SIZE_FACTOR      SPSF,

11:47:38  3         ESTD_LC_SIZE,

11:47:38  4         ESTD_LC_MEMORY_OBJECTS        ELMO,

11:47:39  5         ESTD_LC_TIME_SAVED            ELTS,

11:47:39  6        ESTD_LC_TIME_SAVED_FACTOR    ELTSF,

11:47:39  7        ESTD_LC_MEMORY_OBJECT_HITS   ELMOH

11:47:39  8    from v$shared_pool_advice;

SPSFE       SPSF ESTD_LC_SIZE       ELMO       ELTS     ELTSF      ELMOH

---------- ---------- ------------ -------------------- ---------- ----------

104      .6341            8        834        814     .8781      25081

124      .7561           28       1903        843     .9094      25874

128      .7805           32       2109        848     .9148      25951

132      .8049           35       2318        861     .9288      26110

136      .8293           39      2508        867     .9353      26201

140      .8537           42       2715        873     .9417      26293

144       .878           46       2914        882     .9515      26404

148      .9024           50       3162        889       .959     26515

152      .9268           50       3221        897     .9676      26787

156      .9512           50       3221        904     .9752      27085

160      .9756           50       3221        916     .9881      28117

164          1           50       3221        927          1     29153

168     1.0244           50       3221        927          1     29157

172     1.0488           50       3221        927          1     29157

176     1.0732           50       3221        927          1     29157

180     1.0976           50       3221        927          1     29157

184      1.122           50       3221        927          1     29157

188     1.1463           50       3221        927          1     29157

192     1.1707           50       3221        927          1     29157

196     1.1951           50       3221        927          1     29157

200     1.2195           50       3221        927          1     29157

204     1.2439           50       3221        927          1     29157

224     1.3659           50       3221        927          1     29157

244     1.4878           50       3221        927          1     29157

264     1.6098           50       3221        927          1     29157

284     1.7317           50       3221        927          1     29157

304     1.8537           50       3221        927          1     29157

324     1.9756           50       3221        927          1     29157

344     2.0976           50       3221        927          1     29157

29 rows selected.

11:47:40 [email protected] SQL>

通过以上统计数据分析,当shared_pool_size设置为304M时即可达到和现在相同的效果,

目前的shared_pool_size设置浪费了部分内存,那么我们就可以动态调整shared_pool_size参数,

释放这部分内存,留给其他内存组件使用。

SQL> alter system setshared_pool_size=304M;

当进行动态参数修改时,修改Session会处于等待状态,等待事件为background parameter

adjustment:

SQL> selectsid,seq#,event,SECONDS_IN_WAIT,state

2 from v$session_waitwhere sid=80;

SID  SEQ# EVENT    SECONDS_IN_WAIT STATE

---------- ------------------------------------------------------------------------80  46479  background parameter adjustment    928  WAITING

这个调整的时间可能极其漫长,从v$lock视图中,我们还可以获得相关锁定信息:

SQL> select * fromv$lock where sid=80;

ADDR KADDR SID TYPE ID1ID2 LMODE

REQUEST CTIME BLOCK

-------------------------------- ---------- ---- ---------- ---------- ------------------------------ ----------00000003CF3D6048 00000003CF3D6068 80 PE 44 0 4

0 1437 0

锁定类型为PE,即Kernel Service system Parameters ENQUEUE,在修改系统参数时需要获取该锁定。

需要提醒的是,虽然Oracle9i中,Oracle提供了动态内存修改的功能,但是仍然建议在系统规划时做好设置,尽量避免运行时的动态调整。动态调整某些系统参数(如undo_retention 
等)在繁忙的系统中可能触发bug而造成系统挂起。

Oracle内存管理(之五),布布扣,bubuko.com

时间: 2024-12-21 23:22:18

Oracle内存管理(之五)的相关文章

黑马程序员----内存管理之五《ARC-自动引用计数》

内存管理之五<ARC-Automatic Reference Counting> 1.ARC概念 ARC是Automatic Reference Counting---自动引用计数. ARC是一种编译器特性,并不是java中得垃圾回收,java中的垃圾回收是运行时特性: ARC的判断准则:只要没有强指针指向对象,就会释放对象: 2.ARC的特点 不允许调用release.retain.retainCount: 允许重写dealloc方法,但是重写时不用再调用父类的dealloc方法 即 [su

Oracle内存管理(之二)

[深入解析--eygle] 学习笔记 1.2.2 UGA和CGA UGA(用户全局区)由用户会话数据.游标状态和索引区组成.在共享服务器模式下,一个共享服务进程被多个用户进程共享,此时UGA是Shared Pool或Large Pool的一部分,而在专用服务器模式下,UGA则是PGA的一部分. 不考虑Shared  Server模式,在Dedicated模式下,PGA与UGA关系,就如同Process和Session的关系,PGA是服务于进程的内存结构,包含进程信息:而UGA是服务于会话的,它包

Oracle内存管理(之四)

[深入解析--eygle]学习笔记 1.3 SGA管理 SGA指系统全局区(System Global Area),是一块用于加载数据.对象并保存运行状态和数据库控制信息的一块内存区域,在数据库实例启动时分配,当实例关闭时释放,每个实例都拥有自己的SGA区. 在第一章曾经?到,当数据库启动到nomount状态时,SGA已经分配,同时启动后台进程,在SQL*Plus中通过show sga命令可以看到SGA的分配情况: [email protected] SQL>show parameter sga

oracle内存管理

参考文章 参考文章 参考文章 参考文章 参考文章 oracle内存管理,布布扣,bubuko.com

Oracle 内存管理

--内存分配建库时可以先分配系统内存的50%-80%给Oracle,后期根据业务再进行调整.SGA.PGA分配比例:OLTP:SGA %80 , PGA %20OLAP:SGA %50 , PGA %50混合:SGA %60 , PGA %40 --sga自动管理statistics_level 值设置为 typical 或 all,启动 sga 自动管理.给定 sga_target 一个总的数值. --sga手动管理设置 sga_target=0 ,设置相关组件大小:java_pool_siz

【读书笔记】ORACLE 内存管理

<Administrator's Guide>第6章介绍了ORACLE实例的内存管理,在11g中,ORACLE默认使用自动内存管理(AMM)来管理SGA和PGA的大小.除了默认的方法之外,还可以使用自动共享内存管理SGA(ASMM).手动共享内存管理SGA.自动PGA内存管理.手动PGA内存管理. 一.自动内存管理 自动内存管理是最方便的内存管理方式,只需要设定参数MEMORY_TARGET的值,ORACLE 就会根据实际需要分配SGA和PGA. 1.1应用自动内存管理 1.用SYSDBA的身

Oracle 11G R2的内存管理

基本知识点 基本的内存结构:SGA+PGA+UGA+Software code area(软件代码区) 了解SGA内存的组件与一些常用的功能 了解oracle 11G地自动内存管理功能 具体介绍 oracle数据库实例是由一些列的系统全局区域与后台进程组成. 一个客户端访问数据库的方式是客户端进程---->Program global are----->Database buffer cache,同时在Redo log buffer重写一份 oracle 内存管理的方式:自动内存管理与手动内存

Oracle内存管理理论篇二

目标 了解oracle内存管理方式 掌握ASMM管理方式 掌握AMM管理方式 监控内存使用 学习一个知识点时,最好先了解其历史.ORACLE近期的版本都对内存管理做了简化,从9i通过PGA_AGGREGATE_TARGET参数实现PGA的自动管理,10g通过Automatic Shared Memory Management(ASMM)实现SGA的自动管理,到11g通过Automatic Memory Management(AMM)实现内存(SGA+PGA)的自动管理.目前的11G版本,DBA只

ORACLE内存结构简介

ORACLE数据库作为世界上一款功能强大的数据库管理软件,功能体系特别庞大.我们有必要对它的每一部分学习了解,然后才从全局的角度进行有效把握.我们会着重从理论基础体系角度再逐步到实战应用.实际上,如果没有掌握基础理论体系,而直接生搬硬套一些维护技术经验,那也只是空中楼阁罢了.而如果你想直接通过一两篇文章学到什么秘籍成为维护或是DB优化高手那也是不现实的.所以这些文适合静下心来真正想了解学习ORALCE体系的读者.方法论掌握好,起码头脑中的思路方向是正确的,至于术也就是水到渠成. 我们通常所说的O