SGA 와 공유 메모리

우 리 는 Oracle DB 를 만 들 때 Linux 시스템 에 있 을 때 관련 매개 변 수 를 설정 합 니 다.예 를 들 어 shmmax, 소재 위치 / proc / sys / kernel / shmmax 는 보통 / etc / sysctl. conf 에서 이 매개 변수 값 을 설정 합 니 다.
shmmax 커 널 매개 변 수 는 시스템 이 허용 하 는 단일 공유 메모리 세그먼트 의 최대 값 을 정의 합 니 다.시험 해 보기:
kernel.shmmax = 17179869180
[oracle@021Y-SH-BKAP ~]$ ipcs -sa
------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status      
0xfc8fb410 17498130   oracle     660        4096       0                      
------ Semaphore Arrays --------
key        semid      owner      perms      nsems     
0xbdab17f8 14581763   oracle     660        154      
------ Message Queues --------
key        msqid      owner      perms      used-bytes   messages

나 는 shmmax 크기 를 수정 하려 고 시도 했다.
kernel.shmmax = 8589934592
sysctl -p
     ,  ipcs    ,             SGA     。
[oracle@021Y-SH-BKAP ~]$ ipcs -sa
------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status0x00000000 17563666   oracle     660        4096       0                0x00000000 17596456   oracle     660        4096       0                0x00000000 17629225   oracle     660        4096       0                0x00000000 17661994   oracle     660        4096       0                0x00000000 17727531   oracle     660        4096       0                0x00000000 17760300   oracle     660        4096       0                0x00000000 17793069   oracle     660        4096       0                0x00000000 17858606   oracle     660        4096       0                0x00000000 17891375   oracle     660        4096       0                0x00000000 17924144   oracle     660        4096       0                0x00000000 17989681   oracle     660        4096       0                0x00000000 18022450   oracle     660        4096       0                0x00000000 18055219   oracle     660        4096       0                0x00000000 18186292   oracle     660        4096       0                0x00000000 18219061   oracle     660        4096       0                0xfc8fb410 19267638   oracle     660        4096       0                      
------ Semaphore Arrays --------
key        semid      owner      perms      nsems     
0xbdab17f8 15237123   oracle     660        154      
------ Message Queues --------
key        msqid      owner      perms      used-bytes   messages

여기 서 저 는 shmmax 를 아주 작은 상황 으로 분배 하려 고 시 도 했 습 니 다. 심지어 sqlplus 연결 인 스 턴 스 를 사용 하 는 데 영향 을 주 었 습 니 다. 즉, sqlplus 연결 인 스 턴 스 도 일정한 메모 리 를 사용 해 야 합 니 다.
ERROR:
ORA-12547: TNS:lost contact
Process J000 died, see its trace file
kkjcre1p: unable to spawn jobq slave process 
Errors in file /DBBK/oracle/diag/rdbms/orcl/orcl/trace/orcl_cjq0_32725.trc:
*** 2015-02-20 14:04:49.793
Process J000 is dead (pid=832 req_ver=6 cur_ver=6 state=KSOSP_SPAWNED).

경고 알림 J000 프로 세 스 가 종료 되 었 습 니 다. shmmax 를 점차적으로 확대 합 니 다. 데이터 베 이 스 는 일어 날 수 있 지만 경고 로 그 를 관찰 하면 오류 가 발생 합 니 다.
Errors in file /DBBK/oracle/diag/rdbms/orcl/orcl/trace/orcl_j000_4353.trc  (incident=119768):
ORA-07445: exception encountered: core dump [lxgcvp()+5237] [SIGSEGV] [ADDR:0x7F74B376A000] [PC:0x84FB395] [Invalid permissions for mapped object] []
Incident details in: /DBBK/oracle/diag/rdbms/orcl/orcl/incident/incdir_119768/orcl_j000_4353_i119768.trc
Exception [type: SIGSEGV, SI_KERNEL(general_protection)] [ADDR:0x0] [PC:0x70F26DE, kohdmpins()+78] [flags: 0x0, count: 2]
Errors in file /DBBK/oracle/diag/rdbms/orcl/orcl/trace/orcl_j000_4353.trc  (incident=119769):
ORA-07445: exception encountered: core dump [kohdmpins()+78] [SIGSEGV] [ADDR:0x0] [PC:0x70F26DE] [SI_KERNEL(general_protection)] []
ORA-07445: exception encountered: core dump [lxgcvp()+5237] [SIGSEGV] [ADDR:0x7F74B376A000] [PC:0x84FB395] [Invalid permissions for mapped object] []
Incident details in: /DBBK/oracle/diag/rdbms/orcl/orcl/incident/incdir_119769/orcl_j000_4353_i119769.trcErrors in file /DBBK/oracle/diag/rdbms/orcl/orcl/trace/orcl_j000_2179.trc
----- Error Stack Dump -----
----- Current SQL Statement for this session (sql_id=4jrfrtx4u6zcx) ----
          ,       Oracle    Error Stack   ,   10046,       。
                。

 어떤 프로 세 스 에 대해 서 는 pmap 시스템 명령 을 통 해 이 프로 세 스 가 어떤 공유 메모리 세그먼트 에 할당 되 어 있 는 지 볼 수 있 습 니 다.
[oracle@021Y-SH-BKAP ~]$ ps -ef | grep dbw
oracle    2779     1  0 14:20 ?        00:00:00 ora_dbw0_orcl
[oracle@021Y-SH-BKAP ~]$ pmap 2779
2779:   ora_dbw0_orcl
0000000000400000 155144K r-x--  /DBBK/oracle/product/11.2.0.1.0/bin/oracle
0000000009d81000  12400K rwx--  /DBBK/oracle/product/11.2.0.1.0/bin/oracle
000000000a99d000    284K rwx--    [ anon ]
000000000bfee000    536K rwx--    [ anon ]
0000000060000000      4K r-xs-  /dev/shm/ora_orcl_19333174_0
0000000060001000  65532K rwxs-  /dev/shm/ora_orcl_19333174_0
0000000064000000  65536K rwxs-  /dev/shm/ora_orcl_19333174_1
0000000068000000  65536K rwxs-  /dev/shm/ora_orcl_19333174_2
000000006c000000  65536K rwxs-  /dev/shm/ora_orcl_19333174_3
0000000070000000  65536K rwxs-  /dev/shm/ora_orcl_19333174_4
0000000074000000  65536K rwxs-  /dev/shm/ora_orcl_19333174_5
0000000078000000  65536K rwxs-  /dev/shm/ora_orcl_19333174_6
000000007c000000  65536K rwxs-  /dev/shm/ora_orcl_19333174_7
0000000080000000  65536K rwxs-  /dev/shm/ora_orcl_19333174_8
0000000084000000  65536K rwxs-  /dev/shm/ora_orcl_19333174_9
0000000088000000  65536K rwxs-  /dev/shm/ora_orcl_19333174_10
000000008c000000  65536K rwxs-  /dev/shm/ora_orcl_19333174_11
0000000090000000  65536K rwxs-  /dev/shm/ora_orcl_19333174_12
0000000094000000  65536K rwxs-  /dev/shm/ora_orcl_19333174_13
0000000098000000  65536K rwxs-  /dev/shm/ora_orcl_19333174_14
000000009c000000  65536K rwxs-  /dev/shm/ora_orcl_19333174_15
00000000a0000000  65536K rwxs-  /dev/shm/ora_orcl_19333174_16
00000000a4000000  65536K rwxs-  /dev/shm/ora_orcl_19333174_17
00000000a8000000  65536K rwxs-  /dev/shm/ora_orcl_19333174_18

shmmax 를 하나의 메모리 세그먼트 에 SGA 를 수용 할 수 있 도록 확대 할 때 상기 문 제 는 발생 하지 않 을 것 입 니 다.하지만 메모리 세그먼트 를 풀 수 없 는 상황 을 만 났 습 니 다. (데이터 베 이 스 를 닫 았 지만 메모리 세그먼트 가 풀 리 지 않 았 습 니 다)
명령 ipcrm 을 통 해 수 동 으로 풀 수 있 습 니 다. 스 크 립 트 를 통 해 여러 개 를 풀 수 있 습 니 다:
for i in `ipcs -sa | grep -v shmid | awk '{print $2}'` ; do ipcrm -m $i ; done

좋은 웹페이지 즐겨찾기