------- OSM -------
Oracle 从12c开始在 SOLARIS平台上采用 OSM (Optimal Shared Memory) 作为申请SGA内存的默认机制,代替之前的ISM和Dynamic ISM,Solaris从以下版本开始支持OSM:
Oracle Solaris 10 1/13.
Oracle Solaris 11 SRU 7.5 or later.
对于如何启动OSM,引用MOS文档上的描述:"Provided that you are running on a version of Oracle Solaris which contains the OSM feature, OSM will be used to implement the SGA whenever you define MEMORY_MAX_TARGET to a value strictly greater than (and not equal to) MEMORY_TARGET."但是根据实验,两个参数相等时也可以启用。 有两种方法可以检测是否启用OSM。
1. 执行 "ipcs -dm " 查看列“ALLOC”
ALLOC列值中有连字符“-”证明OSM没有启用;如果列值是整型数字证明自用OSM:(例子中为系统启用了OSM)
# ipcs -dm
T ID KEY MODE OWNER GROUP ALLOC
Shared Memory:
m 486539308 0x0 --rw-r----- racusr osasm 16777216
m 486539307 0x0 --rw-r----- racusr osasm 1358954496
m 486539306 0xd6dbf168 --rw-r----- racusr osasm 16777216
m 369098787 0x0 --rw-r----- crsusr oinstall 658505728
m 369098786 0x78f47b24 --rw-r----- crsusr oinstall 4194304
2. 用pmap命令结果搜索 osm 关键字,pmap -xs 'ora_pmon' | grep osm
# pmap -xs `ps -ef | grep ora_pmon | grep -v grep | awk \'{print $2}\'` | grep osm
0000000380000000 16384 16384 - 16384 4M rwxs- [ osm shmid=0x1d00002a ]
0000000400000000 704512 - - - - ---s- [ osm shmid=0x1d00002b ]
000000042B000000 1327104 1327104 - 1327104 4M rwxs- [ osm shmid=0x1d00002b ]
0000000480000000 16384 16384 - 16384 4M rwxs- [ osm shmid=0x1d00002c ]
-------MPMT-------
Unix/Linux中oracle数据库进程采用多进程模式,如我们可以在系统进程列表中看到pmon,smon,dbwr,lgwr,ckpt等oracle系统进程。随着oracle数据库功能增多,进程数量也随之增加,创建进程的开销以及进程上下文切换的开销也越来越大(进程状态切换 switching 是要直接硬件CPU资源),多线程结构中,线程切换在用户空间通过库函数实现,开销不在一个量级。
以下介绍在RAC环境下如何启用多线程模式
1. 如果spfile不在ASM上,保证在每个rac节点中修改参数“threaded_execution=TRUE”;如果spfile在ASM上共享,只需要在一个节点中修改就好
SQL> show parameter threaded
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
threaded_execution boolean FALSE
SQL> alter system set threaded_execution=true scope=spfile;
System altered.
2. 重启数据库:
srvctl stop database -d srvctl start database -d 3.在listener.ora中 DEDICATED_THROUGH_BROKER_=ON 保证客户端连接采用多线程模式。