【深度分析--eygle】学习笔记

1.4. 2其他内存组件

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

RMAN的备份恢复等操作。

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

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

 

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

 

 

17:46:03 sys@felix SQL>select * from v$sga;

 

NAME                                          VALUE

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

Fixed Size                                  2228944

Variable Size                             335547696

Database Buffers                           75497472

Redo Buffers                                4272128

 

18:00:20 sys@felix 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 sys@felix 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 sys@felix SQL>

 

 

当前SGA的分配和使用详细信息我们还能够通过V$SGASTAT视图查询得到:

 

select *

  FROM(SELECT *

         FROM v$sgastat

        WHERE pool = 'shared pool'

        ORDER BY BYTES DESC)

 WHERE ROWNUM<= 5

 

 

18:06:23 sys@felix 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 sys@felix 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參数对于数据库的影响。

 

[root@felix 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

[root@felix kernel]#

 

                                                                                                                                            

[root@felix kernel]# pwd

/proc/sys/kernel

[root@felix kernel]# ls shm*

shmall shmmax  shmmni

[root@felix kernel]# cat shmmax

4398046511104

[root@felix kernel]#


 

 

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

[root@felix 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   

 

[root@felix kernel]#


通过以上输出看到为了创建Oracle的SGA,系 统 共 分 配 了3个共享内存段

接下来针对一个后台进程。使用pmap工具查看一下每一个共享内存段的地址空间

 

[root@felix 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

[root@felix kernel]#


[root@felix 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參数能够达到此目的。

 

 

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

[root@danaly root]# echo 1610612736 >/proc/sys/kernel/shmmax

[root@danaly 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 sys@felix SQL>show parameter sga_max

 

NAME                                 TYPE                   VALUE

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

sga_max_size                         big integer            400M

11:00:15 sys@felix SQL>

 

 

 

11:08:02 sys@felix 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 sys@felix 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 sys@felix SQL>show parameterdb_cache_ad

 

NAME                                 TYPE                   VALUE

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

db_cache_advice                      string                 ON

11:13:35 sys@felix SQL>

 

 

 

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

11:13:35 sys@felix 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 sys@felix 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 sys@felix SQL>col STATISTICS_NAME fora30;

11:35:52 sys@felix 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 sys@felix 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 sys@felix 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而导致系统挂起。