针对Oracle用户的Linux高级命令详解之资源管理篇(二)
max seg size (kbytes) = 524288
max total shared memory (kbytes) = 8388608
min seg size (bytes) = 1
如果您看到当前值处于或接近限定值,则应该考虑提高限定值
可以使用shmid值获取具体共享内存段的详细快照,-i选项可以完成该操作
下面是查看shmid 5505041 详细信息的方法:
[sql]
[root@Think ~]# ipcs -m -i 5505041
Shared memory Segment shmid=5505041
uid=501 gid=502 cuid=501 cgid=502
mode=0640 access_perms=0640
bytes=419438592 lpid=10881 cpid=5300 nattch=20
att_time=Sun Feb 3 20:58:28 2013
det_time=Sun Feb 3 20:58:28 2013
change_time=Sun Feb 3 09:08:06 2013
稍后,本文将采用一个案例向您介绍如何解释以上输出
-s显示系统中的信号:
[sql]
[root@Think ~]# ipcs -s
------ Semaphore Arrays --------
key semid owner perms nsems
0x000000a7 0 root 600 1
0xf5d4b884 131073 oracle 640 154
他显示一些有价值的数据,显示ID为0的信号组具有1个信号,另一个信号组有154个信号
如果您增加信号,则总值必须低于内核参数(semmax)定义的上限
安装Oracle软件时,预安装的检查程序将检查semmax的设置
之后,当系统达到稳定状态时,您可以检查实际的利用情况,然后相应调整内核值
针对Oracle用户的用法
如何查看Oracle 数据库实例使用的共享内存段?
为此,请使用oradebug命令
如果您增加信号,则总值必须低于内核参数(semmax)定义的上限
安装Oracle软件时,预安装的检查程序将检查semmax的设置
之后,当系统达到稳定状态时,您可以检查实际的利用情况,然后相应调整内核值
针对Oracle用户的用法
如何查看Oracle 数据库实例使用的共享内存段?
为此,请使用oradebug命令
[sql]
sys@ORCL> oradebug setmypid
Statement processed.
sys@ORCL> oradebug ipc
Information written to trace file.
sys@ORCL> oradebug TRACEFILE_NAME
/u01/app/oracle/admin/orcl/udump/orcl_ora_7525.trc
现在打开跟踪文件,将会看到共享内存ID(5505041)
[sql]
Area #0 `Fixed Size' containing Subareas 0-0
Total size 0000000000129cb0 Minimum Subarea size 00000000
Area Subarea Shmid Stable Addr Actual Addr
0 0 5505041 0x00000020000000 0x00000020000000
Subarea size Segment size
000000000012a000 0000000019002000
Area #1 `Variable Size' containing Subareas 2-2
Total size 0000000018c00000 Minimum Subarea size 00400000
Area Subarea Shmid Stable Addr Actual Addr
1 2 5505041 0x00000020400000 0x00000020400000
Subarea size Segment size
0000000018c00000 0000000019002000
Area #2 `Redo Buffers' containing Subareas 1-1
Total size 00000000002d6000 Minimum Subarea size 00000000
Area Subarea Shmid Stable Addr Actual Addr
2 1 5505041 0x0000002012a000 0x0000002012a000
Subarea size Segment size
00000000002d6000 0000000019002000
可以使用共享内存ID来获取共享内存的详细信息
结合上面提到的ipcs -m -i 5505041
另一个有用的观察是lpid的值----最后一个接触共享内存段的进程的进程ID
要展示该属性值,使用SQL*PLUS从另一个会话连接到该实例
[sql]
[oracle@Think ~]$ sqlplus / as sysdba
sys@ORCL> select spid from v$process where addr = (select paddr from v$session where
sid = (select sid from v$mystat where rownum<2));
sid = (select sid from v$mystat where rownum<2));
SPID
------------
11439
现在,针对同一个共享内存段再次执行ipcs命令
[sql]
[root@Think ~]# ipcs -m -i 5505041
Shared memory Segment shmid=5505041
uid=501 gid=502 cuid=501 cgid=502
mode=0640 access_perms=0640
bytes=419438592 lpid=11476 cpid=5300 nattch=20
att_time=Sun Feb 3 21:25:31 2013
det_time=Sun Feb 3 21:25:31 2013
change_time=Sun Feb 3 09:08:06 2013
注意,lpid的值已经从原来的值10881更改为11476
lpid显示最后一个接触共享内存段的进程的PID
⑶ ipcrm
既然您已经标识了共享内存和其他IPC指标,那么使用它们做什么呢?
之前您看到过一些用法,如标识 Oracle使用的共享内存,确保为共享内存设置了内核参数等等
另一个常见的应用是删除共享内存,IPC消息队列或信