2015. 3. 10. 18:12ㆍOracle/Oracle Study
현재 서버
shmmax=1g
shmseg=120
SGA = 48G
신규서버
shmmax=1g
shmseg=120
SGA = 110G 위로 올라가지 않음.
왜 그런 것인지를 찾아봄.
shmmax 할당 : SGA 보다 크거나 같게 설정하는 것을 권장한다고 함.
현재 알아본 바로는,
1. sga 값보다 shmmax를 낮게 설정하면, 여러개의 shared memory가 뜨는 것을 볼 수 있다.
- ipcs -ma 명령어로 SEGSZ 값을 합산하면 대략적으로 sga값과 동일하게 나온다.
2. sga 값보다 shmmax를 높게 설정하면, 한개의 shared memory가 뜨는 것을 볼 수 있다.
의문. sga 값보다 shmmax를 낮게 설정하였는데, 에러가 발생하였다.
- ORA-27123: unable to attach to shared memory segment
위 1번에 의하면 여러개의 shared memory가 떠야하는 것이 아닌가?
답변추측. shmseg 값이 현재 120으로 설정되어있다. shared memory가 120개가 초과하여 발생하는 문제 같다.
sga 가 48g로 설정되어 있고 shmmax 가 1기가로 설정되어 있었을 때, 53개의 메모리가 떴다.
그러면 192g로 설정을 하려고 하니 120개를 초과하여 발생하는 문제 인 것 같다.
이를 검증하기 위해서는, 아래와 같이 한번 해보자
1. shmmax 에 값을 sga 값만큼 올려주고, shared memory 개수를 확인.
2. shmmax 값은 그대로 두고 shmseg 값만 올려주고 shared memory 개수를 확인.
설명에 의하면 아래와 같으니 내 추측이 맞을 것이라 봄.
커널이 공유메모리(오라클이 SGA로 사용할) 할 당 방법
1. 공유메모리로 사용할 물리적 메모리가 충분할 경우.
-> 하나의 세그먼트에 전체 SGA 할당
2. 하나의 세그먼트에 다 할당할 수 없는 경우
-> 연속된 여러 세그먼트로 분산시켜 할당
3. 두번째 방법도 여의치 않을 경우
-> 연속되지 않은 여러 세그먼트에 분산시켜 할당
* SGA내 fixed Area 부분은 반드시 전체가 하나의 세그먼트에 할당되어야 함.
=====================================================================================================================
테스트 결과는 맞게 나옴.
다만, 커널값을 shmmax, shmseg 등 설정값을 늘려주었다고 하더라도,
pfile에 또 하나의 값을 변경해줘야지 DB가 startup 될 수 있다.
만약 그렇지 않으면, ORA-00064 에러가 난다.(ORA-00064: object is too large to allocate on this OS(1,4086000))
pfile에 추가할 파라미터, _ksmg_granule_size=33554432(32M)
- default = 16777216(16M)
* granule size 확인
select name, bytes/1024/1024 "size" from v$sgainfo where upper(name) like '%GRANULE%'
NAME size
------------------------------------------------------------- ----------
Granule Size 32
Granule(메모리 할당 단위)
- SGA 메모리는 연속적인 메모리 조각(Chunk) 을 뜻하는 Granule 이란 단위로 할당된다.
- Granule의 크기는 SGA 총 크기에 의해 결정된다. SGA의 크기가 1GB 이하라면 Granule의 크기는 4MB, 1GB 이상이라면 Granule 크기는 16MB 가 된다.
- SGA의 각 컴포넌트들에 쓰여지는 Granule size는 v$sgainfo 로 조회가 가능하다.
'Oracle > Oracle Study' 카테고리의 다른 글
[oracle19c] 사용자 생성 및 삭제 (ORA-65096, ORA-28014) (0) | 2022.03.24 |
---|---|
11g alert 파일 경로 확인 (0) | 2022.02.09 |
External Table (0) | 2014.07.16 |
archive 와 log switch v$log (0) | 2013.01.18 |
rowid의 변화 (0) | 2013.01.17 |