ORACLE在各作業系統訊號量與共享記憶體的維護

記錄每一次錯誤發表於2018-12-18


----------

訊號量與共享記憶體設定

----------

1.LIUNX

cat /etc/sysctl.conf

共享記憶體:

kernel.shmall = 2097152 # 可以使用的共享記憶體的總量,單位:頁。 取值:推薦大於shmmax/page_size(getconf PAGE_SIZE 一般4096)

kernel.shmmax = 2147483648 # 最大單個共享記憶體段大小。           取值:推薦大於sag_max_size

kernel.shmmni = 4096 # 整個系統共享記憶體段的最大數目。              取值:預設值

訊號量:

kernel.sem = 5010 641280 5010 128 #SEMMSL, SEMMNS, SEMOPM, SEMMNI

每個訊號物件集的最大訊號物件數;系統範圍內最大訊號物件數;每個訊號物件支援的最大運算元;系統範圍內最大訊號物件集數。

SEMMSL

設定:最小250;對於processes引數設定較大的系統建議設定為processes+10


SEMMNS

設定:至少32000;SEMMSL * SEMMNI 


SEMOPM

設定:至少100;或者等於SEMMSL 


SEMMNI

含義:linux系統訊號量set最大個數 

設定:最少128 





2.HPUX

訊號量:

kctune -h -B semmni="4096"   全系統的最大訊號量                                 Default:  nproc(全系統程式的最大數)

kctune -h -B semmns="16384"  全系統內,使用者可訪問的最大訊號量  Default:  semmni*2

kctune -h -B semmnu="4092"   每個訊號量的最大數                                Maximum:  nproc-4

kctune -h -B semvmx="32767"  所允許的訊號量值的最大數                    Maximum:  65535



共享記憶體:


kctune -h -B shmmax="34359738368"   最大共享記憶體段大小

kctune -h -B shmem=1                              啟動/關閉共享記憶體 1(開啟)

kctune -h -B shmmni="4096"                   系統上的最大段

kctune -h -B shmseg="512"                     每個程式的最大段           Maximum:    shmmni





3.AIX

AIX一般不用手工調整,而是系統動態的,如果執行後報共享記憶體或訊號量不足,將maxuproc單個使用者允許的最大程式數 調大即可(用命令smitty system或chdev)。

$su – root

#chdev –l sys0 –a maxuproc=1000



4.Solaris

修改Solaris 9裡/etc/system,參考值如下所示:

訊號量:

set semsys:seminfo_semmni=20000   指定最大訊號識別符號數

set semsys:seminfo_semmsl=29000   指定每個訊號識別符號的最大 System V 訊號數

set semsys:seminfo_semmns=30000   系統上的最大 System V 訊號數。

set semsys:seminfo_semopm=31000   指定每個 semop 呼叫的最大 System V 訊號運算元。

set semsys:seminfo_semmnu=32000   System V 訊號系統支援的撤消結構總數。

set semsys:seminfo_semume=10         可以由任一程式使用的最大 System V 訊號撤消結構數

set semsys:seminfo_semvmx=32767   可以設定的最大訊號值

共享記憶體:

shmsys:shminfo_shmmni   對可以建立的共享記憶體段數設定的系統範圍限制。

shmsys:shminfo_shmmax   可以建立的 System V 共享記憶體段的最大大小。





----------

訊號量與共享記憶體管理

----------



1.ORACLE提供了sysresv工具管理共享記憶體以及訊號量



$ sysresv -l "ORCL" 檢視例項對應的訊號量與共享記憶體

IPC Resources for ORACLE_SID "ORCL":

Shared Memory:

ID              KEY

65537           0x3b751258

Semaphores:

ID              KEY

98304           0xe21c75d0

Oracle Instance alive for sid "ORCL"



sysresv -f引數可以移除共享段(僅適用於例項不存在,作業系統共享段不釋放條件)

$ export ORACLE_SID=orcl 

$ sysresv -f orcl



2.作業系統級別可以透過ipcs/ipcrm管理(多例項下可以結合sysresv確定)



ipcs -a或ipcs 顯示當前系統中共享記憶體段、訊號量集、訊息佇列的使用情況;

ipcs -m 顯示共享記憶體段的使用情況;

ipcs -s 顯示訊號量集的使用情況;

ipcs -q 顯示訊息佇列的使用情況;





清理相關共享記憶體、訊號量,佇列等共享資訊命令如下:

ipcrm -s semid 刪除對應的訊號量集

ipcrm -m shmid 刪除對應的共享記憶體段

ipcrm -q msqid 刪除對應的訊息佇列





3.經常有因為共享記憶體、訊號量,佇列等共享資訊沒有乾淨地清理而引起一些問題



比如:


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

這個時就可能需要清理相關的訊號量(也可以增加訊號量值)


原文:https://blog.csdn.net/chinahuanghuajun/article/details/78143900 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31547066/viewspace-2285591/,如需轉載,請註明出處,否則將追究法律責任。

相關文章