shmmax內核參數定義單個(gè)共享內存段的最大值,如果該參數設置小于Oracle SGA設置,那么SGA就會(huì )被分配多個(gè)共享內存段。這在繁忙的系統中可能成為性能負擔,帶來(lái)系統問(wèn)題。
Linux上該參數的缺省值通常為32M。
[root@neirong root]# more /proc/sys/kernel/shmmax33554432
可以通過(guò)ipcs命令查看此設置下共享內存的分配,我們可以看到Oracle分配了多個(gè)共享內存段以滿(mǎn)足SGA設置的需要:
[root@neirong root]# ipcs -sa------ Shared Memory Segments --------key shmid owner perms bytes nattch status 0x00000000 884736 oracle 640 4194304 14 0x00000000 917505 oracle 640 33554432 14 0x00000000 950274 oracle 640 33554432 14 0x00000000 983043 oracle 640 33554432 14 0x00000000 1015812 oracle 640 33554432 14 0x00000000 1048581 oracle 640 33554432 14 0x00000000 1081350 oracle 640 33554432 14 0x00000000 1114119 oracle 640 33554432 14 0x00000000 1146888 oracle 640 33554432 14 0x00000000 1179657 oracle 640 33554432 14 0x00000000 1212426 oracle 640 33554432 14 0x00000000 1245195 oracle 640 33554432 14 0x00000000 1277964 oracle 640 33554432 14 0x00000000 1310733 oracle 640 33554432 14 0x00000000 1343502 oracle 640 33554432 14 0x00000000 1376271 oracle 640 33554432 14 0x00000000 1409040 oracle 640 33554432 14 0x00000000 1441809 oracle 640 33554432 14 0x00000000 1474578 oracle 640 33554432 14 0x00000000 1507347 oracle 640 33554432 14 0x00000000 1540116 oracle 640 33554432 14 0x00000000 1572885 oracle 640 33554432 14 0x00000000 1605654 oracle 640 33554432 14 0x00000000 1638423 oracle 640 33554432 14 0x00000000 1671192 oracle 640 33554432 14 0x00000000 1703961 oracle 640 33554432 14 0x7a9c9900 1736730 oracle 640 4194304 56 ------ Semaphore Arrays --------key semid owner perms nsems 0xfcf02e10 229376 oracle 640 154 ------ Message Queues --------key msqid owner perms used-bytes messages
使用pmap我們可以看到每個(gè)共享內存段的地址空間
[root@neirong root]# ps -ef|grep 3102oracle 3102 1 0 09:27 ? 00:00:26 ora_dbw0_hsmktroot 3447 3397 0 10:39 pts/4 00:00:00 grep 3102[root@neirong root]# pmap 3102ora_dbw0_hsmkt[3102]08048000 (37308 KB) r-xp (68:06 1525072) /opt/oracle/product/9.2.0/bin/oracle0a4b7000 (8804 KB) rw-p (68:06 1525072) /opt/oracle/product/9.2.0/bin/oracle0ad50000 (380 KB) rw-p (00:00 0) 50000000 (4096 KB) rw-s (00:04 884736) /SYSV0000000051000000 (32768 KB) rw-s (00:04 917505) /SYSV0000000053000000 (32768 KB) rw-s (00:04 950274) /SYSV0000000055000000 (32768 KB) rw-s (00:04 983043) /SYSV0000000057000000 (32768 KB) rw-s (00:04 1015812) /SYSV0000000059000000 (32768 KB) rw-s (00:04 1048581) /SYSV000000005b000000 (32768 KB) rw-s (00:04 1081350) /SYSV000000005d000000 (32768 KB) rw-s (00:04 1114119) /SYSV000000005f000000 (32768 KB) rw-s (00:04 1146888) /SYSV0000000061000000 (32768 KB) rw-s (00:04 1179657) /SYSV0000000063000000 (32768 KB) rw-s (00:04 1212426) /SYSV0000000065000000 (32768 KB) rw-s (00:04 1245195) /SYSV0000000067000000 (32768 KB) rw-s (00:04 1277964) /SYSV0000000069000000 (32768 KB) rw-s (00:04 1310733) /SYSV000000006b000000 (32768 KB) rw-s (00:04 1343502) /SYSV000000006d000000 (32768 KB) rw-s (00:04 1376271) /SYSV000000006f000000 (32768 KB) rw-s (00:04 1409040) /SYSV0000000071000000 (32768 KB) rw-s (00:04 1441809) /SYSV0000000073000000 (32768 KB) rw-s (00:04 1474578) /SYSV0000000075000000 (32768 KB) rw-s (00:04 1507347) /SYSV0000000077000000 (32768 KB) rw-s (00:04 1540116) /SYSV0000000079000000 (32768 KB) rw-s (00:04 1572885) /SYSV000000007b000000 (32768 KB) rw-s (00:04 1605654) /SYSV000000007d000000 (32768 KB) rw-s (00:04 1638423) /SYSV000000007f000000 (32768 KB) rw-s (00:04 1671192) /SYSV0000000081000000 (32768 KB) rw-s (00:04 1703961) /SYSV0000000083000000 (4 KB) r--s (00:04 1736730) /SYSV7a9c990083001000 (644 KB) rw-s (00:04 1736730) /SYSV7a9c9900830a2000 (4 KB) r--s (00:04 1736730) /SYSV7a9c9900830a3000 (3444 KB) rw-s (00:04 1736730) /SYSV7a9c9900b6ec2000 (44 KB) r-xp (68:03 32811) /lib/libnss_files-2.3.2.sob6ecd000 (4 KB) rw-p (68:03 32811) /lib/libnss_files-2.3.2.sob6ece000 (512 KB) rw-p (68:03 40360) /dev/zerob6f4e000 (1140 KB) rw-p (00:00 0) b706b000 (1224 KB) r-xp (68:03 114692) /lib/tls/libc-2.3.2.sob719d000 (12 KB) rw-p (68:03 114692) /lib/tls/libc-2.3.2.sob71a0000 (12 KB) rw-p (00:00 0) b71a3000 (72 KB) r-xp (68:03 32795) /lib/libnsl-2.3.2.sob71b5000 (4 KB) rw-p (68:03 32795) /lib/libnsl-2.3.2.sob71b6000 (8 KB) rw-p (00:00 0) b71b8000 (52 KB) r-xp (68:03 114696) /lib/tls/libpthread-0.60.sob71c5000 (4 KB) rw-p (68:03 114696) /lib/tls/libpthread-0.60.sob71c6000 (8 KB) rw-p (00:00 0) b71c8000 (132 KB) r-xp (68:03 114694) /lib/tls/libm-2.3.2.sob71e9000 (4 KB) rw-p (68:03 114694) /lib/tls/libm-2.3.2.sob71ea000 (8 KB) r-xp (68:03 32791) /lib/libdl-2.3.2.sob71ec000 (4 KB) rw-p (68:03 32791) /lib/libdl-2.3.2.sob71ed000 (2940 KB) r-xp (68:06 491677) /opt/oracle/product/9.2.0/lib/libjox9.sob74cc000 (1088 KB) rw-p (68:06 491677) /opt/oracle/product/9.2.0/lib/libjox9.sob75dc000 (12 KB) rw-p (00:00 0) b75df000 (4 KB) r-xp (68:06 491685) /opt/oracle/product/9.2.0/lib/libskgxn9.sob75e0000 (8 KB) rw-p (68:06 491685) /opt/oracle/product/9.2.0/lib/libskgxn9.sob75e2000 (4 KB) r-xp (68:06 491567) /opt/oracle/product/9.2.0/lib/libskgxp9.sob75e3000 (4 KB) ---p (68:06 491567) /opt/oracle/product/9.2.0/lib/libskgxp9.sob75e4000 (4 KB) rw-p (68:06 491567) /opt/oracle/product/9.2.0/lib/libskgxp9.sob75e5000 (4 KB) r-xp (68:06 491688) /opt/oracle/product/9.2.0/lib/libodmd9.sob75e6000 (4 KB) rw-p (68:06 491688) /opt/oracle/product/9.2.0/lib/libodmd9.sob75e7000 (4 KB) r-xp (68:03 101245) /etc/libcwait.sob75e8000 (4 KB) rw-p (68:03 101245) /etc/libcwait.sob75ea000 (4 KB) rw-p (00:00 0) b75eb000 (84 KB) r-xp (68:03 32778) /lib/ld-2.3.2.sob7600000 (4 KB) rw-p (68:03 32778) /lib/ld-2.3.2.sobfff8000 (32 KB) rwxp (00:00 0) mapped: 881332 KB writable/private: 12056 KB shared: 827392 KB
為了避免多個(gè)共享內存段,我們可以修改shmmax內核參數,使SGA存在于一個(gè)共享內存段中。
通過(guò)修改/proc/sys/kernel/shmmax參數可以達到此目的。
[root@neirong root]# echo 1073741824 > /proc/sys/kernel/shmmax[root@neirong root]# more /proc/sys/kernel/shmmax1073741824
這里設為1G。
對于shmmax文件的修改,系統重新啟動(dòng)后會(huì )復位??梢酝ㄟ^(guò)修改 /etc/sysctl.conf 使更改永久化。
在該文件內添加以下一行
這個(gè)更改在系統重新啟動(dòng)后生效
kernel.shmmax = 1073741824
重起數據庫使更改生效:
SQL> shutdown immediate;Database closed.Database dismounted.ORACLE instance shut down.SQL> ![oracle@neirong oracle]$ ipcs -sa------ Shared Memory Segments --------key shmid owner perms bytes nattch status ------ Semaphore Arrays --------key semid owner perms nsems ------ Message Queues --------key msqid owner perms used-bytes messages [oracle@neirong oracle]$ exitexitSQL> startupORACLE instance started.Total System Global Area 839980852 bytesFixed Size 452404 bytesVariable Size 201326592 bytesDatabase Buffers 637534208 bytesRedo Buffers 667648 bytesDatabase mounted.Database opened.SQL> ! ipcs -sa------ Shared Memory Segments --------key shmid owner perms bytes nattch status 0x7a9c9900 1769472 oracle 640 859832320 35 ------ Semaphore Arrays --------key semid owner perms nsems 0xfcf02e10360448 oracle 640 154 ------ Message Queues --------key msqid owner perms used-bytes messages
此時(shí)進(jìn)程的pmap映射顯示為:
[oracle@neirong bdump]$ pmap 4178ora_lgwr_hsmkt[4178]08048000 (37308 KB) r-xp (68:06 1525072) /opt/oracle/product/9.2.0/bin/oracle0a4b7000 (8804 KB) rw-p (68:06 1525072) /opt/oracle/product/9.2.0/bin/oracle0ad50000 (3320 KB) rw-p (00:00 0) 50000000 (835584 KB) rw-s (00:04 1835008) /SYSV7a9c990083000000 (4 KB) r--s (00:04 1835008) /SYSV7a9c990083001000 (644 KB) rw-s (00:04 1835008) /SYSV7a9c9900830a2000 (4 KB) r--s (00:04 1835008) /SYSV7a9c9900830a3000 (3444 KB) rw-s (00:04 1835008) /SYSV7a9c9900b6bb7000 (4112 KB) rw-p (00:00 0) b6fbb000 (44 KB) r-xp (68:03 32811) /lib/libnss_files-2.3.2.sob6fc6000 (4 KB) rw-p (68:03 32811) /lib/libnss_files-2.3.2.sob6fc7000 (512 KB) rw-p (68:03 40360) /dev/zerob7047000 (144 KB) rw-p (00:00 0) b706b000 (1224 KB) r-xp (68:03 114692) /lib/tls/libc-2.3.2.sob719d000 (12 KB) rw-p (68:03 114692) /lib/tls/libc-2.3.2.sob71a0000 (12 KB) rw-p (00:00 0) b71a3000 (72 KB) r-xp (68:03 32795) /lib/libnsl-2.3.2.sob71b5000 (4 KB) rw-p (68:03 32795) /lib/libnsl-2.3.2.sob71b6000 (8 KB) rw-p (00:00 0) b71b8000 (52 KB) r-xp (68:03 114696) /lib/tls/libpthread-0.60.sob71c5000 (4 KB) rw-p (68:03 114696) /lib/tls/libpthread-0.60.sob71c6000 (8 KB) rw-p (00:00 0) b71c8000 (132 KB) r-xp (68:03 114694) /lib/tls/libm-2.3.2.sob71e9000 (4 KB) rw-p (68:03 114694) /lib/tls/libm-2.3.2.sob71ea000 (8 KB) r-xp (68:03 32791) /lib/libdl-2.3.2.sob71ec000 (4 KB) rw-p (68:03 32791) /lib/libdl-2.3.2.sob71ed000 (2940 KB) r-xp (68:06 491677) /opt/oracle/product/9.2.0/lib/libjox9.sob74cc000 (1088 KB) rw-p (68:06 491677) /opt/oracle/product/9.2.0/lib/libjox9.sob75dc000 (12 KB) rw-p (00:00 0) b75df000 (4 KB) r-xp (68:06 491685) /opt/oracle/product/9.2.0/lib/libskgxn9.sob75e0000 (8 KB) rw-p (68:06 491685) /opt/oracle/product/9.2.0/lib/libskgxn9.sob75e2000 (4 KB) r-xp (68:06 491567) /opt/oracle/product/9.2.0/lib/libskgxp9.sob75e3000 (4 KB) ---p (68:06 491567) /opt/oracle/product/9.2.0/lib/libskgxp9.sob75e4000 (4 KB) rw-p (68:06 491567) /opt/oracle/product/9.2.0/lib/libskgxp9.sob75e5000 (4 KB) r-xp (68:06 491688) /opt/oracle/product/9.2.0/lib/libodmd9.sob75e6000 (4 KB) rw-p (68:06 491688) /opt/oracle/product/9.2.0/lib/libodmd9.sob75e7000 (4 KB) r-xp (68:03 101245) /etc/libcwait.sob75e8000 (4 KB) rw-p (68:03 101245) /etc/libcwait.sob75ea000 (4 KB) rw-p (00:00 0) b75eb000 (84 KB) r-xp (68:03 32778) /lib/ld-2.3.2.sob7600000 (4 KB) rw-p (68:03 32778) /lib/ld-2.3.2.sobfffc000 (16 KB) rwxp (00:00 0) mapped: 899660 KB writable/private: 18096 KB shared: 839680 KB
實(shí)際上,如果沒(méi)有修改shmmax參數,Oracle在啟動(dòng)過(guò)程中就會(huì )報出以下錯誤:
Starting ORACLE instance (normal)Thu Nov 17 09:27:29 2005WARNING: EINVAL creating segment of size 0x0000000033400000fix shm parameters in /etc/system or equivalent