TECH
QUESTION
자주하는 질문답변 입니다.
Oracle
작성자 | 유건데이타 | 등록일 | 2015-05-16 |
제목 | (9I) DYNAMIC SGA : SGA_MAX_SIZE, DB_CACHE_SIZE, DB_KEEP | ||
---|---|---|---|
(9I) DYNAMIC SGA : SGA_MAX_SIZE, DB_CACHE_SIZE, DB_KEEP_CACHE_SIZE
================================================================== PURPOSE ------- Oracle 9i의 새 기능인 동적으로 SGA 파라미터들을 변경하는 방법에 대하여 알아보기로 한다. Explanation ----------- Oracle 8i까지는 Buffer Cache, Shared Pool, Large Pool 등과 같은 SGA 파라미터들에 대해 그 크기를 동적으로, db가 운영 중인 상태에서는 변경할 수가 없었다. 즉, 이러한 파라미터들을 변경하려면 db를 shutdown하고 initSID.ora 화일에 서 그 크기를 다시 설정하고, 이 파라미터를 이용해서 db 인스턴스를 restart 해야만 했었다. Oracle 9i에서는 DBA가 ALTER SYSTEM 명령을 이용해서 SGA 파라미터의 크기 를 동적으로 변경할 수 있게 되었다. 이 특정을 'Dynamic SGA'라고 부른다. SGA 전체의 최대 크기(SGA_MAX_SIZE)를 정의하고 그 한도 내에서 파라미터의 크기를 변경할 수 있는 것이다. 데이타베이스를 shutdown/startup 없이 작업 이 가능하기 때문에 'Planned Downtime'을 줄이는 한 방법으로도 이해할 수 있다. 이 글에서는 SGA에 할당할 수 있는 최소 단위인 'Granule'의 개념을 살펴보 고, 이 granule이 어떠한 방법에 의해 동적으로 할당되는지에 대해 알아보고 자 한다. 또한 Buffer Cache 파라미터 중 새로운 것과 이전 버전에 비해 달라진 내용 을 소개하기로 한다. 1. Granule Granule은 가상 메모리 상의 연속된 공간으로, dynamic SGA 모델에서 할당할 수 있는 최소 단위이다. 이 granule의 크기는 SGA 전체의 추정값 (SGA_MAX_SIZE)에 따라 다음과 같이 구분된다. 4MB if estimated SGA size is < 128M 16MB otherwise SGA의 Buffer Cache, Shared Pool, Large Pool 등의 파라미터는 이 granule 단위로 늘어나거나 줄어들 수 있다. (현재 dynamic SGA를 사용할 수 있는 SGA 관련 파라미터는 Buffer Cache, Shared Pool, Large Pool 세 가지이다.) 2. Dynamic SGA(DB_CACHE_SIZE, SHARED_POOL_SIZE) DBA는 ALTER SYSTEM 명령을 통해 initSID.ora 화일에 정의된 SGA 관련 파라미 터 값을 동적으로 변경할 수 있다. SGA 파라미터의 크기를 늘려주기 위해서 는 필요한 만큼의 free granule이 존재해야만 하며, 현재 사용하고 있는 SGA 의 크기가 SGA_MAX_SIZE보다 작아야 한다. Free granule이 없다고 해서 다른 파라미터로부터 granule을 free시켜서 그 granule을 이용할 수 있는 것은 아 니다. 반드시 DBA가 명시적으로 free/allocate해야 한다. 다음의 예를 살펴보자. 설명을 단순화하기 위해 이 경우는 SGA가 Buffer Cache와 Shared Pool로만 구성되었다고만 하자. 예) initSID.ora SGA_MAX_SIZE = 128M DB_CACHE_SIZE = 96M SHARED_POOL_SIZE = 32M Note : DB_CACHE_SIZE는 Oracle 9i에 새롭게 도입된 파라미터이다. 위와 같은 상태일 때 동적으로 SHARED_POOL_SIZE를 64M로 늘리면 에러가 발생 한다. SQL> ALTER SYSTEM SET SHARED_POOL_SIZE=64M; (insufficient memory error message) 이 에러는 SHARED_POOL_SIZE를 늘림으로써 전체 SGA의 크기가 SGA_MAX_SIZE 보다 커지기 때문에 발생한다. (96M + 64M > 128M) 이를 해결하기 위해서는 DB_CACHE_SIZE를 줄인 후, SHARED_POOL_SIZE를 늘린다. SQL> ALTER SYSTEM SET DB_CACHE_SIZE=64M; SQL> ALTER SYSTEM SET SHARED_POOL_SIZE=64M; Note : DB_CACHE_SIZE가 shrink되는 동안에 ALTER SYSTEM SET SHARED_POOL_SIZE=64M; 를 하면 insufficient error가 발생할 수도 있다. 이 경우는 DB_CACHE_SIZE가 shrink된 후 다시 수행하면 정상적으로 수행이 된다. Note : 위 예제의 경우 estimated SGA 크기가 128M 이상이므로, granule의 단위는 16M이다. 따라서 SGA 파라미터의 크기를 16M의 정수배로 했다. 16M의 정수배가 아닌 경우는 지정한 값보다 큰 값에 대해 16M의 정수배 중 가장 가까운 값을 택하게 된다. 즉, 아래 두 문장의 결과는 똑같다. SQL> ALTER SYSTEM SET SHARED_POOL_SIZE=64M; SQL> ALTER SYSTEM SET SHARED_POOL_SIZE=49M; Note : LARGE_POOL_SIZE 와 JAVA_POOL_SIZE 파라미터는 동적으로 변경하는 것이 불가능하다. 1) Dynamic Shared Pool 인스턴스 start 후, Shared Pool의 크기는 다음과 같은 명령에 의해 동적으 로 변경(grow or shrink)될 수 있다. ALTER SYSTEM SET SHARED_POOL_SIZE=64M; 다음과 같은 제약 사항이 있다. - 실제 할당되는 크기는 16M의 정수배가 된다. - 전체 SGA의 크기는 SGA_MAX_SIZE를 초과할 수는 없다. 2) Dynamic Buffer Cache 인스턴스 start 후, Buffer Cache의 크기는 다음과 같은 명령에 의해 동적으 로 변경(grow or shrink)될 수 있다. ALTER SYSTEM SET DB_CACHE_SIZE=96M; 다음과 같은 제약 사항이 있다. - 실제 할당되는 크기는 16M의 정수배가 된다. - 전체 SGA의 크기는 SGA_MAX_SIZE를 초과할 수는 없다. - DB_CACHE_SIZE는 0이 될 수 없다. 3. Buffer Cache 파라미터의 변경된 내용 여기서는 Buffer Cache 파라미터와 관련하여 Oracle 9i에 의미가 없어진 파라 미터와 새롭게 추가된 파라미터, 그리고 dynamic SGA 중 Buffer Cache와 관련 이 있는 부분에 대해 기술하고자 한다. 1) Deprecated Buffer Cache Parameters 다음의 세 가지 파라미터는 backward compatibility를 위해 존재하는 것으 로, 차후 의미가 없어진다. - DB_BLOCK_BUFFERS - BUFFER_POOL_KEEP - BUFFER_POOL_RECYCLE 위의 파라미터들이 정의되어 있으면 이 값들을 사용하게 될 것이다. 하지만, 다음에 나올 새로운 파라미터들을 사용하는 것이 좋으며, 만일 위 파라미터 (DB_BLOCK_BUFFERS, BUFFER_POOL_KEEP, BUFFER_POOL_RECYCLE) 값들을 사용 한다면 이 글에서 설명한 dynamic SGA 특징을 사용할 수는 없다. 또한 initSID.ora 화일에 위 파라미터들과 새로운 파라미터를 동시에 기술한다면 에러가 발생한다. 2) New Buffer Cache Sizing Parameters 다음의 세 파라미터가 추가되었다. 이 파라미터들은 primary block size에 대한 buffer cache 정보를 다루고 있다. - DB_CACHE_SIZE - DB_KEEP_CACHE_SIZE - DB_RECYCLE_CACHE_SIZE DB_CACHE_SIZE 파라미터에 지정된 값은 primary block size에 대한 default Buffer Pool의 크기를 의미한다. 또한 이전 버전과 마찬가지로 KEEP과 RECYCLE buffer pool을 둘 수 있는데, 이는 DB_KEEP_CACHE_SIZE, DB_RECYCLE_CACHE_SIZE 라는 파라미터를 이용한다. 이전 버전과 다른 점은 이전 버전의 경우 각각의 파라미터 (DB_BLOCK_BUFFERS, BUFFER_POOL_KEEP,BUFFER_POOL_RECYCLE)에 정의된 값들 이 buffer 갯수(즉, 실제 메모리 크기를 구하려면 db_block_size를 곱했어야 했다. )였는데 반해 이제는 구체적인 메모리 크기이다. 또한 이전에는 DB_BLOCK_BUFFERS가 BUFFER_POOL_KEEP, BUFFER_POOL_RECYCLE 의 값을 포함하고 있었지만, 이제는 DB_CACHE_SIZE가 DB_KEEP_CACHE_SIZE, DB_RECYCLE_CACHE_SIZE를 포함하고 있지 않다. 즉, 각각의 파라미터들은 독립적이다. Note : Oracle 9i부터는 multiple block size(2K, 4K, 8K, 16K, 32K)를 지원한다. 위에서 언급한 primary block size는 DB_BLOCK_SIZE에 의해 정해진 block size를 의미한다. (SYSTEM tablespace는 이 block size를 이용한다.) 3) Dynamic Buffer Cache Size Parameters 바로 위에서 언급한 세 파라미터는 아래와 같이 ALTER SYSTEM 명령에 의해 동적으로 변경 가능하다. SQL> ALTER SYSTEM SET DB_CACHE_SIZE=96M; SQL> ALTER SYSTEM SET DB_KEEP_CACHE_SIZE=16M; SQL> ALTER SYSTEM SET DB_RECYCLE_CACHE_SIZE=16M; Example ------- none Reference Documents ------------------- |
Comment | |||
---|---|---|---|
등록된 코멘트가 없습니다. |