背景
通过上篇文章:Oracle Session 相关介绍(一)介绍到Session 的变化是根据Process 来计算的,所以通过Process来调整Session。本篇测试的是 Processes & kernel.sem 变化调整。
- 设置kernel.sem与Process设置不合理,启库报错:
ORA-27154: post/wait create failed
ORA-27300: OS system dependent operation:semget failed with status: 28
ORA-27301: OS failure message: No space left on device
ORA-27302: failure occurred at: sskgpcreates
- 相关文档可参考: 文档 ID 949468.1
环境介绍
- 系统版本:CentOS release 6.7
- Oracle 版本:Release 11.2.0.3.0
- kernel.sem 参数:
[root@db ~]# vim /etc/sysctl.conf
kernel.sem = 250 32000 100 128
kernel.sem =semmsl semmns semopm semmni
#semmsl:表示一个信号量集合中能够包含的信号量最大数目。<============== 250
#semmns:表示系统内可允许的信号量最大数目。<== semmsl * semmni = 250*128 = 32000
#semopm:表示单个semopm()调用在一个信号量集合上可以执行的操作数量。<== 100
#semmni:表示系统信号量集合总数。<================================== 128
- Linux服务器的IPC和信号量:
IPC是指进程之间通信交换数据和信息的一种机制,不同进程之间通过IPC机制实现数据传输、同步和协作,而信号量是IPC实现机制中的一种方式,其他IPC方式还包括消息队列、共享内存和管道,信号量在进程间通信IPC机制中主要充当操作锁的方式,用于控制进程之间对同一资源的申请访问,避免多个进程出现同一时间访问同一资源的问题。在操作系统上面,我们可以通过ipc命令查看信号量的分配使用情况。 - ipcs 查看限制情况
[root@db ~]# ipcs -ls ------ Semaphore Limits -------- <== 信号量限制 max number of arrays = 128 <== 最大数组数量:semmni max semaphores per array = 250 <== 每个数组的最大信号量数目:semmsl max semaphores system wide = 32000 <== 系统量大信号量数:semmns max ops per semop call = 100 <== 每次信号量调用最大操作数:semopm semaphore max value = 32767 <== 信号量最大值
Processes & kernel.sem 测试
正常启库
- processes=16000
- kernel.sem = 250 32000 100 128
[root@db ~]# cat /proc/sys/kernel/sem
250 32000 100 128
[root@db ~]# su - oracle
[oracle@db ~]$ sqlplus / as sysdba
SQL> alter system set processes=16000 scope=spfile;
System altered.
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area 4142166016 bytes
Fixed Size 2234880 bytes
Variable Size 3791652352 bytes
Database Buffers 335544320 bytes
Redo Buffers 12734464 bytes
Database mounted.
Database opened.
- 查看当前信号量使用情况
[root@db ~]# ipcs -a ------ Shared Memory Segments -------- key shmid owner perms bytes nattch status 0x00000000 5013504 oracle 640 4096 0 0x00000000 5046273 oracle 640 4096 0 0xbf5b9418 5079042 oracle 640 4096 0 ------ Semaphore Arrays -------- key semid owner perms nsems 0x00000000 0 root 600 1 0x00000000 65537 root 600 1 0x881e08ec 61931522 oracle 640 250 0x881e08ed 61964291 oracle 640 250 0x881e08ee 61997060 oracle 640 250 0x881e08ef 62029829 oracle 640 250 0x881e08f0 62062598 oracle 640 250 0x881e08f1 62095367 oracle 640 250 0x881e08f2 62128136 oracle 640 250 0x881e08f3 62160905 oracle 640 250 0x881e08f4 62193674 oracle 640 250 0x881e08f5 62226443 oracle 640 250 0x881e08f6 62259212 oracle 640 250 0x881e08f7 62291981 oracle 640 250 0x881e08f8 62324750 oracle 640 250 0x881e08f9 62357519 oracle 640 250 0x881e08fa 62390288 oracle 640 250 0x881e08fb 62423057 oracle 640 250 0x881e08fc 62455826 oracle 640 250 0x881e08fd 62488595 oracle 640 250 0x881e08fe 62521364 oracle 640 250 0x881e08ff 62554133 oracle 640 250 0x881e0900 62586902 oracle 640 250 0x881e0901 62619671 oracle 640 250 0x881e0902 62652440 oracle 640 250 0x881e0903 62685209 oracle 640 250 0x881e0904 62717978 oracle 640 250 0x881e0905 62750747 oracle 640 250 0x881e0906 62783516 oracle 640 250 0x881e0907 62816285 oracle 640 250 0x881e0908 62849054 oracle 640 250 0x881e0909 62881823 oracle 640 250 0x881e090a 62914592 oracle 640 250 0x881e090b 62947361 oracle 640 250 0x881e090c 62980130 oracle 640 250 0x881e090d 63012899 oracle 640 250 0x881e090e 63045668 oracle 640 250 0x881e090f 63078437 oracle 640 250 0x881e0910 63111206 oracle 640 250 0x881e0911 63143975 oracle 640 250 0x881e0912 63176744 oracle 640 250 0x881e0913 63209513 oracle 640 250 0x881e0914 63242282 oracle 640 250 0x881e0915 63275051 oracle 640 250 0x881e0916 63307820 oracle 640 250 0x881e0917 63340589 oracle 640 250 0x881e0918 63373358 oracle 640 250 0x881e0919 63406127 oracle 640 250 0x881e091a 63438896 oracle 640 250 0x881e091b 63471665 oracle 640 250 0x881e091c 63504434 oracle 640 250 0x881e091d 63537203 oracle 640 250 0x881e091e 63569972 oracle 640 250 0x881e091f 63602741 oracle 640 250 0x881e0920 63635510 oracle 640 250 0x881e0921 63668279 oracle 640 250 0x881e0922 63701048 oracle 640 250 0x881e0923 63733817 oracle 640 250 0x881e0924 63766586 oracle 640 250 0x881e0925 63799355 oracle 640 250 0x881e0926 63832124 oracle 640 250 0x881e0927 63864893 oracle 640 250 0x881e0928 63897662 oracle 640 250 0x881e0929 63930431 oracle 640 250 0x881e092a 63963200 oracle 640 250 0x881e092b 63995969 oracle 640 250 0x881e092c 64028738 oracle 640 250 0x881e092d 64061507 oracle 640 250 ------ Message Queues -------- key msqid owner perms used-bytes messages
- 250(信号量数目)*66(Oracle Arrays)+2(root Arrays)*1=16502 > processes=16000 ,因此启库成功
- 查看并验证
[root@db ~]$ ipcs -su ------ Semaphore Status -------- used arrays = 68 <== 已使用数组 allocated semaphores = 16502 <== 已分配信号量数
调整参数【semmni:表示系统信号量集合总数】
- processes=16500,启库失败,看来不能擦边设置
SQL> alter system set processes=16500 scope=spfile;
System altered.
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORA-27154: post/wait create failed
ORA-27300: OS system dependent operation:semget failed with status: 28
ORA-27301: OS failure message: No space left on device
ORA-27302: failure occurred at: sskgpcreates
- 解决:修改【semmni:150】
[root@db ~]# vim /etc/sysctl.conf
kernel.sem = 250 32000 100 128
修改
kernel.sem = 250 32000 100 150
- 再次启库成功
[root@db ~]# sysctl -p
kernel.sem = 250 32000 100 150
[root@db ~]# su - oracle
[oracle@db ~]$ sqlplus / as sysdba
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area 4142166016 bytes
Fixed Size 2234880 bytes
Variable Size 3976201728 bytes
Database Buffers 150994944 bytes
Redo Buffers 12734464 bytes
Database mounted.
Database opened.
SQL> show parameter process;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
processes integer 16500
- 再次查看使用情况:17154 > processes=16500
[root@db ~]# ipcs -su ------ Semaphore Status -------- used arrays = 136 allocated semaphores = 17154
- 将semmni:128上调至150,但semmsl:由原来的250 下降至128(自动下调,未查明原因)
[root@db ~]# ipcs -a ------ Shared Memory Segments -------- key shmid owner perms bytes nattch status 0x00000000 5406720 oracle 640 4096 0 0x00000000 5439489 oracle 640 4096 0 0xbf5b9418 5472258 oracle 640 4096 0 ------ Semaphore Arrays -------- key semid owner perms nsems 0x00000000 0 root 600 1 0x00000000 65537 root 600 1 0x881e08ec 70746114 oracle 640 128 0x881e08ed 70778883 oracle 640 128 0x881e08ee 70811652 oracle 640 128 0x881e08ef 70844421 oracle 640 128 0x881e08f0 70877190 oracle 640 128 0x881e08f1 70909959 oracle 640 128 0x881e08f2 70942728 oracle 640 128 0x881e08f3 70975497 oracle 640 128 0x881e08f4 71008266 oracle 640 128 0x881e08f5 71041035 oracle 640 128 0x881e08f6 71073804 oracle 640 128 0x881e08f7 71106573 oracle 640 128 0x881e08f8 71139342 oracle 640 128 0x881e08f9 71172111 oracle 640 128 0x881e08fa 71204880 oracle 640 128 0x881e08fb 71237649 oracle 640 128 0x881e08fc 71270418 oracle 640 128 0x881e08fd 71303187 oracle 640 128 0x881e08fe 71335956 oracle 640 128 0x881e08ff 71368725 oracle 640 128 0x881e0900 71401494 oracle 640 128 0x881e0901 71434263 oracle 640 128 0x881e0902 71467032 oracle 640 128 0x881e0903 71499801 oracle 640 128 0x881e0904 71532570 oracle 640 128 0x881e0905 71565339 oracle 640 128 0x881e0906 71598108 oracle 640 128 0x881e0907 71630877 oracle 640 128 0x881e0908 71663646 oracle 640 128 0x881e0909 71696415 oracle 640 128 0x881e090a 71729184 oracle 640 128 0x881e090b 71761953 oracle 640 128 0x881e090c 71794722 oracle 640 128 0x881e090d 71827491 oracle 640 128 0x881e090e 71860260 oracle 640 128 0x881e090f 71893029 oracle 640 128 0x881e0910 71925798 oracle 640 128 0x881e0911 71958567 oracle 640 128 0x881e0912 71991336 oracle 640 128 0x881e0913 72024105 oracle 640 128 0x881e0914 72056874 oracle 640 128 0x881e0915 72089643 oracle 640 128 0x881e0916 72122412 oracle 640 128 0x881e0917 72155181 oracle 640 128 0x881e0918 72187950 oracle 640 128 0x881e0919 72220719 oracle 640 128 0x881e091a 72253488 oracle 640 128 0x881e091b 72286257 oracle 640 128 0x881e091c 72319026 oracle 640 128 0x881e091d 72351795 oracle 640 128 0x881e091e 72384564 oracle 640 128 0x881e091f 72417333 oracle 640 128 0x881e0920 72450102 oracle 640 128 0x881e0921 72482871 oracle 640 128 0x881e0922 72515640 oracle 640 128 0x881e0923 72548409 oracle 640 128 0x881e0924 72581178 oracle 640 128 0x881e0925 72613947 oracle 640 128 0x881e0926 72646716 oracle 640 128 0x881e0927 72679485 oracle 640 128 0x881e0928 72712254 oracle 640 128 0x881e0929 72745023 oracle 640 128 0x881e092a 72777792 oracle 640 128 0x881e092b 72810561 oracle 640 128 0x881e092c 72843330 oracle 640 128 0x881e092d 72876099 oracle 640 128 0x881e092e 72908868 oracle 640 128 0x881e092f 72941637 oracle 640 128 0x881e0930 72974406 oracle 640 128 0x881e0931 73007175 oracle 640 128 0x881e0932 73039944 oracle 640 128 0x881e0933 73072713 oracle 640 128 0x881e0934 73105482 oracle 640 128 0x881e0935 73138251 oracle 640 128 0x881e0936 73171020 oracle 640 128 0x881e0937 73203789 oracle 640 128 0x881e0938 73236558 oracle 640 128 0x881e0939 73269327 oracle 640 128 0x881e093a 73302096 oracle 640 128 0x881e093b 73334865 oracle 640 128 0x881e093c 73367634 oracle 640 128 0x881e093d 73400403 oracle 640 128 0x881e093e 73433172 oracle 640 128 0x881e093f 73465941 oracle 640 128 0x881e0940 73498710 oracle 640 128 0x881e0941 73531479 oracle 640 128 0x881e0942 73564248 oracle 640 128 0x881e0943 73597017 oracle 640 128 0x881e0944 73629786 oracle 640 128 0x881e0945 73662555 oracle 640 128 0x881e0946 73695324 oracle 640 128 0x881e0947 73728093 oracle 640 128 0x881e0948 73760862 oracle 640 128 0x881e0949 73793631 oracle 640 128 0x881e094a 73826400 oracle 640 128 0x881e094b 73859169 oracle 640 128 0x881e094c 73891938 oracle 640 128 0x881e094d 73924707 oracle 640 128 0x881e094e 73957476 oracle 640 128 0x881e094f 73990245 oracle 640 128 0x881e0950 74023014 oracle 640 128 0x881e0951 74055783 oracle 640 128 0x881e0952 74088552 oracle 640 128 0x881e0953 74121321 oracle 640 128 0x881e0954 74154090 oracle 640 128 0x881e0955 74186859 oracle 640 128 0x881e0956 74219628 oracle 640 128 0x881e0957 74252397 oracle 640 128 0x881e0958 74285166 oracle 640 128 0x881e0959 74317935 oracle 640 128 0x881e095a 74350704 oracle 640 128 0x881e095b 74383473 oracle 640 128 0x881e095c 74416242 oracle 640 128 0x881e095d 74449011 oracle 640 128 0x881e095e 74481780 oracle 640 128 0x881e095f 74514549 oracle 640 128 0x881e0960 74547318 oracle 640 128 0x881e0961 74580087 oracle 640 128 0x881e0962 74612856 oracle 640 128 0x881e0963 74645625 oracle 640 128 0x881e0964 74678394 oracle 640 128 0x881e0965 74711163 oracle 640 128 0x881e0966 74743932 oracle 640 128 0x881e0967 74776701 oracle 640 128 0x881e0968 74809470 oracle 640 128 0x881e0969 74842239 oracle 640 128 0x881e096a 74875008 oracle 640 128 0x881e096b 74907777 oracle 640 128 0x881e096c 74940546 oracle 640 128 0x881e096d 74973315 oracle 640 128 0x881e096e 75006084 oracle 640 128 0x881e096f 75038853 oracle 640 128 0x881e0970 75071622 oracle 640 128 0x881e0971 75104391 oracle 640 128 ------ Message Queues -------- key msqid owner perms used-bytes messages
调整参数【semmsl:每个数组的最大信号量数目】
- 恢复参数,启库失败
- processes=16500
- kernel.sem = 250 32000 100 128
[root@db ~]# sysctl -p
kernel.sem = 250 32000 100 128
[root@db ~]# su - oracle
[oracle@db ~]$ sqlplus / as sysdba
SQL> startup
ORA-27154: post/wait create failed
ORA-27300: OS system dependent operation:semget failed with status: 28
ORA-27301: OS failure message: No space left on device
ORA-27302: failure occurred at: sskgpcreates
- 调整【semmsl:300】启库成功
[root@db ~]# sysctl -p
kernel.sem = 300 32000 100 128
[root@db ~]# su - oracle
[oracle@db ~]$ sqlplus / as sysdba
SQL> startup
ORACLE instance started.
Total System Global Area 4142166016 bytes
Fixed Size 2234880 bytes
Variable Size 3976201728 bytes
Database Buffers 150994944 bytes
Redo Buffers 12734464 bytes
Database mounted.
Database opened.
SQL> show parameter process;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
processes integer 16500
调整参数【semmns:表示系统内可允许的信号量最大数目】
- 启库失败
- semmns:32000 =>16000
- processes:16000
[root@db ~]# sysctl -p
kernel.sem = 250 16000 100 128
[root@db ~]# su - oracle
[oracle@db ~]$ sqlplus / as sysdba
Connected to an idle instance.
SQL> startup
ORA-27154: post/wait create failed
ORA-27300: OS system dependent operation:semget failed with status: 28
ORA-27301: OS failure message: No space left on device
ORA-27302: failure occurred at: sskgpcreates
- 启库正常,调整:semmns 解决问题
- semmns:16000 =>17000
- processes:16000
[root@db ~]# sysctl -p
kernel.sem = 250 17000 100 128
[root@db ~]# su - oracle
[oracle@db ~]$ sqlplus / as sysdba
Connected to an idle instance.
SQL> startup
ORACLE instance started.
Total System Global Area 4142166016 bytes
Fixed Size 2234880 bytes
Variable Size 3976201728 bytes
Database Buffers 150994944 bytes
Redo Buffers 12734464 bytes
Database mounted.
Database opened.
SQL> show parameter process;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
processes integer 16000
[root@db ~]# ipcs -us
------ Semaphore Status --------
used arrays = 68
allocated semaphores = 16502
小结
- kernel.sem = 250 32000 100 128 :参数按官方文档推荐基本够用;
- ORA-27300: OS system dependent operation:semget failed with status: 28
原因为kernel.sem与Process设置不合理; - kernel.sem =semmsl semmns semopm semmni 参数之间的计算关系和使用情况就需要很深的系统知识了,奈何我是个DBA。后面有机会再深入挖一挖。
欢迎赞赏支持或留言指正

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




