在Oracle 11g中用看Oracle的共享内存段———IPCS

很早之前,在一次讲课了,用了命令ipcs,发现oracle的共享内段好小,如下:

 

[html][/html] view plaincopy

  1. oracle@mydb ~]$ ipcs -a
  2. —— Shared Memory Segments ——–
  3. key        shmid      owner      perms      bytes      nattch     status
  4. 0x00000000 32768      root      644        72         2
  5. 0x00000000 65537      root      644        16384      2
  6. 0x00000000 98306      root      644        280        2
  7. 0x00000000 1409028    oracle    640        4096       0
  8. 0x00000000 1441797    oracle    640        4096       0
  9. 0x079918e8 1474566    oracle    640        4096       0
  10. —— Semaphore Arrays ——–
  11. key        semid      owner      perms      nsems
  12. 0x87a36da4 1343489    oracle    640        154
  13. —— Message Queues ——–
  14. key        msqid      owner      perms      used-bytes   messages

今天突然想起,刚好有空,来总结一下:

 

上面显示Oracle共享内存段只有4096个字节,这太小了吧,哦,对了,我这是Oracle11g:

 

[html][/html] view plaincopy

  1. sys@OCM> select * from v$version;
  2. BANNER
  3. ——————————————————————————–
  4. Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 – 64bit Production
  5. PL/SQL Release 11.2.0.3.0 – Production
  6. CORE    11.2.0.3.0      Production
  7. TNS for Linux: Version 11.2.0.3.0 – Production
  8. NLSRTL Version 11.2.0.3.0 – Production

Oraccle11g的对内存的管理用了两个新的参数:

 

 

[html][/html] view plaincopy

  1. sys@OCM> show parameter memory
  2. NAME                                 TYPE        VALUE
  3. ———————————— ———– ——————————
  4. hi_shared_memory_address             integer     0
  5. memory_max_target                    big integer 1G
  6. memory_target                        big integer 0
  7. shared_memory_address                integer     0

 

 

会不会是参数memory_max_target在作怪呢,把它关了试试,我这里把它设为0,然后重启数据库。

 

[html][/html] view plaincopy

  1. sys@OCM> alter system set memory_max_target=0 scope=spfile;
  2. System altered.
  3. sys@OCM> startup force;
  4. ORACLE instance started.
  5. Total System Global Area  943669248 bytes
  6. Fixed Size                  2234000 bytes
  7. Variable Size             541067632 bytes
  8. Database Buffers          394264576 bytes
  9. Redo Buffers                6103040 bytes
  10. Database mounted.
  11. Database opened.

 

 

再看共享内存:

 

[html][/html] view plaincopy

  1. [oracle@mydb ~]$ ipcs -a
  2. —— Shared Memory Segments ——–
  3. key        shmid      owner      perms      bytes      nattch     status
  4. 0x00000000 32768      root      644        72         2
  5. 0x00000000 65537      root      644        16384      2
  6. 0x00000000 98306      root      644        280        2
  7. 0x00000000 1802244    oracle    640        4096       0
  8. 0x00000000 1835013    oracle    640        4096       0
  9. 0x079918e8 1867782    oracle    640        4096       0
  10. —— Semaphore Arrays ——–
  11. key        semid      owner      perms      nsems
  12. 0x87a36da4 1736705    oracle    640        154
  13. —— Message Queues ——–
  14. key        msqid      owner      perms      used-bytes   messages

怎么回事,没变啊?

 

是不是参数没改对,继续校验参数:

 

[html][/html] view plaincopy

  1. sys@OCM> show parameter mem
  2. NAME                                 TYPE        VALUE
  3. ———————————— ———– ——————————
  4. hi_shared_memory_address             integer     0
  5. memory_max_target                    big integer 904M
  6. memory_target                        big integer 0
  7. shared_memory_address                integer     0

果然没改过来,是不是命令alter system set memory_max_target=0 scope=spfile;没用啊,不能怎么设,但这命令本身设置重启也没报错。

 

来个狠一点的命令重置默认值:

 

[html][/html] view plaincopy

  1. sys@OCM> alter system reset memory_max_target;
  2. System altered.
  3. sys@OCM> startup force;
  4. ORACLE instance started.
  5. Total System Global Area  680665088 bytes
  6. Fixed Size                  2231352 bytes
  7. Variable Size             276825032 bytes
  8. Database Buffers          394264576 bytes
  9. Redo Buffers                7344128 bytes
  10. Database mounted.
  11. Database opened.
  12. sys@OCM> show parameter mem
  13. NAME                                 TYPE        VALUE
  14. ———————————— ———– ——————————
  15. hi_shared_memory_address             integer     0
  16. memory_max_target                    big integer 0
  17. memory_target                        big integer 0
  18. shared_memory_address                integer     0

这下可以了,参数memory_max_target终于等于0了。

 

我们再来看ORACLE共享内存:

 

[html][/html] view plaincopy

  1. [oracle@mydb ~]$ ipcs -a
  2. —— Shared Memory Segments ——–
  3. key        shmid      owner      perms      bytes      nattch     status
  4. 0x00000000 32768      root      644        72         2
  5. 0x00000000 65537      root      644        16384      2
  6. 0x00000000 98306      root      644        280        2
  7. 0x00000000 1933316    oracle    640        12582912   30
  8. 0x00000000 1966085    oracle    640        671088640  30
  9. 0x079918e8 1998854    oracle    640        2097152    30
  10. —— Semaphore Arrays ——–
  11. key        semid      owner      perms      nsems
  12. 0x87a36da4 1867777    oracle    640        154
  13. —— Message Queues ——–
  14. key        msqid      owner      perms      used-bytes   messages

可以了!已从4096字节变成671088640多字节了。大笑,总结只要把参数memory_max_target设为0就能看到。这里不建议大家去这样改,只是为了解释一下这个现象。

标签