일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 19c
- 오라클
- ORACLE19C
- oracle installation
- 데이터가드
- Oracle
- Installation
- 데이터베이스
- ogg
- Oracle 19c
- SILENTMODE
- OracleGoldenGate
- oracle recovery
- goldengate
- oracle goldengate
- diskgroup
- 디비투
- DataGuard
- SSH
- 오지지
- linux
- adg
- Database
- 티베로
- ActiveDataGuard
- 오라클설치
- 오라클구조
- Opatch
- 오라클아키텍쳐
- 사일런트모드
- Today
- Total
DoubleDBDeep
[ORACLE] 2. Oracle Memory 구조 본문
< 오라클 메모리 구조 >

- SGA (시스템 글로벌 영역, System Global Area) : 거의 모든 오라클 프로세스가 액세스하는 대규모 공유 메모리 segment
- PGA (프로세스 글로벌 영역, Process Global Area) : 하나의 프로세스 또는 Thread를 위한 개별적인 메모리
- UGA (사용자 글로벌 영역, User Global Area) : 사용자 세션과 관련된 메모리 (dedicated server 시 PGA에 포함)
1. PGA
- 오라클 데이터베이스에 접속하는 각 User Process를 위해 예약된 메모리
- 프로세스가 생성될 때 할당되고, 종료되면 반환된다.
- 하나의 프로세스가 하나의 PGA를 할당받고 다른 프로세스는 접근할 수 없다.
- 구성 : UGA (정렬 영역 (Sort Area) + 세션 정보 (Session Information) + 커서 상태 (Cursor State) ) + 스택 공간 (Stack Space)
- 사용 : in-memory 정렬, 비트맵 머징(merging), 해싱 작업
- 관리방법
- 수동 PGA 메모리 관리 (Manual PGA memory management) : 개별 프로세스에서 정렬, 해싱 작업 필요 시 언제라도 사용할 수 있도록 얼마나 많은 메모리를 허용할 지를 수동으로 오라클에 지시
- 자동 PGA 메모리 관리 (Automatic PGA memory management) : 시스템 전체에서 얼마나 많은 메모리를 사용할 수 있도록 할 것인지를 오라클에 지시
수동 PGA 메모리 관리 파라미터
- SORT_AREA_SIZE : DISK에 내려쓰기 이전 정보를 정렬하는데 사용될 메모리 총량
- SORT_AREA_RETAINED_SIZE : 정렬작업 후 정렬 데이터를 유지하기 위해 사용될 메모리 총량
- HASH_AREA_SIZE : Server Process가 해시 테이블을 저장하는데 사용하는 메모리 총량
자동 PGA 메모리 관리 파라미터 (11gR1 이상)
- 사용 편의성을 위해 등장했으며, 작업 부하량을 근거로 필요로하는 메모리의 양을 동적으로 조정한다.
- PGA_AGGREGATE_TARGET : 총 PGA 메모리 (최곳값의 한계)
- MEMORY_TARGET : 총 SGA + PGA / PGA는 데이터베이스에서 자동 할당
- WORKAREA_SIZE_POLICY : 메모리량 제어하기 위한 정렬영역, 해시영역을 수동 자동으로 설정 (AUTO가 DEFAULT 및 권장값)
2. UGA
- 세션의 고유 영역. 즉, 특정 세션이 항상 접근할 수 있어야 하는 메모리
- Shared server mode에는 SGA내, Dedicated server mode에는 PGA 내에 존재
PGA / UGA 요약
- PGA : 특정 프로세스의 전용 공간
- HEAP 형태의 메모리 구조
- DEDICATED SERVER : PGA ⊃ UGA / SHARED SERVER SGA ⊃ UGA
- PGA ⊃ UGA(정렬영역 + 해시영역 + 유저세션 데이터 + 커서영역) + STACK SPACE
3. SGA
- 모든 오라클 프로세스가 접근할 수 있는 공유 메모리 구조
Shared Pool (Library cache + Data dictionary cache) + Data Buffer Cache + Redo Log Buffer
+ Large Pool, Java Pool, Streams Pool, Keep buffer Pool, Recycle buffer Pool, nk buffer cache
- Shared Pool : Library Cache , Data Dictionary Cache, 병렬 실행 메세지의 버퍼 및 제어구조 등이 포함
- LRU 알고리즘 기반으로 관리 (Least Recently Used) -> 자주 사용되지 않으면 메모리에서 밀려나게 됨.
- Library Cache : 데이터베이스에서 실행하는 각 SQL 문을 공유 SQL영역 (및 PGA에 보관되는 전용 SQL 영역)에 저장한다. 공유 SQL 영역에는 해당 SQL문에 대한 구문 분석 트리 및 실행 계획이 포함된다. -> 자주 사용되는 SQL문에 대해 하나의 공유 영역을 사용해 메모리를 절약함 // PL/SQL 프로그램 단위도 비슷하게 처리, 구문 분석 및 컴파일된 형식을 보관하기 위해 공유 영역을 할당
- Data Dictionary Cache : 데이터베이스 파일, 테이블, 인덱스, 컬럼, 사용자, 권한 및 기타 오브젝트에 대한 정보 저장. 전체 데이터 블록 자체를 보관하는 buffer 대신 Cache는 행 단위로 보관한다.
- Data Buffer Cache
- 디스크(데이터 파일)로 쓰기 전, 디스크로부터 읽은 후의 데이터베이스 블록의 복사본을 저장하는 공간
- Instance에 연결되는 모든 유저가 공유
- User Process는 특정 데이터 블록을 처음 사용하는 경우 이 공간에 해당 블록이 있는지 검색한다.
- 캐시 적중 : 캐시에 이미 있는 데이터의 경우, 메모리에서 데이터를 직접 읽을 수 있음
- 캐시 실패 : 캐시에 데이터가 없는 경우, 데이터 액세스 전 블록을 디스크의 데이터파일에서 버퍼로 복사해야함. (느림)
- Keep Buffer Pool : LRU가 일반적으로 버퍼를 보유하는 것 보다 더 오랫동안 보유하도록 설계된 공간
- Recycle Buffer Pool : LRU가 일반적으로 버퍼를 비우는 것 보다 더 빠르게 비우도록 설계된 공간
---> 해당 Pool들은 각각 고유한 방식으로 블록을 관리하기 때문에 효율면에서는 훌륭하지만, 튜닝하기 어려운 부분이 있기 때문에 모든 튜닝요소 검토 후 고려되상이 된다.
- Redo Log Buffer
- 데이터베이스의 변경 사항 관련 정보 보관 (SGA 순환 버퍼) - 온라인 리두 로그 파일에 쓰기 전 데이터를 보관
- Server Process가 Buffer Cache에 변경 사항을 적용할 때(DML, DDL 등) redo 항목이 생성되고, 리두 로그 버퍼에 기록됨.
- 오라클 권고사항 : 시스템에서 생성되는 redo 양에 따라 Log File 크기를 조정하여 20분에 한번씩 Log File이 생성되는 정도
- https://docs.oracle.com/en/database/oracle/oracle-database/19/tgdba/configuring-database-for-performance.html#GUID-BF462098-04C0-42E0-8FE4-8B6659A6A6F9
- LGWR이 Redo Log Buffer를 비우고 로그파일에 내려쓰는 상황
- 매 3초마다
- 커밋 시
- LGWR에 로그파일 스위치 요청이 있을 때
- 로그 버퍼가 1/3 찼거나, 로그 버퍼의 데이터 크기가 1MB가 됐을 때
- Large Pool : shared pool에서 다룰 수 없을 만큼 큰 메모리 조각을 할당하는데 사용됨. 오라클 8i 시절에는 모든 메모리 할당이 shared pool에서만 이루어졌는데, 그러니까 UGA같은 큰 메모리를 할당할 때 LRU 기반인 shared pool에서는 비효율적이어서 생겨남
- shared server connection 환경에서 SGA 영역에 UGA 할당 시 사용
- 병렬 실행문장에서 interprocess message buffer 할당 시 사용
- RMAN disk I/O buffer의 백업
- Java Pool : 자바 프로그램 실행을 돕기 위해 추가된 영역. JVM의 모든 세션 별 Java Code 및 데이터를 저장하는 데 사용되고, dedicated server 시 각 세션이 실제로 이용하는 자바 클래스의 공유 파트를 포함한다.
- Stream Pool : 하나의 데이터베이스에서 다른 데이터베이스로 데이터를 옮기거나 복제하는 Stream Process에 필요한 buffer queue message에 사용된다. stream pool 사이즈를 지정하지 않으면 shared pool의 10%로 자동 설정되기 때문에 이 파라미터를 수동 설정하는 것이 좋다.
수동 SGA 메모리 관리 파라미터
- LOG_BUFFER, STREAMS_POOL, DB_NK_CACHE_SIZE, DB_KEEP_CACHE_SIZE, DB_RECYCLE_CACHE_SIZE
자동 SGA 메모리 관리 파라미터
- 몇 개의 메모리 파라미터와 하나의 SGA_TARGET 파라미터를 설정하여 다양한 SGA 컴포넌트들에 대한 크기를 자동으로 조정하는 방식
- SELECT * FROM V$SGAINFO ;
- SGA_TARGET, DB_CACHE_SIZE, SHARED_POOL_SIZE, LARGE_POOL_SIZE, JAVA_POOL_SIZE
자동 메모리 관리 (Automatic Memory Management)
데이터베이스에서 적절한 SGA, PGA의 크기를 그 동안의 작업 이력을 근거로 하여 동적으로 결정한다.
오라클은 재시동 시 가장 최근의 적절한 설정 환경을 기억하여 반영한다.
참고 >>
oracle administration Workshop book
전문가를 위한 오라클 데이터베이스 아키텍처 (토마스카이트)
'ORACLE > Architecture' 카테고리의 다른 글
[ORACLE] Cursor (0) | 2024.04.17 |
---|---|
[ORACLE] SQL Parsing (0) | 2024.04.17 |
[ORACLE] 3. Oracle Process (0) | 2023.03.06 |
[ORACLE] 1. Oracle Server Architecture (0) | 2023.03.03 |