Oracle 10g 부터는 자동화된 SGA 관리 기능을 제공한다. 이러한 기능을 ASMM(Automatic Shared Memory Management)이라고 부른다. 11g에서는 더 업그래드 되어 PGA까지 관리가 가능하다. 오라클 설치시 default로 사용되도록 설정되어 있다.
ASMM 기능을 사용하면 사용 가능한 메모리를 보다 효과적으로 사용하여 하드웨어 메모리 리소스를 추가하는 데 드는 비용을 줄일 수 있을 뿐만 아니라 보다 동적이고 유연하며 적응력 있는 메모리 관리 방식을 도입하여 간단하게 Oracle database를 관리 할 수 있다.
작업 부하로 구성이 변경될 때 Oracle Database 10g는 해당 풀의 크기를 확대하고 자동으로 크기가 조정된 다른 풀의 크기를 그에 맞게 줄인다.
예를들면, 낮에는 OLTP (large buffer cache) 작업을 실행하고 밤에는 병렬 일괄 처리(large value large pool) 작업을 실행하는 시스템의 경우 ASMM을 사용하면 OLTP 작업이 실행될 때 buffer cache가 I/O 성능 향상을 위해 대부분의 메모리를 확보한다. 이후에 데이터 분석 및 보고 일괄 처리 작업을 시작하면 메모리는 자동으로 large pool로 이전하여 메모리 overflow 없이 parallel query 작업에 사용될 수 있다.
그래뉼(Granule)
그래뉼 이란 가상 메모리 상의 연속된 공간으로 Dynamic SGA 모델에서 할당할 수 있는 최소 단위이다.
그래뉼의 크기는 SGA 크기에 따라 달라진다. 9i 이하 버전에서는 SGA의 크기가 128MB보다 크면 16MB 단위로 할당되고 128MB보다 작으면 4MB 단위로 할당 된다.
10g 이상부터는 기준이 변경되어 SGA크기가 1GB보다 크면 16MB 단위로 할당되고 1GB보다 작으면 4MB단위로 할당된다. 또한 1GB 이상의 windows 32bit 시스템에서는 8MB 단위로 할당된다.
ASMM 활성화 및 비활성화
ASMM을 사용하기 위해서는 Oracle 10g 에서 새로 추가된 SGA_TARGET 파라미터만 셋팅하면 된다.
하지만 STATISTICS_LEVEL 파라미터를 BASIC으로 변경하였다면 TYPICAL이나 ALL로 변경을 해 주어야 한다.
Oracle 10g R2에서는 shared_pool, db_cache_size, java_pool_size, large_pool_size, streams_pool_size 사이즈를 자동으로 관리 한다.
SGA_TARGET 파리미터의 값은 SGA_MAX_SIZE 보다 작게 설정하여야 한다. SGA_MAX_SIZE 보다 크게 설정할 경우 에러가 발생한다.
SGA_TARGET 값이 0보다 큰 값으로 설정되어 ASMM이 활성화 되어있는 경우에는 db_cache_size나 shared_pool_size 등의 자동 조정 파라메터 값이 최소값으로 적용된다. 그렇기 때문에 0으로 설정해 주면 하한 임계값이 0까지 떨어져 SGA를 보다 동적으로 조절 가능하다.
수정하지 않고 그대로 둘 경우 하한 임계값으로 사용되어 다른 자동 조정 풀의 메모리가 필요할 경우에도 db_cache_size, shared_pool_size에서 지정한 값 이하로 떨어지지 않기 때문에 주의하여야 한다.
ASMM을 비활성화 할때는 SGA_TARGET 파라미터만 0으로 변경해 주면된다.
ASMM을 사용하다가 SGA_TARGET을 0으로 변경하면 AUTO_TUNED 파라메터는 변경 당시의 파라메터 값으로 고정된다. 그렇기 때문에 ASMM을 비활성화 하기전에 AUTO_TUNED 파라미터를 미리 원하는 값으로 변경시킨 후 비활성화를 하거나 ASMM 비활성화 후 SGA advisor를 참조해서 작업환경에 맞도록 조절해야 한다.
파라미터 파일의 종류에 따른 차이점
동적 파라미터 파일(SPFILE) - 동적 파라미터 파일을 사용한 경우 공유 메모리 자동 관리 기능에 의해 동적으로 변하는 SGA 구성요소의 크기가 파라메터 파일에 자동으로 반영되게 된다.
DB를 재시작 할때 마지막으로 최적화된 SGA 구성요소 크기가 정해진다. 재시작시에도 이전의 최적화된 메모리 설정 값이 적용 되므로 메모리 사용 효율을 높일 수 있다.
정적 파라미터 파일(PFILE) - 정적 파라미터 파일을 사용할 경우에는 파라메터 파일에 자동으로 반영되지 않으므로 데이터 베이스를 재시작 할 때마다 SGA 최적화 과정을 수행해야 하기 때문에 SPFILE에 비해 효율성이 떨어진다.
SGA 관련 parameter
SGA_MAX_SIZE는 Instance가 구동될때 확보하게 되는 메모리 이다. 하지만 SGA_MAX_SIZE가 SGA 전체 메모리는 아니다. SGA 전체 메모리는 SGA_TARGET이다.
SGA_TARGET은 SGA_MAX_SIZE 메모리 내에서 사용 가능하다. SGA_MAX_SIZE 보다 크게 설정할 경우 에러가 발생한다.
SGA 메모리는 크게 Dynamic과 Static 그리고 Auto-Tuned와 Manual_Tuned로 분류할 수 있다.
Dynamic 파라메터는 동적으로 조절 가능한 파라미터로 OPEN 상태에서 조절이 가능하다. 하지만 Static 파라미터는 OPEN 상태에서 변경 후 적용이 불가능하며 DB 재구동이 필요하다. ASMM이 조절가능한 SGA는 Auto Tuned Dynamic Prameter이다.
ASMM에서 수동으로 SGA 조절
SGA_TARGET의 사이즈를 조절하면 AUTO TUNED 메모리만 조절된다. 또한 AUTO_TUNED 파라메터 중 하나를 조절하면 AUTO_TUNED 메모리들 끼리 용량을 조절한다. 변경값이 현재 크기보다 큰 경우에는 즉시 구성요서의 크기가 조정되며 새로운 값이 현재 크기보다 작은 경우에는 최소 크기가 변경된다.
MANUALLY_TUNED 파마메터의 크기를 조절하면 AUTO_TUNED 파라메터가 늘어나거나 줄어든다.
즉, 수동으로 SGA조절할 경우에는 Auto_Tuned 파라메터만 늘거나 줄어든다.
ASMM 임에도 불구하고 수동으로 개별 컴포넌트를 설정해야 하는 경우는?
- 자동으로 계산된 크기가 목적에 맞지 않는 경우
- ASMM으로 감지되지 않는 짧은 시점에 메모리 사용율이 높거나 낮은 경우
- 특정 구성 요소에 대해 최소 메모리 양을 보장하려는 경우
Dynamic SGA Transfer Modes
- ASMM IMMEDIATE transfer mode
out-of-memory (ORA-04031) errors
Partial granules can be used
- ASMM DEFERRED transfer mode
Transparently executed in the background
Partial granules can be used.
- MANUAL transfer mode
Used with AlTER SYSTEM commands
Resize must use full granules
IMMEDIATE 모드는 ASMM이 활성화 되어 있고 Auto-Tunned 컴포넌트가 out-of-memory 에러가 발생할 것 같은 시점에 바로 적용된다.
IMMEDIATE 모드가 되면 다른 컴포넌트들로 부터 그래뉼을 전송받아 에러 발생을 막는다. 이때 그래뉼이 완전히 비워져 있지 않더라도 다른 컴포넌트들로 부터 그래뉼을 가지고 올 수 있다.(Partial Granules) 다른 컴포넌트들은 Partial Transfer를 만족하기 위해 메모리 clean out을 시작한다.
DEFERRED 모드는 Memory Broker와 같이 시스템에의해 효율적인 메모리 분포가 결정되면 메모리와 컴포넌트 사이의 데이터를 전송하는데 사용되며 지연적용 된다.
advisor 관련 데이터는 최적의 메모리 분배를 결정하는데 사용되며 최적의 메모리 분배를 위해 주기적으로 적용된다. 그래뉼은 IMMEDIATE 모드와 마찬가지로 Partial Granules이 적용된다.
MANUAL 모드는 사용자가 ALTER SYSTEM 명령을 이용하여 직접 시스템 컴포넌트 크기를 조정하는데 사용된다.
이 모드의 크기 조절 작업에서는 완전히 비워져 있는 그래뉼만 사용할 수 있다.(Full Granules)
컴포넌트별로 마지막에 적용된 Transfer Mode는 V$SGA_DYNAMIC_COMPONENTS 뷰에서 확인 가능하다.
Memory Broker Architecture
통계 및 Memory Advisor Data는 정기적으로 MMON에 의해 원형 버퍼로 캡춰된다. 서로 다른 버퍼를 이용해 델타를 만든다. 델타는 서로 다른 기간 사이의 통계를 나타낸다. MMON이 Memory Broker Policy Module을 사용하여 델타를 분석하며 장기 및 단기 동향을 검사한다. 이 분석을 바탕으로 사이즈 조절을 결정하며 이를 resize request system queue에 게시한다. 그리고 MMAN이 주기적으로 resize request system queue를 검사하여 상응하는 메모리를 전송하여 동적으로 메모리 사이즈를 조절한다.
MMON : 오라클 10g의 new feature로 Automatic Workload Repository(AWR)과 함께 새롭게 추가된 프로세스로 메모리에 존재하는 데이터 베이스 통계 정보를 정해진 주기에 따라 ARW에 저장하는 역할을 한다. AWR은 MMON으로 부터 받은 통계 정보로 자동화된 문제 진단 및 self-tunning 작업을 수행한다.
MMAN : 공유 메모리 자동관리 기능을 수행하는 백그라운드 프로세스이다. MMAN은 memory advisor의 권고에 따라 업무 부하를 분석하여 SGA 메모리 콤포넌트의 크기를 동적으로 조정하는 역할을 수행한다.
SGA Memory Broker : memory의 이상적인 분배를 결정할 수 있도록 시스템 및 작업 로드를 관찰한다. 메모리 분배는 완벽한 것이 아니기 때문에 몇분마다 검사하여 필요한 곳에 메모리가 배치 될 수 있도록 한다. 이러한 작업은 DEFERRED 모드에서 수행된다.
'오라클 > Tuning' 카테고리의 다른 글
[Oracle Virus] DBMS_XPLAN 패키지에 대한 이해 (0) | 2010.08.18 |
---|---|
SQL*Plus의 Autotrace 활용 (1) | 2010.08.13 |
Driving Table 이란? (0) | 2010.05.16 |
Nested Loop 예제 (0) | 2010.05.16 |
select * from t1 sort ? ㅋ (0) | 2010.05.09 |