[AD]系统全局区(SGA)

一,SGA作用
oracle数据库用户都可以共享SGA中的数据,通常为了优化性能,我们总是期望在物理内存允许的情况下,设置更高的SGA区,以减少物理I/O(SGA中的数据缓冲区的增大可以有效减少物理读)。oracle对数据的处理过程中,代价最昂贵的就是物理I/O操作了。
二,BufferCache
1,在oracle 9i之前,Buffer cache的设置主要由两个参数决定:db_block_buffers和db_block_size。
2,db_block_buffers设置了分配给Buffer Cache的缓冲区数量,这个数量乘以db_block_size得出的才是Buffer Cache的大小。
3,从oracle 9i之后,oracle引入了一个新的参数db_cache_size。该参数用来定义主Block_size(db_block_size定义的大小)的Default缓冲池的大小。
4,SQL> select name ,value from v$parameter where name in ('db_block_buffers','db_block_size');
NAME
---------------------------------VALUE---------------------------------
db_block_buffers                   0
db_block_size                     8192
SQL>
5,db_cache_size最小值为一个粒度oracle 9i引入的一个新概念,连续虚拟内存分配的单位,其大小决定于估计的SGA的总大小(SGA总大小有SGA_MAX_SIZE参数得到)。如果估计的SGA的大小<128MB,则值为4MB;否则值为16MB;
这个Granule大小受到一个内部隐含参数_ksmg_granule_size 的控制。
6,内存空间有限的,oracle管理Buffer Cache使用的LRU算法,但是这又带来了另外一个问题,很多批处理操作(如全表扫描等)可能会导致Buffer Cache的刷新,将经常使用的数据"挤出"Buffer Cache,在不同的版本中,oracle不停地改进LRU算法,以避免这类操作的过度影响。oracle提供了Buffer Cache的多缓冲池技术从另外一个方面来解决这个问题。所谓的多缓冲技术是指,根据不同的数据的不同的访问方式,将Buffer Cache分为Default、Keep和Recycle池三个部分,对于常用的使用的数据,可以在建表时就指定存放在Keep池中;对于一次性读取使用 的数据,可以将其存放在Recycle池中;Keep池中的数据倾向于一直保存,Recycle池中的数据倾向于即时老化,而Default池则存放未指定存储池的数据,按照LRU算法管理。
7,默认情况下,所有表都使用DEFAULT池,它的大小就是数据缓冲区BufferCache的大小,由初始化参数db_cache_size决定。如果在 创建数据表或修改数据表时,指定STORAGE(buffer_pool_size)或者STORAGE(buffer_pool_recycle)语 句,就设置了这张表使用keep或者recycle缓冲区。这两个缓冲区的大小分别有初始化参数db_keep_cache_size和 db_recycle_cache_size来决定。
三,粒度
1,SQL> @ GetParDescrb.sql
Enter value for par: _ksmg_granule_size
old   3:  WHERE x.indx = y.indx AND x.ksppinm LIKE '%&par%'
new   3:  WHERE x.indx = y.indx AND x.ksppinm LIKE '%_ksmg_granule_size%'
NAME                           VALUE                DESCRIB
------------------------------ -------------------- ------------------------------------------------------------
_ksmg_granule_size             4194304              granule size in bytes
2, GetParDescrb.sql里面的内容:
SET linesize 120
COL name for a30
COL value for a20
COL describ for a60
SELECT x.ksppinm NAME, y.ksppstvl VALUE, x.ksppdesc describ
  FROM SYS.x$ksppi x, SYS.x$ksppcv y
 WHERE x.indx = y.indx AND x.ksppinm LIKE '%&par%';

四,查看参数
1,SQL> show parameter cache_size;
NAME                                 TYPE        VALUE
------------------------------------ ----------- -----------------
db_keep_cache_size                   big integer 4M
db_recycle_cache_size                big integer 4M
2, select id,name,block_size,current_size,target_size  from v$buffer_pool;

        ID NAME                 BLOCK_SIZE CURRENT_SIZE TARGET_SIZE
---------- -------------------- ---------- ------------ -----------
         1 KEEP                       8192            4           4
         2 RECYCLE                    8192            4           4
         3 DEFAULT                    8192          196         196

SQL>
3, SQL> select * from v$sga;,
NAME                      VALUE
-------------------- ----------
Fixed Size              1219184
Variable Size          96470416
Database Buffers      213909504
Redo Buffers            2973696
4,SQL> show sga;
5,SQL> show parameter sga_max_size;
6,Fixed Size 部分是SGA中的固定部分,包含数据库和实例的状态等通用信息,后台进程需要访问这部分信息,不存储用户的数据,通常只需要很小部分内存。
7,SQL> select * from v$sgastat;
8,SQL> select * from v$sgainfo;
NAME                                  BYTES RES
-------------------------------- ---------- ---
Fixed SGA Size                      1219184 No
Redo Buffers                        2973696 No
Buffer Cache Size                 213909504 Yes
Shared Pool Size                   58720256 Yes
Large Pool Size                     4194304 Yes
Java Pool Size                      4194304 Yes
Streams Pool Size                         0 Yes
Granule Size                        4194304 No
Maximum SGA Size                  314572800 No
Startup overhead in Shared Pool    37748736 No
Free SGA Memory Available          29360128
11 rows selected.

SQL>
五,Shmmax
1,shmmax内核参数定义的是系统允许的单个共享内存段的最大值,如果该参数小于oracle SGA设置,那么SGA仍然可以创建成功,但是会被分配多个共享内存段。通常推荐通过调整shmmax设置,将SGA限制在一个共享内存段中。
2,[root@rhel ~]# more /proc/sys/kernel/shmmax
2147483648
3,[root@rhel ~]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 5.4 (Tikanga)
4,[root@rhel ~]# uname -r
2.6.18-164.el5,
5,可以通过ipcs命令查看此设置下共享内存的分配,
[root@rhel ~]# ipcs -sa
------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status      
0x4032a294 32768      oracle    640        318767104  20                      
0x00000000 98305      root      600        393216     2          dest         
0x00000000 131074     root      600        393216     2          dest         
0x00000000 163843     root      600        393216     2          dest         
0x00000000 196612     root      600        393216     2          dest         
0x00000000 229381     root      600        393216     2          dest         
0x00000000 262150     root      600        393216     2          dest         
0x00000000 294919     root      600        393216     2          dest         
0x00000000 327688     root      600        393216     2          dest         
0x00000000 360457     root      600        393216     2          dest         
0x00000000 393226     root      600        393216     2          dest         

------ Semaphore Arrays --------
key        semid      owner      perms      nsems     
0xddaf4f30 98304      oracle    640        154       

------ Message Queues --------
key        msqid      owner      perms      used-bytes   messages   
6,[root@rhel ~]# ps -ef | grep dbw
oracle    2883     1  0 17:12 ?        00:00:00 ora_dbw0_orcl
root      5618  3276  0 19:36 pts/3    00:00:00 grep dbw
7,针对一个进程,使用pmap工具可以看到这个共享内存段的地址空间
8,[root@rhel ~]# pmap 2883
2883:   ora_dbw0_orcl
00110000    268K r-x--  /u01/app/oracle/10.2.0/db_1/lib/libocrb10.so
00153000      4K rwx--  /u01/app/oracle/10.2.0/db_1/lib/libocrb10.so
00154000    344K r-x--  /u01/app/oracle/10.2.0/db_1/lib/libocrutl10.so
001aa000     16K rwx--  /u01/app/oracle/10.2.0/db_1/lib/libocrutl10.so
001ae000      4K rwx--    [ anon ]
001af000     88K r-x--  /u01/app/oracle/10.2.0/db_1/lib/libdbcfg10.so
001c5000      8K rwx--  /u01/app/oracle/10.2.0/db_1/lib/libdbcfg10.so
001c7000     36K rwx--    [ anon ]
001d0000      4K rwxs-  /u01/app/oracle/10.2.0/db_1/dbs/hc_orcl.dat
001d1000      8K r-x--  /lib/libdl-2.5.so
001d3000      4K r-x--  /lib/libdl-2.5.so
001d4000      4K rwx--  /lib/libdl-2.5.so
001d5000    148K r-x--  /lib/libm-2.5.so
001fa000      4K r-x--  /lib/libm-2.5.so
001fb000      4K rwx--  /lib/libm-2.5.so
001fc000     76K r-x--  /lib/libpthread-2.5.so
0020f000      4K r-x--  /lib/libpthread-2.5.so
00210000      4K rwx--  /lib/libpthread-2.5.so
00211000    288K rwx--    [ anon ]
00263000      4K rwx--    [ anon ]
00264000   1276K r-x--  /lib/libc-2.5.so
003a3000      4K --x--  /lib/libc-2.5.so
003a4000      8K r-x--  /lib/libc-2.5.so
003a6000      4K rwx--  /lib/libc-2.5.so
003a7000     12K rwx--    [ anon ]
003aa000     36K r-x--  /lib/libnss_files-2.5.so
003b3000      4K r-x--  /lib/libnss_files-2.5.so
003b4000      4K rwx--  /lib/libnss_files-2.5.so
003dd000     32K r-x--  /u01/app/oracle/10.2.0/db_1/lib/libclsra10.so
003e5000      4K rwx--  /u01/app/oracle/10.2.0/db_1/lib/libclsra10.so
00475000      4K rwx--    [ anon ]
00520000    128K r-x--  /u01/app/oracle/10.2.0/db_1/lib/libskgxp10.so
00540000      8K rwx--  /u01/app/oracle/10.2.0/db_1/lib/libskgxp10.so
00578000    104K r-x--  /lib/ld-2.5.so
00592000      4K r-x--  /lib/ld-2.5.so
00593000      4K rwx--  /lib/ld-2.5.so
00594000   1904K r-x--  /u01/app/oracle/10.2.0/db_1/lib/libnnz10.so
00770000    152K rwx--  /u01/app/oracle/10.2.0/db_1/lib/libnnz10.so
00796000   1040K rwx--    [ anon ]
008b7000      4K rwx--    [ anon ]
008e0000      4K rwx--    [ anon ]
00900000      4K r-x--  /usr/lib/libaio.so.1.0.1
00901000      4K rwx--  /usr/lib/libaio.so.1.0.1
009b2000     76K r-x--  /lib/libnsl-2.5.so
009c5000      4K r-x--  /lib/libnsl-2.5.so
009c6000      4K rwx--  /lib/libnsl-2.5.so
009c7000   1564K rwx--    [ anon ]
00b81000    436K r-x--  /u01/app/oracle/10.2.0/db_1/lib/libocr10.so
00bee000      4K rwx--  /u01/app/oracle/10.2.0/db_1/lib/libocr10.so
00c65000      4K r-x--  /u01/app/oracle/10.2.0/db_1/lib/libskgxn2.so
00c66000      4K rwx--  /u01/app/oracle/10.2.0/db_1/lib/libskgxn2.so
00c71000      4K rwx--    [ anon ]
00c9e000      4K r-x--    [ anon ]
00d02000    140K rwx--    [ anon ]
00d65000    880K r-x--  /u01/app/oracle/10.2.0/db_1/lib/libhasgen10.so
00e41000     20K rwx--  /u01/app/oracle/10.2.0/db_1/lib/libhasgen10.so
00e46000     12K rwx--    [ anon ]
00e49000   7028K r-x--  /u01/app/oracle/10.2.0/db_1/lib/libjox10.so
01526000    260K rwx--  /u01/app/oracle/10.2.0/db_1/lib/libjox10.so
01567000      4K rwx--    [ anon ]
08048000  77032K r-x--  /u01/app/oracle/10.2.0/db_1/bin/oracle
0cb82000    324K rwx--  /u01/app/oracle/10.2.0/db_1/bin/oracle
0cbd3000    120K rwx--    [ anon ]
0d975000    264K rwx--    [ anon ]
20000000 311296K rwxs-    [ shmid=0x8000 ]
b7ef6000     64K rwx--  /dev/zero
b7f06000     64K rwx--  /dev/zero
b7f16000     64K rwx--  /dev/zero
b7f26000     64K rwx--  /dev/zero
b7f36000     64K rwx--  /dev/zero
b7f46000     64K rwx--  /dev/zero
b7f56000     64K rwx--  /dev/zero
b7f66000     64K --x--  /dev/zero
b7f76000     40K rwx--  /dev/zero
b7f80000     64K rwx--  /dev/zero
b7f90000     64K rwx--  /dev/zero
b7fa0000     64K rwx--  /dev/zero
b7fb0000    128K rwx--  /dev/zero
b7fd0000     64K rwx--  /dev/zero
b7fe0000     64K rwx--  /dev/zero
b7ff0000     24K rwx--  /dev/zero
bfacd000     84K rwx--    [ stack ]
 total   406660K
[root@rhel ~]#
8,为了避免多个共享内存段,可以修改shmmax内核参数,使SGA存在于一个内存共享段中。通过修改/proc/sys/kernel/shmmax参数可以达到这个目的。
9,  [root@rhel ~]# more /proc/sys/kernel/shmmax
2147483648
10,[root@rhel ~]# echo 2147490000 >/proc/sys/kernel/shmmax
       [root@rhel ~]#
注:重启数据库之后更改才生效。
11,有时候警告数据库异常的关闭,如果数据库异常关闭,后台进程未正常退出,共享内存段没有来得及释放导致,通过ipcs命令找到共享内存段id(shared memeory id),然后通过ipcrm强制释放内存段。
在oracle9i中,可以设置参数SGA_MAX_SIZE,该参数可以控制各缓冲池使用内存的总和,本质上是在进程中预先分配一段虚拟内存地址备用而不分配物理地址,目的是防止和进程的私有地址段的冲突。
六,动态修改SGA参数时,存在的一些常见的限制
1,修改的内存大小必须是粒度(Granule)大小的整数倍,否则自动向上取整;
2,SGA总的大小不能超过SGA_MAX_SIZE;
3,SGA最低配置为3个粒度(Granule),一个粒度是用于固定SGA(包括重做缓冲区),一个粒度是用户缓冲区高速缓存,一个粒度用户共享池。
七,advice
1,SQL> select tname from tab where tname like '%ADVICE%';
TNAME
------------------------------
DBA_HIST_DB_CACHE_ADVICE
DBA_HIST_JAVA_POOL_ADVICE
DBA_HIST_MTTR_TARGET_ADVICE
DBA_HIST_PGA_TARGET_ADVICE
DBA_HIST_SGA_TARGET_ADVICE
DBA_HIST_SHARED_POOL_ADVICE
DBA_HIST_STREAMS_POOL_ADVICE
GV_$DB_CACHE_ADVICE
GV_$JAVA_POOL_ADVICE
GV_$MTTR_TARGET_ADVICE
GV_$PGATARGET_ADVICE_HISTOGR
2,DB_CACHE_ADVICE不同参数值的含义分别如下:OFF:关闭建议且不为建议分配内存。ON:开启建议且CPU和内存开销都会发生。READY:关闭建议但是仍保留为建议非配的内存。
3,在某些版本中,如果在参数为OFF状态时,尝试将其设置为ON,可能会出现ORA-4031错误,无法从共享池中分配内存;如果参数处于READY状态则可以将其设置为ON而不会发生错误,这是因为需要的内存已经分配。
SQL> show parameter db_cache_ad;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_cache_advice                      string      ON
SQL>


SQL> select id,name,block_size,size_for_estimate sfe ,size_factor sf,
  2  estd_physical_read_factor eprf,estd_physical_reads epr
  3  from v$db_cache_advice;

        ID NAME                 BLOCK_SIZE        SFE         SF       EPRF        EPR
---------- -------------------- ---------- ---------- ---------- ---------- ----------
         1 KEEP                       8192          4          1                     0
         1 KEEP                       8192          8          2                     0
         2 RECYCLE                    8192          4          1                     0
         2 RECYCLE                    8192          8          2                     0
         3 DEFAULT                    8192         16      .0816     2.0812      18556
         3 DEFAULT                    8192         32      .1633     1.2688      11313
         3 DEFAULT                    8192         48      .2449     1.0517       9377
         3 DEFAULT                    8192         64      .3265          1       8916
         3 DEFAULT                    8192         80      .4082          1       8916
         3 DEFAULT                    8192         96      .4898          1       8916
         3 DEFAULT                    8192        112      .5714          1       8916

        ID NAME                 BLOCK_SIZE        SFE         SF       EPRF        EPR
---------- -------------------- ---------- ---------- ---------- ---------- ----------
         3 DEFAULT                    8192        128      .6531          1       8916
         3 DEFAULT                    8192        144      .7347          1       8916
         3 DEFAULT                    8192        160      .8163          1       8916
         3 DEFAULT                    8192        176       .898          1       8916
         3 DEFAULT                    8192        192      .9796          1       8916
         3 DEFAULT                    8192        196          1          1       8916
最适合的值
           3 DEFAULT                    8192        208     1.0612          1       8916
         3 DEFAULT                    8192        224     1.1429          1       8916
         3 DEFAULT                    8192        240     1.2245          1       8916
         3 DEFAULT                    8192        256     1.3061          1       8916
         3 DEFAULT                    8192        272     1.3878          1       8916

        ID NAME                 BLOCK_SIZE        SFE         SF       EPRF        EPR
---------- -------------------- ---------- ---------- ---------- ---------- ----------
         3 DEFAULT                    8192        288     1.4694          1       8916
         3 DEFAULT                    8192        304      1.551          1       8916
         3 DEFAULT                    8192        320     1.6327          1       8916
25 rows selected.

SQL>
4,STATISTICS_LEVEL控制数据库收集的统计信息的级别,该参数有3个选项。BASIC:收集基本的统计信息。TYPICAL:收集大部分的统计信息,这是系统的缺省设置,用户始终应该将该参数设置为典型。ALL:收集全部的统计信息。
5,SQL> select STATISTICS_NAME ,SESSION_STATUS ,SYSTEM_STATUS,ACTIVATION_LEVEL , SESSION_SETTABLE from v$statistics_level;

STATISTICS_NAME                                    SESSION_ SYSTEM_S ACTIVAT SES
-------------------------------------------------- -------- -------- ------- ---
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

STATISTICS_NAME                                    SESSION_ SYSTEM_S ACTIVAT SES
-------------------------------------------------- -------- -------- ------- ---
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 Ramp up              ENABLED  ENABLED  TYPICAL NO
16 rows selected.
6,可以看到在TYPICAL设置下,除Timed OS Statistics和Plan Execution Statistics信息不收集外,其他信息都被收集。其中,Buffer Cache Advice 受db_cache_size参数独立控制,Timed Statistics受timed_statistics参数独控制。
其他统计信息的收集都受到STATISTICS_lEVEL参数的控制。当修改为STATISTICS_LEVEL为Basic时,可以看到,除Buffer Cache Advice和Timed Statistics外,其他的收集 信息都被禁止。
7,在10g下,如果SGA自动调整,不让修改为basic;
SQL> alter system set statistics_level=basic;
alter system set statistics_level=basic
*
ERROR at line 1:
ORA-02097: parameter cannot be modified because specified value is invalid
ORA-00830: cannot set statistics_level to BASIC with auto-tune SGA enabled
8,可以通过查询v$SHARED_POOL_ADVICE视图获取关于shared_pool的建议信息:
SQL> select SHARED_POOL_SIZE_FOR_ESTIMATE SPZFE, SHARED_POOL_SIZE_FACTOR SPSF,
  2   ESTD_LC_MEMORY_OBJECTS ELMO, ESTD_LC_TIME_SAVED ELTS,
  3  ESTD_LC_LOAD_TIME_FACTOR ELTSF,ESTD_LC_MEMORY_OBJECT_HITS ELMOH
  4  from v$shared_pool_advice;

     SPZFE       SPSF       ELMO       ELTS      ELTSF      ELMOH
---------- ---------- ---------- ---------- ---------- ----------
        48      .8571       1039        121     1.1333      23641
        56          1       1996        123          1      24514
最适合的值

        64     1.1429       2907        123          1      24739
        72     1.2857       4039        123          1      24778
        80     1.4286       4490        123          1      24778
        88     1.5714       4490        123          1      24778
        96     1.7143       4490        123          1      24778
       104     1.8571       4490        123          1      24778
       112          2       4490        123          1      24778

9 rows selected.
9,找到这个是最好的shared_pool_size;alter system set shared_pool_size=56M; 有可能修改参时,session处于等待状态,等待事件为Background parameter adjustment。(这个也是说的oracle9i之前的版本)

八,查询等待事件
1,SQL>  select sid,seq#,event,SECONDS_IN_WAIT,state
  2   from v$session_wait where sid= 167;

       SID       SEQ# EVENT                                                            SECONDS_IN_WAIT STATE
---------- ---------- ---------------------------------------------------------------- --------------- -------------------
       167        155 rdbms ipc message                                                             48 WAITING

2,SQL> select * from v$lock where sid=167;

ADDR     KADDR           SID TY        ID1        ID2      LMODE    REQUEST      CTIME      BLOCK
--------    --------                 ---------- ---------- ---------- ---------- ---------- ---------- ----------
32BB9BF8 32BB9C0C        167 PW          1          0          3          0       7364          0
32BB9D0C 32BB9D20        167 MR          1          0          4          0       7367          0
32BB9D68 32BB9D7C        167 MR          2          0          4          0       7367          0
32BB9DC4 32BB9DD8        167 MR          3          0          4          0       7367          0
32BB9E20 32BB9E34        167 MR          4          0          4          0       7367          0
32BB9E7C 32BB9E90        167 MR          5          0          4          0       7367          0
32BB9F34 32BB9F48        167 MR        201          0          4          0       7367          0
7 rows selected
SQL>
3,SQL> select * from v$lock ;
ADDR     KADDR           SID TY        ID1        ID2      LMODE    REQUEST      CTIME      BLOCK
--------     --------         ---------- --    ----------   ----------  ----------   ----------     ----------    ----------
32BB99D0 32BB99E4        165 XR          4          0          1          0       7162          0
32BB9A2C 32BB9A40        165 CF          0          0          2          0       7162          0
32BB9AE4 32BB9AF8        165 RS         25          1          2          0       7156          0
32BB9B9C 32BB9BB0        166 RT          1          0          6          0       7156          0
32BB9BF8 32BB9C0C        167 PW          1          0          3          0       7150          0
32BB9D0C 32BB9D20        167 MR          1          0          4          0       7153          0
32BB9D68 32BB9D7C        167 MR          2          0          4          0       7153          0
32BB9DC4 32BB9DD8        167 MR          3          0          4          0       7153          0
32BB9E20 32BB9E34        167 MR          4          0          4          0       7153          0
32BB9E7C 32BB9E90        167 MR          5          0          4          0       7153          0
32BB9ED8 32BB9EEC        164 TS          3          1          3          0       7151          0
ADDR     KADDR           SID TY        ID1        ID2      LMODE    REQUEST      CTIME      BLOCK
--------     --------         ---------- --    ----------  ----------  ----------   ----------     ----------    ----------
32BB9F34 32BB9F48        167 MR        201          0          4          0       7153          0
12 rows selected.
九,SGA自动管理
1,数据库白天需要处理大量的OLTP任务,这些任务需要大量的Buffer Cache内存,而在夜间系统可能需要运行大量的并行批处理任务,这些任务又需要大量的Large Pool内存,为了这样的一个系统在有限的资源下高效率的运行,在oracle 10g的自动共享内存管理(Automatic Shared Memory Management,ASMM)下,这些动作都不要人工介入,当运行OLTP任务时,BufferCache会获取大部分的内存以达到良好的性能。如果系统需要运行DSS批处理任务时,内存自动转移给Large Pool,以便并行查询等可以获取更多的内存,更快的执行。
2,并非所有SGA组件都可以自动调整,可以自动分配的内存包括:Buffer Cache;Shared Pool;Java Pool;Large Pool;
3,启用自动共享内存管理,可以估算一个SGA的总大小,然后设置SGA_TARGET参数为非0值,Oracle将启动自动共享内存管理。自动内存管理需要STATISTICS_LEVEL参数设置为TYPICAL或者ALL。
4,Oracle服务器根据系统运行的情况自动调整这些内存的大小,并记录在spfile中,进程重新启动时,不会丢失之前的调整结果。自动的共享内存管理引入了一个新的后台进程MMAN(MemoryManager)。该进程用以动态调整内存组件。动态调整的依据来自系统不断收集的内存建议。
5,SQL> select pid,spid,program from v$process;
       PID SPID         PROGRAM
---------- ------------ ------------------------------------------------
         1              PSEUDO
         2 2865         oracle@rhel.oracle.com (PMON)
         3 2867         oracle@rhel.oracle.com (PSP0)
         4 2869         oracle@rhel.oracle.com (MMAN)
         5 2884         oracle@rhel.oracle.com (DBW0)
         6 2886         oracle@rhel.oracle.com (LGWR)
         7 2888         oracle@rhel.oracle.com (CKPT)
         8 2890         oracle@rhel.oracle.com (SMON)
         9 2892         oracle@rhel.oracle.com (RECO)
        10 2894         oracle@rhel.oracle.com (CJQ0)
        11 2896         oracle@rhel.oracle.com (MMON)

       PID SPID         PROGRAM
---------- ------------ ------------------------------------------------
        12 2898         oracle@rhel.oracle.com (MMNL)
        13 2900         oracle@rhel.oracle.com (D000)
        14 2902         oracle@rhel.oracle.com (S000)
        15 16116        oracle@rhel.oracle.com (J000)
        16 2907         oracle@rhel.oracle.com (ARC0)
        17 2909         oracle@rhel.oracle.com (ARC1)
        18 15108        oracle@rhel.oracle.com (TNS V1-V3)
        19 2913         oracle@rhel.oracle.com (QMNC)
        21 3128         oracle@rhel.oracle.com (TNS V1-V3)
        27 3069         oracle@rhel.oracle.com (q004)
        28 3071         oracle@rhel.oracle.com (q005)

22 rows selected.
6,[oracle@rhel ~]$ ps -ef | grep ora_
oracle    2865     1  0 09:31 ?        00:00:00 ora_pmon_orcl
oracle    2867     1  0 09:31 ?        00:00:00 ora_psp0_orcl
oracle    2869     1  0 09:31 ?        00:00:00 ora_mman_orcl
oracle    2884     1  0 09:31 ?        00:00:01 ora_dbw0_orcl
oracle    2886     1  0 09:31 ?        00:00:01 ora_lgwr_orcl
oracle    2888     1  0 09:31 ?        00:00:03 ora_ckpt_orcl
oracle    2890     1  0 09:31 ?        00:00:02 ora_smon_orcl
oracle    2892     1  0 09:31 ?        00:00:00 ora_reco_orcl
oracle    2894     1  0 09:31 ?        00:00:00 ora_cjq0_orcl
oracle    2896     1  0 09:31 ?        00:00:02 ora_mmon_orcl
oracle    2898     1  0 09:31 ?        00:00:00 ora_mmnl_orcl
oracle    2900     1  0 09:31 ?        00:00:00 ora_d000_orcl
oracle    2902     1  0 09:31 ?        00:00:00 ora_s000_orcl
oracle    2907     1  0 09:31 ?        00:00:00 ora_arc0_orcl
oracle    2909     1  0 09:31 ?        00:00:00 ora_arc1_orcl
oracle    2913     1  0 09:31 ?        00:00:00 ora_qmnc_orcl
oracle    3069     1  0 09:31 ?        00:00:00 ora_q004_orcl
oracle    3071     1  0 09:31 ?        00:00:00 ora_q005_orcl
oracle   16122     1  0 16:58 ?        00:00:00 ora_j000_orcl
oracle   16173 16150  0 16:59 pts/5    00:00:00 grep ora_
[oracle@rhel ~]$
7,在操作系统上一个进程的PID号,对应地,可以在数据库v$process的SPID得到,也就是说v$process视图实际上是从操作系统到数据库的一个借口,可以通过v$process视图把操作系统和数据库联系起来。
8,如果想设置为手工管理,只需要简单的将SGA_TARGET参数设置为0,
9,SQL> select name,value
  2  from v$parameter
  3  where name in
  4  ('large_pool_size','java_pool_size','shared_pool_size','stream_pool_size','db_cache_size');
SQL> /
NAME                                     VALUE
---------------------------------------- ------------------------------
shared_pool_size                         0
large_pool_size                          0
java_pool_size                           0
db_cache_size                            0
10,SQL> select x.ksppinm NAME,y.ksppstvl VALUE,x.ksppdesc describ
 FROM SYS.x$ksppi x,SYS.x$ksppcv y
WHERE x.inst_id=USERENV('Instance')
AND y.inst_id=USERENV('Instance')
AND x.indx=y.indx
AND x.ksppinm like '%pool_size%'
/
NAME                                     VALUE                                              DESCRIB
---------------------------------------- -------------------------------------------------- ----------------------------------------
_NUMA_pool_size                          Not specified                                      aggregate size in bytes of NUMA pool
__shared_pool_size                       62914560                                           Actual size in bytes of shared pool
shared_pool_size                         0                                                  size in bytes of shared pool
__large_pool_size                        4194304                                            Actual size in bytes of large pool
large_pool_size                          0                                                  size in bytes of large pool
__java_pool_size                         4194304                                            Actual size in bytes of java pool
java_pool_size                           0                                                  size in bytes of java pool
__streams_pool_size                      0                                                  Actual size in bytes of streams pool
streams_pool_size                        0                                                  size in bytes of the streams pool
_io_shared_pool_size                     4194304                                            Size of I/O buffer pool from SGA
_backup_io_pool_size                     1048576                                            memory to reserve from the large pool

NAME                                     VALUE                                              DESCRIB
---------------------------------------- -------------------------------------------------- ----------------------------------------
global_context_pool_size                                                                    Global Application Context Pool Size in
                                                                                            Bytes
olap_page_pool_size                      0                                                  size of the olap page pool in bytes

13 rows selected.
11,这些由两个下划线开头的参数决定了当前SGA的分配,也是动态内存管理调整的参数,这些参数的更改会被记录到spfile文件当中,在下一次数据库启动的时候仍然有效。
[oracle@rhel dbs]$ more initorcl.ora
orcl.__db_cache_size=201326592
orcl.__java_pool_size=4194304
orcl.__large_pool_size=4194304
orcl.__shared_pool_size=62914560
12,SQL> select COMPONENT ,CURRENT_SIZE ,MIN_SIZE,LAST_OPER_TYPE, LAST_OPER_MODE,to_char(LAST_OPER_TIME ,'yyyy-mm-dd hh24:mi:ss')LOT
 from v$sga_dynamic_components;
COMPONENT                                                        CURRENT_SIZE   MIN_SIZE LAST_OPER_TYP LAST_OPER LOT
---------------------------------------------------------------- ------------ ---------- ------------- --------- -------------------
shared pool                                                          62914560   58720256 GROW          IMMEDIATE 2014-04-17 19:36:35
large pool                                                            4194304    4194304 STATIC
java pool                                                             4194304    4194304 STATIC
streams pool                                                                0          0 STATIC
DEFAULT buffer cache                                                201326592  201326592 SHRINK        IMMEDIATE 2014-04-17 19:36:35
KEEP buffer cache                                                     4194304    4194304 STATIC
RECYCLE buffer cache                                                  4194304    4194304 STATIC
DEFAULT 2K buffer cache                                                     0          0 STATIC
DEFAULT 4K buffer cache                                                     0          0 STATIC
DEFAULT 8K buffer cache                                                     0          0 STATIC
DEFAULT 16K buffer cache                                                    0          0 STATIC
COMPONENT                                                        CURRENT_SIZE   MIN_SIZE LAST_OPER_TYP LAST_OPER LOT
---------------------------------------------------------------- ------------ ---------- ------------- --------- -------------------
DEFAULT 32K buffer cache                                                    0          0 STATIC
ASM Buffer Cache                                                            0          0 STATIC
13 rows selected.
SQL>

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29611940/viewspace-1144400/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29611940/viewspace-1144400/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值