본문 바로가기

Oracle/Oracle Admin

Database Oracle Administrator_Dynamic SGA 기능

Step 1. Oracle Server 전체 구조 살펴보기

-Sub : Dynamic SGA 기능

 

저번 포스팅까지는 SGA의 주요구성 요소에 대해 공부를 했습니다. 이번에는 SGA의 기능중 하나인 Dynamic SGA입니다.

우선 다시한번 SGA의 전체적인 구조를 보도록 하겠습니다.

 

 

 

각각의 역할과 무엇을 하는지 어떠한 파라미터가 있는지가 생각이 잘 나야합니다 ㅎ 안그러면 앞으로 나아갈 수가 없습니다!!

SGA의 구조는 위와 같죠. 그럼 Dynamic SGA는 또 다른 구조냐? 그건 아닙니다.

Dynamic SGA의 개념은 8i이후인 지난 9i부터 나온 개념인데요. 앞에서 SGA를 생성하는 것은 OS로부터 허락을 맡고 메모리를 끌어 오는 것이라고 했습니다. 그 과정에서 파라미터 파일인 PFILE, SPFILE이 필요한 것이었구요. 기억하고 계시죠?ㅎ

파라미터파일을 가지고 SGA의 메모리를 할당 해 주는데 8i 까지는 DB가 시작 된 후 SGA 메모리를 수동으로 수정하면 껐다가 켜야하는 불편한 사항이 있었습니다. DB서버를 껐다가 키면 어떻게 될까요..?? 상상해보세요.. KB 국민은행의 DB서버를 껐다가 키면??

엄청난 대 혼란이 발생하겠죠.. 돈과 직결된 문제니까요.. 이렇듯 고객의 불만으로 연결 되는 것이 DB서버의 존재입니다.

ORACLE도 그것을 알고 있기때문에 DB가 켜진 상태에서 메모리를 수정 할 수있는 Dynamic SGA라는 개념을 넣은 것 같습니다.

9i부터는 ORACLE을 재부팅하지 않고 바로 적용시킬 수 있는 기능을 내놓았는데 그것이 바로 Dynamic SGA입니다.

이전에 저도 해보았는데요. alter system set이라는 명령어로 시작하는 것들이 이러한 것입니다.

 

그리고 새롭게 또하나의 단위 개념이 나오게 됐습니다. 그래뉼(Granule)이라는 개념인데요. 약간 헷갈릴 수도 있습니다.

예를 들어서 DB BUFFER CACHE의 메모리 사이즈를 변경하고 싶어서 alter system set db_cache_size=100M라고 했습니다.

그럼 정확히 100M가 할당이 될까요? 그렇지 않다는 겁니다. 동적으로 할당하는 메모리 용량은 그래뉼을 따릅니다.

그래뉼의 룰은 이렇습니다.

최초 개발이 된 9i의 경우 SGA_MAX_SIZE가 128M 이하이면 1Granule=4M 입니다. 128M 초과인 경우 1Granule=16M로 설정됩니다. 위에서 100M를 DB BUFFER CACHE에 할당하려고 하는데 128M이하의 경우 25Granule로 100M가 할당이 됩니다.

하지만 128M 초과의 경우 4M기준이 아닌 16M 기준이기 떄문에 17Granule로 112M가 할당이 됩니다. 부족한것보다 넘치는게 나으니까요.

 

하지만 9i에서 10g로 Oracle이 버전업이 되면서 다시한번 Granule에 대한 정의가 바뀝니다. 점점 데이터가 많아져서일까요? 하드웨어의 발전 때문일까요? 10g 이상의 버전에서는 SGA_MAX_SIZE가 1G로 설정이 되고 이하의 경우 1Granule=4M, 초과시 16M가 할당됩니다. 그럼 제가 지금 11g이니까 alter system set db_buffer_cache = 100M로 하면 딱 25Granule로 할당이 되는 것입니다.

이해가 되셨을 런지 모르겠네요 ㅎ 어찌보면 어려운 그래뉼의 개념이지만 쉽게 생각하면 쉬운게 그래뉼인것 같습니다 ㅎ

 

다시한번 SGA 메모리를 살펴보고 SGA_MAX_SIZE를 살펴보도록 하겠습니다.

 

 

 

Total System Global Area는 전체 SGA의 메모리양, Fixed Size는 Background Process들을 위한 공간

Variable Size는 말그대로 여러가지 들을 말하는데 Shared Pool, Large Pool, Java Pool로 사용되는 공간입니다.

Database Buffers는 Database Buffer Cache로 쓰일 공간, Redo Buffers는 Redo log Buffer로 쓰일 공간이라는 뜻입니다.

 

이제 한번 SGA_MAX_SIZE를 한번 보도록 하겠습니다.

 

 

 

show parameter SGA_MAX_SIZE로 확인을 해보니 저의 MAX_SIZE는 404M인 것을 알 수 있네요 ㅎ 꽤 큰 용량이네요 ㅎ

 

 

 

 

 

추가적으로 SHARED_POOL_SIZE와 DB_CACHE_SIZE를 확인해보았는데 0이 나옵니다..ㅎ ASSM을 써서 이렇게 나오는 건데요.

ASSM은 메모리를 관리해 주는 것으로 SGA 각 구성요소값을 지정하지 않아도 Oracle이 자동으로 SGA 값을 결정하게 성능을 향상시키는 법입니다. SGA는 성능과 밀접한 관련이 있기 때문에 잘 주시를 해야하고 수정할때에는 많은 것들을 살펴본 다음에 해야합니다.

SHARED POOL과 DB_CACHE 용량 확인한건 앞 포스팅에서 확인한 V$sgastat과 파라미터를 확인해서 볼 수 있다는 것도 알 수 있습니다.

 

여기까지가 Dynamic SGA의 내용입니다. 어렵지 않은 부분이지만 Granule을 이해해야하고 ASSM, SGA관리를 잘 해야 한다는 것을 기억!

다음에는 PGA에 대해서 설명을 하겠습니다. 구성요소와 같이 나오는 기타부분까지도 살펴보도록 하겠습니다! 뿅!