Oracle shmmax参数设置与SGA的关系

      Linux系统层面shmmax定义的是单个共享内存段的最大值.如果该参数设置小于Oracle SGA设置,那么SGA仍然可以创建成功,但是会被分配多个共享内存段.推荐调整shmmax设置,将SGA限制在一个共享内存段中。

流程:

在Linux平台shmmax默认值为32M:
[root@server1 ~]# more /proc/sys/kernel/shmmax
33554432
[oracle@server1 ~]$ sqlplus / as sysdba
SQL> startup;
ORACLE instance started.
Total System Global Area  830930944 bytes
Fixed Size                  2257800 bytes
Variable Size             524291192 bytes
Database Buffers          297795584 bytes
Redo Buffers                6586368 bytes
Database mounted.
Database opened.

系统分配给Oracle的共享内存段:

[oracle@server1 ~]$ ipcs -sa
------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status      
0x00000000 294915     oracle     640        4096       0                       
0x00000000 327684     oracle     640        4096       0                       
0x00000000 360453     oracle     640        4096       0                       
0x00000000 393222     oracle     640        4096       0                       
0x00000000 425991     oracle     640        4096       0                       
0x00000000 458760     oracle     640        4096       0                       
0x00000000 491529     oracle     640        4096       0                       
0x00000000 524298     oracle     640        4096       0                       
0x00000000 557067     oracle     640        4096       0                       
0x00000000 589836     oracle     640        4096       0                       
0x00000000 622605     oracle     640        4096       0                       
0x00000000 655374     oracle     640        4096       0                       
0x00000000 688143     oracle     640        4096       0                       
0x00000000 720912     oracle     640        4096       0                       
0x00000000 753681     oracle     640        4096       0                       
0x00000000 786450     oracle     640        4096       0                       
0x00000000 819219     oracle     640        4096       0                       
0x00000000 851988     oracle     640        4096       0                       
0x00000000 884757     oracle     640        4096       0                       
0x00000000 917526     oracle     640        4096       0                       
0x00000000 950295     oracle     640        4096       0                       
0x00000000 983064     oracle     640        4096       0                       
0x00000000 1015833    oracle     640        4096       0                       
0x00000000 1048602    oracle     640        4096       0                       
0x00000000 1081371    oracle     640        4096       0                       
0x00000000 1114140    oracle     640        4096       0                       
0xba1697c4 1146909    oracle     640        4096       0                       

------ Semaphore Arrays --------
key        semid      owner      perms      nsems     
0x4d96aff0 360450     oracle     640        154       

//共分配给Oracle 23个共享内存段

针对一个进程具体观察:

[oracle@server1 ~]$ ps -ef | grep smon
oracle     2684      1  0 23:51 ?        00:00:00 ora_smon_prod

[oracle@server1 ~]$ pmap 2684
2684:   ora_smon_prod
0000000000400000 189264K r-x--  /oracle/app/product/11.2.0/db_1/bin/oracle
000000000bed4000   2020K rw---  /oracle/app/product/11.2.0/db_1/bin/oracle
000000000c0cd000    348K rw---    [ anon ]
000000000d00c000    268K rw---    [ anon ]
0000000060000000      4K r--s-  /dev/shm/ora_prod_294915_0
0000000060001000   4092K rw-s-  /dev/shm/ora_prod_294915_0
....
0000000073000000   4096K rw-s-  /dev/shm/ora_prod_622605_1
0000000073400000   4096K rw-s-  /dev/shm/ora_prod_622605_2
0000000073800000   4096K rw-s-  /dev/shm/ora_prod_622605_3
0000000073c00000   4096K rw-s-  /dev/shm/ora_prod_622605_4
0000000074000000   4096K rw-s-  /dev/shm/ora_prod_622605_5
0000000074400000   4096K rw-s-  /dev/shm/ora_prod_622605_6
....
0000000076400000   4096K rw-s-  /dev/shm/ora_prod_655374_6
0000000076800000   4096K rw-s-  /dev/shm/ora_prod_655374_7
....
000000007bc00000   4096K rw-s-  /dev/shm/ora_prod_753681_4
000000007c000000   4096K rw-s-  /dev/shm/ora_prod_753681_5
000000007c400000   4096K rw-s-  /dev/shm/ora_prod_753681_6
000000007c800000   4096K rw-s-  /dev/shm/ora_prod_753681_7
000000007cc00000   4096K rw-s-  /dev/shm/ora_prod_786450_0
....
0000000082400000   4096K rw-s-  /dev/shm/ora_prod_851988_6
0000000082800000   4096K rw-s-  /dev/shm/ora_prod_851988_7
0000000082c00000   4096K rw-s-  /dev/shm/ora_prod_884757_0
0000000083000000   4096K rw-s-  /dev/shm/ora_prod_884757_1
0000000083400000   4096K rw-s-  /dev/shm/ora_prod_884757_2
....
0000000089400000   4096K rw-s-  /dev/shm/ora_prod_983064_2
0000000089800000   4096K rw-s-  /dev/shm/ora_prod_983064_3
0000000089c00000   4096K rw-s-  /dev/shm/ora_prod_983064_4
....
0000000090400000   4096K rw-s-  /dev/shm/ora_prod_1081371_6
0000000090800000   4096K rw-s-  /dev/shm/ora_prod_1081371_7
0000000090c00000   4096K rw-s-  /dev/shm/ora_prod_1114140_0
0000000091000000   4096K rw-s-  /dev/shm/ora_prod_1114140_1
0000000091400000   4096K rw-s-  /dev/shm/ora_prod_1114140_2
0000000091800000   4096K rw-s-  /dev/shm/ora_prod_1114140_3
0000000091c00000   4096K rw-s-  /dev/shm/ora_prod_1146909_0

这里的/dev/shm/ora_prod_1146909_0中的1146909就是共享内存ID.
为了避免多个共享内存段,可以修改shmmax内核参数,使SGA存在于一个共享内存段中。

修改测试:

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.

修改kernel.shmmax = 2147483648
[root@server1 ~]# more /proc/sys/kernel/shmmax 
2147483648


SQL> startup;
ORACLE instance started.
Total System Global Area  830930944 bytes
Fixed Size                  2257800 bytes
Variable Size             524291192 bytes
Database Buffers          297795584 bytes
Redo Buffers                6586368 bytes
Database mounted.
Database opened.

再次查询共享内存段分配情况:

[oracle@server1 ~]$ ipcs -sa

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status      
0x00000000 2162691    oracle     640        4096       0                       
0x00000000 2195460    oracle     640        4096       0                       
0xba1697c4 2228229    oracle     640        4096       0                       

------ Semaphore Arrays --------
key        semid      owner      perms      nsems     
0x4d96aff0 622594     oracle     640        154       

------ Message Queues --------
key        msqid      owner      perms      used-bytes   messages 

三个共享内存段.

[oracle@server1 ~]$ ps -ef | grep smon
oracle     2918      1  0 00:06 ?        00:00:00 ora_smon_prod

[oracle@server1 ~]$ pmap 2918
0000000060000000      4K r--s-  /dev/shm/ora_prod_2162691_0
0000000060001000   4092K rw-s-  /dev/shm/ora_prod_2162691_0
0000000060400000   4096K rw-s-  /dev/shm/ora_prod_2162691_1
....
....
0000000091800000   4096K rw-s-  /dev/shm/ora_prod_2195460_195
0000000091c00000   4096K rw-s-  /dev/shm/ora_prod_2228229_0

说明:
      在数据库异常关闭情况下,可能会出现后台进程未正常退出,共享内存未及时释放,对于这种情况,可以通过ipcs命令找到共享内存段的段ID,然后通过ipcrm命令可以强制释放共享内存段资源,之后数据库则可以正常启动。

参考于盖国强老师<深入解析Oracle.DBA入门进阶与诊断案例>

时间:20210120

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值