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_$SG