shmmax
OS的内核参数,即单个共享内存段的最大值,若shmmax值<SGA设置,将被分配多个共享内存段
shmmax的配置
solaris系统 /etc/system文件
linux系统 /proc/sys/kernel/shmmax文件
举例查看某共享内存段的内存地址和大小
方法一:
oracle@linux:~> ipcs -sa //查看共享内存段数量,并找到shmid(共享内存ID)
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 2424832 oracle 660 4096 0
0x00000000 2457601 oracle 660 4096 0
0x00000000 2490370 oracle 660 4096 0
0x00000000 2523139 oracle 660 4096 0
0xf03d9fe8 2555908 oracle 660 4096 0
------ Semaphore Arrays --------
key semid owner perms nsems
0x002fa327 0 root 666 2
0x9f2adfa8 2490369 oracle 660 152
0x9f2adfa9 2523138 oracle 660 152
0x9f2adfaa 2555907 oracle 660 152
------ Message Queues --------
key msqid owner perms used-bytes messages
oracle@linux:~> ps -ef|grep dbw
oracle 1143 13592 0 08:50 pts/0 00:00:00 grep dbw
oracle 17835 1 0 Feb19 ? 00:00:14 ora_dbw0_ora11g //查找某进程的pid
oracle@linux:~> pmap 17835 | grep 2424832
START SIZE RSS DIRTY PERM MAPPING
60000000 4K 0K 0K r-xs /dev/shm/ora_ora11g_2424832_0
60001000 16380K 264K 120K rwxs /dev/shm/ora_ora11g_2424832_0
61000000 16384K 0K 0K rwxs /dev/shm/ora_ora11g_2424832_1
62000000 16384K 5104K 5016K rwxs /dev/shm/ora_ora11g_2424832_2
START 进程起始地址
SIZE 进程占用的地址空间
RSS 保留内存的字节数
DIRTY 脏页的字节数(共享和私有)
方法二:
oracle@linux:~> more /proc/17835/maps | grep2424832
60000000-60001000 r-xs 00000000 00:11 6635213 /dev/shm/ora_ora11g_2424832_0
60001000-61000000 rwxs 00001000 00:11 6635213 /dev/shm/ora_ora11g_2424832_0
61000000-62000000 rwxs 00000000 00:11 6635214 /dev/shm/ora_ora11g_2424832_1
62000000-63000000 rwxs 00000000 00:11 6635215 /dev/shm/ora_ora11g_2424832_2
其中第一列表示内存地址范围
可以查看oracle的几个共享内存段的总体使用情况:
oracle@linux:~> ipcs -sa
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 2424832 oracle 660 4096 0
0x00000000 2457601 oracle 660 4096 0
0x00000000 2490370 oracle 660 4096 0
0x00000000 2523139 oracle 660 4096 0
0xf03d9fe8 2555908 oracle 660 4096 0
------ Semaphore Arrays --------
key semid owner perms nsems
0x002fa327 0 root 666 2
0x9f2adfa8 2490369 oracle 660 152
0x9f2adfa9 2523138 oracle 660 152
0x9f2adfaa 2555907 oracle 660 152
------ Message Queues --------
key msqid owner perms used-bytes messages
oracle@linux:~> pmap 17804 | grep ora_ | awk '{print $6}' | awk -F / '{print $4}' | awk -F _ '{print $3}' | uniq -c //统计出每个共享内存段使用次数
4 2424832
128 2457601
128 2490370
128 2523139
114 2555908
常见问题:
1、配置的SGA过大超过物理内存,导致共享内存段无法分配,修正参数;
2、ORACLE异常关闭导致共享内存没有释放,ipcs命令先找到共享内存ID,再ipcrm命令强制释放