11. Database Memory Allocation
11.1 About Database Memory Caches and Other Memory Structures
오라클 데이터베이스는 메모리 캐시와 디스크에 정보를 저장한다. 디스크에서 직접 읽는 접근 방식보다 메모리에서 읽는 방식이 훨씬 더 빠르다.
풀리 I/O를 일으키는 디스크에서 읽는 방식은 메모리에서 읽는 방식에 비해 더 많은 시간이 걸린다. 일반적으로 10 밀리세컨(ms) 정도 걸린다.
또 물리 I/O는 OS 이벤트 스케줄러를 사용하고 디바이스 드라이버를 사용하기 때문에 CPU 자원을 많이 사용하게 된다.
이런 연유로 자주 읽어야하는 데이터에 대한 요청은 디스크를 읽는 방식보다 메모리에서 읽는 방식을 사용하는 것이 더 효율적이다.
메모리 캐시를 적절한 크기로 설정하고 효율적으로 사용해야 데이터베이스 성능을 향상시킬 수 있다.
오라클 데이터베이스에서 성능에 영향을 끼칠 수 있는 주요 메모리 캐시는 아래와 같다.
- Database buffer cache
디스크에서 데이터 블럭을 읽어 database buffer cache에 저장한다.
- Redo log buffer
buffer cache에 있는 데이터 블럭을 변경할 때 변경된 정보(redo entry)를 redo log buffer에 저장한다.
- Shared Pool
다양한 종류의 데이터를 저장하는 용도의 cache들로 구성되어 있으며 해당 cache는 아래의 cache들이다.
- Library cache
- Data dictionary cache
- Server result cache
- Large Pool
아래 작업과 같이 메모리를 많이 필요로 하는 작업을 위해 별도 메모리를 할당해 줄 공간을 large pool 영역으로 제공한다.
- Shared server architecture
- Parallel query
- Recovery Manager(RMAN)
- Java pool
유저 세션에서 Java code와 JVM 데이터를 사용할 경우 Java code와 JVM 데이터를 저장하기 위해 사용한다.
- Streams pool
오라클 stream 프로세스를 위한 메모리를 제공한다.
- Process-private memory
유저 프로세스 등, 프로세스가 개별적으로 sorting과 hash join과 같은 작업에 사용할 메모리를 제공한다.
- In-Memory Column Store(IM column store)
오라클 데이터베이스 12c 릴리즈1(12.1.0.2)부터 사용 가능한 In-Memory 기능을 위해 사용하는 공간으로 SGA 풀에 정적 방식으로 파티션과 테이블의 복사본 저장한다. 그리고 저장하는 공간에 대한 명칭을 IM column store라 부른다. IM column store에는 스캔, 조인, 집합연산 같은 작업의 성능 개선을 위해 사용할 수 있는 특수 형태의 세로 방식 데이터를 저장된다.
note :
IM column store는 buffer cache를 대신하지는 않으며 단지 같은 데이터를 다른 형식으로 저장할 수 있는 용도의 부가적인 기능을 제공한다.
11.2 Database Memory Management Methods
11.2.1 Automatic Memory Management
Automatic Memory Management(자동 메모리 관리)는 오라클 데이터베이스가 자동으로 메모리를 관리하고 개선(튜닝)할 수 있도록 해준다.
자동 메모리 관리 방식은 오라클 데이터베이스가 전적으로 SGA와 PGA를 관리할 수 있게 해 준다. 오라클은 이 방식을 사용할 것을 권장하고 있다.
11.2.2 Automatic Shared Memory Management
automatic memory management(자동 메모리 관리) 방식을 사용하지 않으면 오라클은 SGA 메모리 관리를 위해 automatic shared memory management 방식을 사용한다. Automatic shared memory management 방식일 경우, 오라클 데이터베이스는 설정한 SGA의 전체 목표 크기를 기준으로 SGA를 구성하는 여러 메모리 영역을 자동으로 나누어 준다.
11.2.3 Manual Shared Memory Management
automatic memory management(자동 메모리 방식)과 automatic shared memory management 방식 둘다 사용하지 않을 경우 SGA를 구성하는 메모리 풀에 대한 크기를 수동으로 지정해야 한다. 이 방식은 SGA 메모리 관리에 대한 부분을 사용자의 결정에 전부 맡기지만 SGA를 구성하는 모든 요소에 대한 크기를 사용자가 튜닝해 지정해야한다.
11.2.4 Automatic PGA Memory Management
automatic memory management(자동 메모리 관리) 방식을 사용하지 않을 경우 PGA 메모리 관리를 위해 automatic PGA memory management 방식을 사용하게 된다. 이 방식을 사용하면 자동으로 인스턴스내의 Work Area(작업영역)에 PGA 메모리 목표 크기를 기준으로 메모리를 할당해 준다.
11.2.5 Manual PGA Memory Management
automatic memory management와 automatic PGA memory management 방식을 모두 사용하지 않는다면 수동으로 각 Work Area(작업영역)에 PGA의 일부를 개별적으로 할당해 줘야 한다. 이 방식은 필요 메모리 산정시 작업 내용에 따라 필요로 하는 메모리가 각기 다를 수 있기 때문에 각 작업에 적절한 메모리 크기를 지정하기가 매우 어려울 수 있다. 그래서 오라클 역시 권장하지 방식이다. 오라클이 수동 관리를 지원하기는 하지만 automatic memory management 방식과 automatic PGA memory management 방식을 사용할 것을 강하게 권장하고 있다.
11.3 Using Automatic Memory Management
automatic memory management(자동 메모리 관리) 방식을 사용하기 위해서는 아래 초기화 파라미터 값을 지정해야 한다.
- MEMORY_TARGET
Automatic Memory Management(자동 메모리 관리) 대상 메모리의 목표 크기를 지정한다.
데이터베이스는 SGA와 PGA 간 필요로 하는 메모리를 이 파라미터에 지정한 값을 기준으로 재분배하는 튜닝을 진행할 수 있게 된다.
이 파라미터는 동적 변경이 가능하여 데이터베이스의 재시작 없이 적용이 가능하다.
- MEMORY_MAX_TARGET
Automatic Memory Management(자동 메모리 관리) 대상 메모리 값의 최대 설정 가능한 크기 값을 제한 하는 용도로 사용할 수 있다.
MEMORY_TARGET 설정값에 지정할 수 있는 최대값의 한계를 지정하게 된다.
이 파라미터는 정적 파라미터 이므로 인스턴스를 재시작해야 적용된다.
MEMORY_TARGET 파라미터 값을 튜닝하고자 한다면 V$MEMORY_TARGET_ADVICE 뷰를 활용해라
11.4 Monitoring Memory Management
아래는 메모리 resize 작업에 대한 내용을 확인할 수 있는 뷰이다.
V$MEMORY_CURRENT_RESIZE_OPS
현재 진행중인(자동이든, 수동이든) 메모리 resize 작업에 대한 정보를 보여준다.
V$MEMORY_DYNAMIC_COMPONENTS
SGA, PGA 전체 크기에 대한 정보를 포함해 동적 튜닝이 가능한 메모리 구성요소에 대한 현재 크기 정보를 보여준다.
V$MEMORY_RESIZE_OPS
과거 발생한 메모리 resize 작업에 대해 최대 800건에 대한 이력 정보를 보여준다. 단 현재 진행중인 작업은 제외된다.
V$MEMORY_TARGET_ADVICE
MEMORY_TARGET 파라미터 튜닝에 참고할 만한 정보를 보여준다.
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
2 | 12. Tuning the System Global Area | 명품관 | 2018.09.28 | 169 |
» | 11. Database Memory Allocation | 명품관 | 2018.09.17 | 382 |