// kernel Semaphore 파라미터
// 세마포어는 여러 프로세스가 공유 자원(메모리 같은?)를 사용하기위해 프로세스의 접근을 직렬화 시켜주는 수단.
// 왼쪽 부터 SEMMSL, SEMMNS, SEMOPM, SEMMNI
sysctl -a | grep kernel.sem
kernel.sem = 250 32000 100 128
SEMMSL: 배열당 최대 세마포어 수 (max semaphores per array)
SEMMNS: 시스템 전체 최대 세마포어 수 (max semaphores system wide)
SEMOPM : 세마포어 호출당 최대 operation 수 (max ops per semop call)
SEMMNI: 최대 배열 수(max number of arrays)
// kernel shared memory 파라미터
kernel.shmmax :
공유 메모리 세그먼트의 최대 크기를 정의함.
커널이 응용프로그램들에게 메모리를 할당해줄 때 작게 여러 번 할당하지 않고 큰 덩어리(=세그먼트)로
한꺼번에 주게됨. 이값이 너무 작으면 DB를 시작시킬때
"ORA-27123 : unable to attach to shared memory segment"
라는 메시지가 발생할 수 있고 너무 크면 세그먼트의 사용되지 않는 빈 공간을 두기 때문에 메모리 낭비가
발생함. 이값의 기본 값은 32MB. 오라클 사용 시에는 2G로 설정하도록 권장.
kernel.shmmni :
공유 메모리 세그먼트의 최대 개수를 설정하는데 사용됨.
기본 값 4096.
kernel.shmall :
특정 시점에서 시스템에 사용 가능한 공유 메모리의 최대 크기를 설정하는데 사용함.
이 값은 "ceil(shmmax/page_size)" 으로 권장함. 기본 값은 209715 byte.
kernel.shmseg :
1개의 프로세스에 부여될 수 있는 공유메모리 세그먼트의 최대 개수를 의미함.
위에서 살펴본 shmmni는 시스템 전체에서 사용가능한 공유 메모리 세그먼트의 최대 개수이고
이 파라미터는 1개의 프로세스가 사용할 수 있는 공유 메모리 세그먼트의 최대 개수.
// unix 세마포어와 Oracle DB의 관계 (linux와 다른 점이 있을 듯함.)
https://cafe.naver.com/prodba/11187
// 어떤 프로세스가 세마포어를 잡고있는지 궁금해져서 script로 list 뽑음.
# 스크립트 실행시 파라미터(oracle 실행계정) 넣어서 실행 # semaphore check USERID=$1 SEMID=`ipcs -s | grep $USERID | head -n 1 | awk '{print $2}'` SEMNUM=`ipcs -s -i $SEMID | awk 'NR>=9' | wc -l` #echo "semid:"+$SEMID+",semnum:"+$SEMNUM for ((n=9;n<=$SEMNUM;n++)) do #echo $n PID=`ipcs -s -i $SEMID | awk -v ln=$n 'NR>=9&&NR==ln {print $NF}'` #echo "####PID:"+$PID if [ $PID != 0 ] && [ -n "$PID" ] then PSRESULT=`ps -ef | grep $USERID | grep $PID | grep -v grep` if [ -z "$PSRESULT" ] then echo -e "[ #PID:$PID ] : cannot found. may be already released." else echo -e "`ipcs -s -i $SEMID | awk -v ln=$n 'NR>=9&&NR==ln{$NF=""; print $0}'` $PSRESULT" fi #echo -e "`ipcs -s -i $SEMID | awk -v ln=$n 'NR>=9&&NR==ln{$NF=""; print $0}'` `ps -ef | grep $USERID | grep $PID | grep -v grep`" fi done |
[root@oracle12cR2 ~]# sh ./semaphorecheck.sh oracle
[ #PID:3609 ] : cannot find. may be already released.
[ #PID:3609 ] : cannot find. may be already released.
[ #PID:3609 ] : cannot find. may be already released.
[ #PID:3609 ] : cannot find. may be already released.
6 0 1 0 oracle 3678 1 0 08:31 ? 00:00:06 ora_pmon_oradb
7 0 1 0 oracle 3680 1 0 08:31 ? 00:00:02 ora_clmn_oradb
8 0 1 0 oracle 3682 1 0 08:31 ? 00:00:22 ora_psp0_oradb
10 0 1 0 oracle 3689 1 0 08:31 ? 00:00:06 ora_gen0_oradb
11 0 1 0 oracle 3692 1 0 08:31 ? 00:00:03 ora_mman_oradb
12 0 1 0 oracle 37114 1 0 14:31 ? 00:00:00 ora_w003_oradb
13 0 1 0 oracle 3696 1 0 08:31 ? 00:00:18 ora_gen1_oradb
14 0 1 0 oracle 3696 1 0 08:31 ? 00:00:18 ora_gen1_oradb
16 0 1 0 oracle 3703 1 0 08:31 ? 00:00:03 ora_ofsd_oradb
17 0 1 0 oracle 3703 1 0 08:31 ? 00:00:03 ora_ofsd_oradb
18 0 1 0 oracle 3707 1 0 08:31 ? 00:00:28 ora_dbrm_oradb
19 0 0 0 oracle 3709 1 1 08:31 ? 00:04:11 ora_vkrm_oradb
20 0 1 0 oracle 3711 1 0 08:31 ? 00:00:05 ora_svcb_oradb
oracle 37114 1 0 14:31 ? 00:00:00 ora_w003_oradb
21 0 1 0 oracle 3713 1 0 08:31 ? 00:00:10 ora_pman_oradb
23 0 1 0 oracle 3718 1 0 08:31 ? 00:00:03 ora_dbw0_oradb
24 0 1 0 oracle 3720 1 0 08:31 ? 00:00:04 ora_lgwr_oradb
25 0 1 0 oracle 3722 1 0 08:31 ? 00:00:44 ora_ckpt_oradb
26 0 1 0 oracle 3724 1 0 08:31 ? 00:00:02 ora_lg00_oradb
27 0 1 0 oracle 3726 1 0 08:31 ? 00:00:02 ora_smon_oradb
28 0 1 0 oracle 3728 1 0 08:31 ? 00:00:01 ora_lg01_oradb
29 0 1 0 oracle 3730 1 0 08:31 ? 00:00:04 ora_smco_oradb
30 0 1 0 oracle 3732 1 0 08:31 ? 00:00:01 ora_reco_oradb
31 0 1 0 oracle 26651 1 0 13:32 ? 00:00:00 ora_w007_oradb
[ #PID:42677 ] : cannot find. may be already released.
34 0 1 0 oracle 3741 1 0 08:31 ? 00:00:02 ora_pxmn_oradb
35 0 1 0 oracle 3743 1 0 08:31 ? 00:00:02 ora_rbal_oradb
36 0 0 0 oracle 3745 1 0 08:31 ? 00:00:02 ora_asmb_oradb
38 0 1 0 oracle 3751 1 0 08:31 ? 00:02:10 ora_mmon_oradb
39 0 1 0 oracle 3753 1 0 08:31 ? 00:00:03 ora_mmnl_oradb
42 0 1 0 oracle 3759 1 0 08:31 ? 00:00:02 ora_tmon_oradb
43 0 1 0 oracle 3761 1 0 08:31 ? 00:00:07 ora_mark_oradb
44 0 1 0 oracle 37875 1 0 14:42 ? 00:00:00 ora_w001_oradb
45 0 0 0 oracle 3769 1 0 08:31 ? 00:00:00 oracleoradb (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
46 0 1 0 oracle 38173 1 0 14:46 ? 00:00:00 ora_w004_oradb
[ #PID:42679 ] : cannot find. may be already released.
48 0 1 0 oracle 3793 1 0 08:31 ? 00:00:02 ora_tt00_oradb
49 0 1 0 oracle 3795 1 0 08:31 ? 00:00:01 ora_arc0_oradb
50 0 1 0 oracle 3797 1 0 08:31 ? 00:00:01 ora_tt01_oradb
51 0 1 0 oracle 3799 1 0 08:31 ? 00:00:03 ora_arc1_oradb
52 0 1 0 oracle 3801 1 0 08:31 ? 00:00:01 ora_arc2_oradb
53 0 1 0 oracle 3803 1 0 08:31 ? 00:00:01 ora_arc3_oradb
55 0 1 0 oracle 3816 1 0 08:31 ? 00:00:01 ora_aqpc_oradb
56 0 1 0 oracle 3822 1 0 08:31 ? 00:01:28 ora_cjq0_oradb
57 0 1 0 oracle 5447 1 0 08:51 ? 00:02:03 ora_o000_oradb
[ #PID:39938 ] : cannot find. may be already released.
[ #PID:38918 ] : cannot find. may be already released.
[ #PID:38820 ] : cannot find. may be already released.
[ #PID:34867 ] : cannot find. may be already released.
62 0 1 0 oracle 3940 1 0 08:31 ? 00:00:02 ora_qm02_oradb
[ #PID:34494 ] : cannot find. may be already released.
64 0 1 0 oracle 3969 1 0 08:31 ? 00:00:02 ora_q001_oradb
[ #PID:14330 ] : cannot find. may be already released.
67 0 1 0 oracle 3981 1 0 08:31 ? 00:00:01 ora_q003_oradb
[ #PID:3983 ] : cannot find. may be already released.
[ #PID:3985 ] : cannot find. may be already released.
[ #PID:4080 ] : cannot find. may be already released.
[ #PID:4061 ] : cannot find. may be already released.
[ #PID:4053 ] : cannot find. may be already released.
[ #PID:4059 ] : cannot find. may be already released.
[ #PID:4057 ] : cannot find. may be already released.
[ #PID:4072 ] : cannot find. may be already released.
[ #PID:4068 ] : cannot find. may be already released.
[ #PID:4078 ] : cannot find. may be already released.
[root@oracle12cR2 ~]# sh ./semaphorecheck.sh grid
[ #PID:3185 ] : cannot found. may be already released.
[ #PID:3185 ] : cannot found. may be already released.
[ #PID:3185 ] : cannot found. may be already released.
[ #PID:3185 ] : cannot found. may be already released.
8 0 1 0 grid 3227 1 0 08:26 ? 00:00:21 asm_psp0_+ASM
10 0 1 0 grid 3234 1 0 08:26 ? 00:00:07 asm_gen0_+ASM
11 0 1 0 grid 3236 1 0 08:26 ? 00:00:02 asm_mman_+ASM
17 0 1 0 grid 3251 1 0 08:26 ? 00:00:02 asm_dbw0_+ASM
18 0 1 0 grid 3253 1 0 08:26 ? 00:00:02 asm_lgwr_+ASM
19 0 1 0 grid 3255 1 0 08:26 ? 00:00:03 asm_ckpt_+ASM
23 0 1 0 grid 3263 1 0 08:26 ? 00:00:07 asm_rbal_+ASM
24 0 1 0 grid 3265 1 0 08:26 ? 00:00:25 asm_gmon_+ASM
25 0 1 0 grid 3267 1 0 08:26 ? 00:00:09 asm_mmon_+ASM
[ #PID:3272 ] : cannot found. may be already released.
[ #PID:3276 ] : cannot found. may be already released.
29 0 1 0 grid 3749 1 0 08:31 ? 00:00:08 oracle+ASM_asmb_oradb (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
31 0 1 0 grid 3650 1 0 08:30 ? 00:00:08 oracle+ASM_asmb_+asm (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
[ #PID:5124 ] : cannot found. may be already released.
[ #PID:44598 ] : cannot found. may be already released.
[ #PID:44486 ] : cannot found. may be already released.
[ #PID:18157 ] : cannot found. may be already released.
[ #PID:4247 ] : cannot found. may be already released.
// 3번째 인수가 1이면 아직 세마포어를 사용하고 있는 것임. 0이라면 메모리를 사용하고 세마포어를 반납한 상태.
// process id를 ps 명령어에서 찾지 못하면 'cannot find. may be already released.' 메시지를 출력한다. 즉, 과거에 존재했던 프로세스가 세마포어를 사용하고 반납 후, 종료되거나 kill 되어진 것임.
'Oracle' 카테고리의 다른 글
[Oracle] ORA-19909: datafile 1 belongs to an orphan incarnation (0) | 2021.03.09 |
---|---|
[Oracle] 데이터베이스 강제 Open (ORA-00704 ORA-00604 ORA-01555) (0) | 2021.03.09 |
[Oracle] Oracle logminer (로그마이너) (0) | 2021.01.13 |
[Oracle] Oracle 11gR2 RHEL7에 설치 시 에러 (0) | 2020.11.11 |
[Oracle] RMAN Backup (Incremental Backup) (0) | 2020.10.30 |