2. Oracle Architecture 구조
s PGA Instance
(Program Global Area)
Server Process SGA
(System Global Area) Large Pool
Shared Pool Data Buffer Cache
Library Cache KEEP Rado
• SQL, SQL(recursive SQL) Log Java Pool
• Parse Test
• Execution Plan Buffer
RECYCL
Listener Data Dictionary Cache
E
DEFAULT
• Row Cache
• Object Information Streams Pool
• Security
Background Process
User Process
PMON SMON DBWn CKPT LGWR ARCn etc
Oracle Database
Parameter
FILE Online Offline Redo Log Feles
Control
Data Files Redo
Files
Log
Password FILE
3. Oracle Architecture 개요
• 규모 가변성(Scalability)
• 증가하는 작업량을 받아들이고 이에 따라 시스템 자원을 조절하는 오라클의 능력
• 10명의 사용자를 지원할 때와 마찬가지로 다섯 개의 동시 세션에서 10,000명의 사용자를
지원할 때도 효율적
• 신뢰성(Reliability)
• 운영체제의 폭주나 전원 차단, 혹은 시스템 오류가 발생하더라도
오라클은 데이터와 트랜잭션에 100% 안전성을 제공
• 관리의 편의성(Manageability)
• 메모리를 이용하는 방법과 디스크에 데이터를 저장하는 주기적으로 제어
• 데이터 베이스에 접속하는 이용자를 위해 운영 시스템 프로세스를 할당하는 방법을 세부적으로 제어
4. Oracle Instance
• PGA(Program Global Area)
• PGA 개념
• 데이터베이스에 접속하는 모든 유저에게 할당되는 각각의 서버 프로세스가 독자적으로 사용하는 오라클 메
모리
• PGA 구조도
PGA
세션 정보
정렬 공간 커서 상태 정보 변수 저장 공간
(Session
(Sort Area) (Cursor State) (Stack Space)
Information)
• 메모리 영역 확인
• 정렬 공간 : Order By 또는 Group By 등의 정렬을 수행하기 위한 공간이며 해당 공간에서만 정렬이 완료된
다면 이를 메모리 정렬이라고 한다. 해당 정렬 메모리 공간이 부족하다면 디스크를 이용
• 세션 정보 : 서버 프로세스에 의해 추출된 결과 값을 전달하기 위해 필요한 유저 프로세스의 세션 정보를 저
장
• 커서 상태 정보 : 해당 SQL 파싱(Parsing) 정보가 저장되어 있는 주소를 저장
• 변수 저장 공간 : SQL 문장에 바인드 변수(Bind Variable)를 사용 했을 경우 해당 바인드 변수를 저장하는 공
간
5. Oracle Instance
• SGA(System Global Area)
• SGA 개념
• 오라클이 데이터를 읽거나 변경하기 위해 사용하는 공용 메모리 영역
• 공용 메모리 영역이므로 동일 데이터베이스에 접속하는 모든 사용자는 동일 SGA를 사용
• SGA 구조도
SGA
(System Global Area) Large Pool
Shared Pool Data Buffer Cache
Library Cache Rado
• SQL, SQL(recursive SQL) Log Java Pool
• Parse Test
• Execution Plan Buffer
RECYCL
DEFAULT
E
Data Dictionary Cache
• Row Cache
• Object Information Streams Pool
• Security
• 메모리 영역 확인
• SGA(System Global Area)는 공유 풀(Shared Pool)에는 라이브러리 캐쉬와 데이터 딕셔너리 캐쉬가 존재
하며, 데이터 버퍼 캐쉬(Data Buffer Cache), 라두 로그 버퍼(Rado Log Buffer), 대형 풀(Large Pool),
자바 풀(Java Pool)로 구분
6. Oracle Instance
• SGA(System Global Area) – Shard Pool
• 공유 풀 정의
• SGA를 관리하는 매카니즘, 파라메터 정보, 실행된 SQL, SQL 분석/실행 정보 및 오라클 오브젝트 정보를 저
장하는 메모리 공간
• 공유 풀 동적 영역의 구분
• 라이브러리 캐시 : 데이터베이스에 접속한 유저가 실행한 SQL, 오라클이 내부적으로 사용하는
SQL(Recursive SQL), SQL에 대한 분석 정보(Parse Tree) 및 실행 계획(Execution Plan) 이저장
• 데이터 딕셔너리 캐시 : 데이터 딕셔너리 캐쉬는 로우 캐쉬(Row chche)라고도 부른다. 데이터 딕셔너리 캐
쉬에는 테이블, 인덱스, 함수 및 트리거 등 오라클 오브젝트 정보 및 권한 등의 정보가 저장
• 공유 풀의 활용
• SQL문의 문법 확인(Syntax Check)
• 데이터 베이스 분석
• 공유 풀의 관리
프로세스 스케줄링 기법 설명
LRU(Least Recently Used) 최근에 가장 적게 사용한 것을 스케줄링
FIFO(First in First out) 먼저 수행된 것을 먼저 처리하는 스케줄링
LIFO(Last in First Out) 나중에 수행된 것을 먼저 처리하는 스케줄링
※ 위의 프로세스 스케줄링 기법은 대표적인 예이다. 오라클은 이러한 여러 가지 종류의 프로세스 스케줄링 기법 중 LRU 알고리즘을 주
로 사용
7. Oracle Instance
• SGA(System Global Area) – Data Buffer Cache
• 데이터 버퍼 캐시 정의
• 오라클이 데이터를 읽고 수정하기 위해 디스크에 존재하는 데이터를 읽어 저장하는 메모리 공간
• 데이터 버퍼 캐시의 활용
• 데이터베이스 버퍼 캐시, 또는 버퍼 캐시라고도 불리는 블록 버퍼 캐시는 메모리로 읽어 들여진 데이터 블
록의 복사본을 보관
• 사용자 프로세스에서 지시에 따라 갱신된 데이터 블록으로서 서버 프로세스는 데이터 블록에 대한 읽기나
쓰기 작업이 필요할 때 버퍼캐시에 보관된 데이터를 이용 함
• I/O를 발생하지 않고 메모리에서 읽고 기록하는 속도가 더 빠르기 때문에 DB성능을 향상
• SGA중 가장 많은 메모리 크기를 할당
• 데이터 버퍼 캐시의 관리
프로세스 설명
Server Process 디스크로부터 필요한 데이터 블록을 읽어 데이터 버퍼 캐시에 저
장
DBWn(Database Writer) 데이터 버퍼 캐시에 저장되어 있는 데이터 블록 중 변경된 데이터
블록의 내용을 디스크로 저장하는 프로세스
※ 데이터 버퍼 캐시를 사용하는 프로세스의 역할
8. Oracle Instance
• SGA(System Global Area) – Data Buffer Cache
• 다중 데이터 버퍼 캐시 설정
Cache 설명
기본(Default) 일반 데이터 버퍼 캐시이며 DB _CACHE_SIZE 파라메터에 의해 설정
고정(Keep) 데이터 버퍼 캐시로 읽혀진 데이터 블록은 재사용률이 높다고 판단하여 해당
데이터 버퍼 캐쉬의 내용을 삭제하지 않으며, 고정 테이터 버퍼 캐쉬는
DB_KEEP_CACHE_SIZE에 의해 설정
재활용(Recycle) 데이터 버퍼 캐시는 재사용이 거의 안된다고 판단하여 해당 메모리 블록들은
짧은 시간 안에 제거되며, DB_RECYCLE_CACHE_SIZE 파라레터에 의해 설
정
블록(block) 전체 데이터베이스의 디폴트 블록 크기를 정의하는 데이터베이스 파라미터
DB_BLOCK_SIZE 파라메터에 의해 설정
※ 데이터 버퍼 캐시의 종류
9. Oracle Instance
• SGA(System Global Area) – Redo Log Buffer
• 리두 로그 버퍼 정의
• 오브젝트 및 데이터 변경 시 생성되는 로그를 저장하는 SGA 메모리 공간
• 데이터베이스 장애 시 복구를 수행하기 위해 모든 DML에 대한 로그를 기록
• 리두 로그 버퍼의 활용
• 리두 로그 버퍼에 기록된 후 백그라운드 프로세스인 LGWR 프로세스에 의해 온라인 리두 로그 파일을 위
한 데이터를 보관하는데 사용
• 인스턴스 를 복구하는 작업에 이용할 수 있도록 데이터베이스 내의 승인된 모든 트랜잭션을 기록하며, 트랜
잭션 데이터가 임시로 리두 로그 버퍼내에 캐시된다는 점에서 버퍼 캐시와 비슷한 작동 방식을 함
• 메모리 내에 저장된 임시 데이터는 주기적으로 디스크에 저장되며, 이와 같은 작동 방식을 통해 트랜잭션을
디스크에 저장하는 I/O의 속도를 높임
• 리두 로그 버퍼의 관리
• 디스크 쓰기가 빈번한 로그 버퍼의 특성상, 데이터 버퍼 캐시나, 공유 풀, 라지 풀과 같은 SGA 메모리 공간
중 크기가 작은 편에 속함
• 리두 로그 버퍼의 디폴트 크기는 500k나 128k
• CPU_COUNT : 오라클을 실행 하는 호스트 운영체제의 CPU 개수
• LOG_BUFFER : 초기화 파라미터는 리두 로그 버퍼의 크기를 바이트 단위로 지정한다. 리두 로그 버퍼의 디
폴트 세팅은 호스트 운영체제 시스템의 최대 블록 크기의 네 배
10. Oracle Instance
• SGA(System Global Area) – Large Pool
• 대형 풀 정의
• 공유 풀, 데이터 버퍼 캐시, 리두 로그 버퍼와 같이 SGA 필수 항목이 아닌 선택 적인 메모리 영역
• 대형 풀의 활용
• 대형 풀이라고 불리는 것은 영역의 크기가 SGA의 다른 메모리 영역보다 크기 때문이 아니라, 캐시된 데이
터를 4k 이상의 덩어리로 보관 함
• 메모리 덩어리는 일단 할당되면 더 이상 이용되지 않을 때까지 유지되며, 더 이상 이용되지 않으면 메모리
에서 해제 됨
• UGA(User Global Area) : 공유 서버 프로세스를 위한 세션 관리
• RMAN(Recover Manager)의 저장 정보 : RMAN 유틸리티를 사용하면 여러 개의 디스크 I/O 슬래이브 프로
세스를 기동하게 되며, 이때 BACKUP_DISK_IO=n과 BACKUP_TAPE_IO_SLAVE=TRUE로 파라메터가 설
정되면 대형 풀을 이용함
• 병렬 프로세스(Parallel Processing) : 여러 개의 프로세스를 기동하여 하나의 SQL을 수행하며, 대형 풀 설
정이 되어 있지 않다면 공유 풀을 사용하게 되어 공유 풀의 공간 낭비를 하게 되므로 데이터베이스에 대형
풀이 설정되어 있고 PARALLEL_AUTOMATIC_TUNING=TRUE 파라메터로 설정하여 낭비를 줄임
• I/O 슬래이브 프로세스의 정보 저장
• DBWn 백그라운드 프로세스는 해당 프로세스 아래 슬래이브 프로세스(Slave Process)를 기동하여 더 빠른
디스크 I/O 작업을 수행
• 리두 로그 버퍼의 관리
• 데이터베이스가 공유 서버 모드로 설정되면, 서버 프로세스들은 자신의 세션 정보를 공유 풀이 아닌 대형
풀에 보관 하여 일단 세션이 로그아웃되면 더 이상 이 메모리들이 이용도지 않음
11. Oracle Instance
• SGA(System Global Area) – Java Pool
• 자바 풀 정의
• 대형 풀과 같이 필요에 따라 지정해서 사용하는 SGA 영역
• 대형 풀의 활용
• Oracle JVM에 접속해 있는 모든 세션에서 사용하는 자바코드가 사용하는 메모리 영역으로
JAVA_POOL_SIZE 파라메터로 지정
• SGA(System Global Area) – Streams Pool
• 스트림 풀 정의
• Oracle 10g 부터 새롭게 등장한 새로운 유형의 풀을 지원
• 스트림 풀의 활용
• 오라클 스트림(다른 DB로 데이터전달)에서 사용하는 메모리 영역으로
STREAMS_POOL_SIZE 파라메터로 크기를 설정
12. Oracle Instance
• 오라클 백그라운드 프로세스
• 백그라운드 프로세스 개념
• 연결된 사용자의 유무에 관계없이 항상 데이터 베이스의 일부로 실행
• 각각의 프로세스는 저마다 임무를 가지고 있으며 대표적으로는 5개의 프로세스(PMON, SMON, DBWn,
CKPT, LGWR, ARCn)가 존재 함
• 백그라운드 프로세스 구조도
Background Process
PMON SMON DBWn CKPT LGWR ARCn etc
13. Oracle Instance
• 오라클 백그라운드 프로세스
• 백그라운드 프로세스 영역 확인
•
Cache 설명
PMON(프로세스모니터) 서버 프로세스 감시, 호스트 운영체제 시스템 오라클 리스너에 DB 서비스
등록
SMON(시스템 모니터) 시스템 재시작 시에 폭주 복구 담당, 임시 세크먼트들 정리, 딕셔너리 관리
DBWn(데이터베이스 라이 메모리에서 변경된 버퍼를 디스크에 기록하는 프로세스
터)
CKPT(체크포인트) 데이터 버퍼 캐시의 변경된 데이터 블록을 데이터 파일에 기록하여 메모리
내의 데이터와 데이터 파일에 저장된 데이터를 일치시키는 일련의 작업
LGWR(로그 라이터) 데이터 베이스의 승인된 트랜잭션을 온라인 리두 파일에 기록하는 작업
etc ARCH, CJQ0, Jnnn, Pnnn, RECO, Dnnn, Snnn
14. Oracle Instance
• 오라클 백그라운드 프로세스 - PMON
• 프로세스 모니터(PMON) 역할
• 서버 프로세스를 감시하여 잘못되거나 실패한 프로세스를 파괴하고 이를 자원을 풀어 줌
• 테이블에서 수 많은 행을 변경 할 경우 서버 프로세스는 갱신하는 각각의 행에 대한 트랜잭션이 승인되거나
룰백 될 때까지 잠겨두고 서버 프로세스가 다운 되면 관련 되었던 행들이 모두 잠긴 채로 남는 사태가 발생
되는데 이와 같은 문제를 해결 해주는 부분이 PMON 프로세스
• 공유 서버 프로세스의 경우에는 서버 프로세스를 다시 시작하여 사용자 프로세스 요청과 연결된 서비스를
계속 진행 할 수 있도록 지원
• 호스트 운영체제 시스템의 오라클 리스너에 데이터베이스의 서비스 등록
• PMON은 항상 실행되고 있는 것이 아니라 특정 작업들이 수행하기 위해 정기적으로 수행 됨
SGA Data Buffer Cache Redo Log Buffer
(System Global Area)
Shared 사원 테이블
Pool
리소스 할당 작업 롤백
Background Process
락(Lock) goth 및 자원
Server Process 할당 해제
PMON
테이블에 락(Lock) 발생
15. Oracle Instance
• 오라클 백그라운드 프로세스 - SMON
• 시스템 모니터(SMON) 역할
• 인스턴스가 폭주한 경우, SMON은 시스템 재시작 시에 폭주 복구를 담당하는 역할을 수행
• SMON은 할당된 후 해제되지 않은 임시 세그먼트들을 정리하고 딕셔너리 관리 테이블스페이스에서 많은
수의 익스텐트가 있을 경우, 임시 세그먼트를 정리하는 작업에는 상당한 시간이 소요 되며 데이터베이스 시
동 시에 성능 저하를 가져오므로 일정 시점에 임시 세그먼트를 정리
• SMON은 딕셔너리 관리 테이블스페이스에서 익스텐트를 병합
• ALTER TABLESPACE <테이블스페이스 이름> COALESCE 구문을 이용하여 수동으로 데이터베이스 내의
빈 익스텐트들을 병합
사원 테이블
장애 발생 인스턴스 복구 수행
테이블의 연속된 공간 통
합 테이블
OPTMAL 크기 유지
룰백 세그먼트
임시 세그먼트 제거
임시 세그먼트
Background Process
SMON
16. Oracle Instance
• 오라클 백그라운드 프로세스 - DBWn
• 데이터베이스 라이터(DBWn) 역할
• 테이터 블록은 디스크에서 버퍼 캐시로 읽어들여지며, 다양한 서버 프로세스에 의해 변경 되기 때문에 버퍼
캐시내의 이 블록들을 다시 디스크로 저장해야 할 때는 데이터베이스 라이터(Database Writer)가 데이터 저
장 업무를 수행
• 데이터 버퍼 캐시의 버퍼는 데이터 블록과 동일 한 의미를 가짐
Data Buffer Cache 설명
LRU 작동
Dirty Buffer(더티 버퍼) 변경은 완료되었지만 디스크에 기록되지 않은 버퍼
Pinned Buffer(사용중 버퍼) 변경중인 버퍼
Free Buffer(프리 버퍼) 변경이 완료된 후 디스크에 기록된 버퍼
Crean(제거버퍼) 삭제대상
17. Oracle Instance
• 오라클 백그라운드 프로세스 - DBWn
• 데이터베이스 라이터(DBWn) 역할
• 메모리에서 변경된 버퍼를 디스크에 기록하는 프로세스
SGA Data Buffer Cache Redo Log Buffer
(System Global Area)
Shared TEST TABLE
Pool
A+ B
A
Background Process
변경된 데이터 저장
UPDATE TEST DBWn
SET a=‘b’
WHERE
name=“Omaju’
18. Oracle Instance
• 오라클 백그라운드 프로세스 - LGWR
• 로그 라이터(LGWR) 역할
• 데이터베이스의 승인된 트랜잭션을 온라인 리두 파일에 기록하는 작업을 담당
• 리두 로그 버퍼의 모든 데이터를 활성화된 리두 로그 파일로 저장하며, 다음과 같은 네 가지의 다른 상황이
발생하면 쓰기 작업을 수행
• 트랜잭션의 승인
• 리두 로그 버퍼가 1/3 이상 채워짐
• 리두 로그 버퍼 내의 데이터가 1MB 이상 채워짐
• 매 3초가 경과됨
• 리두 로그 버퍼의 아키텍처
종류 설명
빠른 커밋(Fast Commit) 유저가 특정 작업을 수행하고 커밋(commit)을 수행한 후에는 즉시 데이터
베이스에 저장하여 복구 및 조회를 할 수 있게 하겠다는 뜻
선 로그 기법(Log Ahead) DML(Insert, Update, Delete) 작업을 수행할 경우 실제 데이터에 대해 DML
을 수행하기 전에 데이터들의 변경에 대한 내용을 리두 로그 버퍼에 미리 저
장하며 작업 중 장애가 발생하여도 복구를 수행 할 수 있기 때문에 오라클에
서는 선 로그 기법을 주로 사용
동시 쓰기 동시 쓰기는 커밋시 로그를 기록하는 부분에서 같은 시점에 커밋되는 작업
들에 대해서는 동시에 리두 로그 파일에 기록
19. Oracle Instance
• 오라클 백그라운드 프로세스 - LGWR
• 로그 라이터(LGWR) 역할
• LGWR 백그라운드 프로세스는 리두 로그 버퍼에 기록된 내용을 리두 로그 파일로 저장
SGA Data Buffer Cache Redo Log Buffer
(System Global Area)
A -> B
Shared
Pool C-> D
A+ B C+ D
Background Process
B A -> B
C -> B
C
DBWn LGWR
TEST 테이블 리두 로그 파일
20. Oracle Instance
• 오라클 백그라운드 프로세스 - CKPT
• 체크포인트(CKPT) 역할
• CKPT 프로세스는 모든 컨트롤 파일과 데이터 파일의 헤더를 최근의 체크포인트 정보를 갱신하는 역할
• 데이터 버퍼 캐시의 변경된 데이터 블록을 데이터 파일에 기록 하여 메모리 내의 데이터와 데이터 파일에
저장된 데이터를 일치시키는 일련의 작업
• DBWn(데이터베이스 라이터) : 주기적으로 자신의 버퍼를 디스크에 저장하여 체크포인트를 발생
• CKPT(체크포인트) : 로그 스위치 체크 포인트 발생 이후 데이터베이스 복구작업
• SMON(시스템 모니터) : 데이터베이스 복구를 담당하여, 데이터 파일 내에 마지막으로 기록된 체크포인트 이후 온라인 리두
로그 파일의 모든 항목은 반드시 데이터 파일로 다시 적용
• 매 3초가 경과됨
SGA Data Buffer Cache Redo Log Buffer
(System Global Area)
Shared
Pool
리두 로그 파일
Background Process
DBWn CKPT SMON
테이블
21. Oracle Instance
• 오라클 백그라운드 프로세스 - ARCn
• 기록기(ARCn) 역할
• 만약 디스크에 문제가 발생 된다면 데이터베이스를 복구 할 수 있는 유일한 방법은 백업을 이용하지만 일반
적으로 백업은 월간, 주간, 혹은 매일 질 수도 있으며, 불행하게도 리두 로그 파일은 하루 동안의 트랜잭션을
모두 담기 위한 것이 아니라고 할 수 있기 때문에 이부분을 기록기(Archiver)프로세스의 도움을 받음
• 데이터 베이스가 작동되는 동안 이와 같은 백업 작업을 수행하며, 데이터베이스에 변경이 기록되는 동안 실
행될 수 있으므로, 기록기 실행을 위해 데이터베이스를 중단할 필요가 없음
• 기록기 프로세스는 로그 스위치가 일어나는 바로 이 시점에 리두 로그의 트랜잭션 데이터를 테이프나 네트
워크 파일 파일 시스템과 같은 다른 오프라인 저장 매체로 전송 하여 사용 가능 하며, 로그 라이터는 다음
리두 로그 파일로의 쓰기 작업을 계속 수행 가능
22. References
• 초보자를 위한 Oracle 10g – 권순용, 김지한, 황오현 저
• Beginning Oracle Programming – Sean Dilon 외 4인 공저
• http://www.oracle.com/pls/db102/homepage
• http://kr.forums.oracle.com/forums/thread.jspa?messageID=1484145
• http://omaju.springnote.com/ - 오마주 스터디 스프링 노트
• http://cafe.daum.net/ocp - 오라클 최고의 전문가 및 스터디 카페