oracle server architecture

22
Oracle Server Architecture 날날 : 2010.03.10 날날날 : 날날날 날날 날날날 날날 : 날날날 , 날날날 , 날날날 , 날날날 , 날날날 , 날날날 , 날날날

Upload: guest468e16

Post on 25-May-2015

1.492 views

Category:

Technology


4 download

DESCRIPTION

Oracle Server Architecture

TRANSCRIPT

Page 1: Oracle Server Architecture

Oracle Server Architec-ture

날짜 : 2010.03.10작성자 : 오마주 팀원

오마주 멤버 : 박상수, 심규원, 장익수, 이돈규, 신종익, 이민상, 황한태

Page 2: Oracle Server Architecture

Oracle Architecture 구조 s In-

stance

Oracle Data-base

Library Cache

• SQL, SQL(recursive SQL)

• Parse Test• Execution Plan

Data Dictionary Cache

• Row Cache• Object Information• Security

KEEP

RECY-CLE

DEFAULT

Data Buffer Cache

SGA(System Global Area)

Background Process

RadoLogBuffer

Java Pool

Large Pool

Streams Pool

PMON

SMON

DBWn

CKPTLGW

RARCn etc

Data FilesControl

Files

On-line

Redo Log

Offline Redo Log Feles

Shared Pool

Parameter FILE

Password FILE

PGA(Program Global Area)

Server Process

User Process

Lis-tener

Page 3: Oracle Server Architecture

Oracle Architecture 개요

• 규모 가변성 (Scalability)• 증가하는 작업량을 받아들이고 이에 따라 시스템 자원을 조절하는 오라클의 능력• 10 명의 사용자를 지원할 때와 마찬가지로 다섯 개의 동시 세션에서 10,000 명의 사용자를

지원할 때도 효율적

• 신뢰성 (Reliability)• 운영체제의 폭주나 전원 차단 , 혹은 시스템 오류가 발생하더라도

오라클은 데이터와 트랜잭션에 100% 안전성을 제공

• 관리의 편의성 (Manageability)• 메모리를 이용하는 방법과 디스크에 데이터를 저장하는 주기적으로 제어• 데이터 베이스에 접속하는 이용자를 위해 운영 시스템 프로세스를 할당하는 방법을 세부적으로 제어

Page 4: Oracle Server Architecture

Oracle Instance

• PGA(Program Global Area)• PGA 개념

• 데이터베이스에 접속하는 모든 유저에게 할당되는 각각의 서버 프로세스가 독자적으로 사용하는 오라클 메모리

• PGA 구조도

• 메모리 영역 확인• 정렬 공간 : Order By 또는 Group By 등의 정렬을 수행하기 위한 공간이며 해당 공간에서만 정렬이

완료된다면 이를 메모리 정렬이라고 한다 . 해당 정렬 메모리 공간이 부족하다면 디스크를 이용• 세션 정보 : 서버 프로세스에 의해 추출된 결과 값을 전달하기 위해 필요한 유저 프로세스의 세션 정보를

저장• 커서 상태 정보 : 해당 SQL 파싱 (Parsing) 정보가 저장되어 있는 주소를 저장• 변수 저장 공간 : SQL 문장에 바인드 변수 (Bind Variable) 를 사용 했을 경우 해당 바인드 변수를

저장하는 공간

PGA

정렬 공간(Sort Area)

변수 저장 공간(Stack Space)

세션 정보(Session In-formation)

커서 상태 정보(Cursor State)

Page 5: Oracle Server Architecture

Oracle Instance

• SGA(System Global Area)• SGA 개념

• 오라클이 데이터를 읽거나 변경하기 위해 사용하는 공용 메모리 영역• 공용 메모리 영역이므로 동일 데이터베이스에 접속하는 모든 사용자는 동일 SGA 를 사용

• SGA 구조도

• 메모리 영역 확인• SGA(System Global Area) 는 공유 풀 (Shared Pool) 에는 라이브러리 캐쉬와 데이터 딕셔너리 캐쉬가

존재 하며 , 데이터 버퍼 캐쉬 (Data Buffer Cache), 라두 로그 버퍼 (Rado Log Buffer), 대형 풀(Large Pool),자바 풀 (Java Pool) 로 구분

Library Cache

• SQL, SQL(recursive SQL)

• Parse Test• Execution Plan

Data Dictionary Cache

• Row Cache• Object Information• Security

RECY-CLE

DEFAULT

Data Buffer Cache

SGA(System Global Area)

RadoLogBuffer

Java Pool

Large Pool

Streams Pool

Shared Pool

Page 6: Oracle Server Architecture

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 알고리즘을 주로 사용

Page 7: Oracle Server Architecture

Oracle Instance

• SGA(System Global Area) – Data Buffer Cache• 데이터 버퍼 캐시 정의

• 오라클이 데이터를 읽고 수정하기 위해 디스크에 존재하는 데이터를 읽어 저장하는 메모리 공간

• 데이터 버퍼 캐시의 활용• 데이터베이스 버퍼 캐시 , 또는 버퍼 캐시라고도 불리는 블록 버퍼 캐시는 메모리로 읽어 들여진 데이터

블록의 복사본을 보관• 사용자 프로세스에서 지시에 따라 갱신된 데이터 블록으로서 서버 프로세스는 데이터 블록에 대한 읽기나

쓰기 작업이 필요할 때 버퍼캐시에 보관된 데이터를 이용 함• I/O 를 발생하지 않고 메모리에서 읽고 기록하는 속도가 더 빠르기 때문에 DB 성능을 향상• SGA 중 가장 많은 메모리 크기를 할당

• 데이터 버퍼 캐시의 관리

프로세스 설명

Server Process 디스크로부터 필요한 데이터 블록을 읽어 데이터 버퍼 캐시에 저장

DBWn(Database Writer) 데이터 버퍼 캐시에 저장되어 있는 데이터 블록 중 변경된 데이터 블록의 내용을 디스크로 저장하는 프로세스

※ 데이터 버퍼 캐시를 사용하는 프로세스의 역할

Page 8: Oracle Server Architecture

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 파라메터에 의해 설정※ 데이터 버퍼 캐시의 종류

Page 9: Oracle Server Architecture

Oracle Instance

• SGA(System Global Area) – Redo Log Buffer• 리두 로그 버퍼 정의

• 오브젝트 및 데이터 변경 시 생성되는 로그를 저장하는 SGA 메모리 공간• 데이터베이스 장애 시 복구를 수행하기 위해 모든 DML 에 대한 로그를 기록

• 리두 로그 버퍼의 활용• 리두 로그 버퍼에 기록된 후 백그라운드 프로세스인 LGWR 프로세스에 의해 온라인 리두 로그 파일을

위한 데이터를 보관하는데 사용• 인스턴스 를 복구하는 작업에 이용할 수 있도록 데이터베이스 내의 승인된 모든 트랜잭션을 기록하며 ,

트랜잭션 데이터가 임시로 리두 로그 버퍼내에 캐시된다는 점에서 버퍼 캐시와 비슷한 작동 방식을 함• 메모리 내에 저장된 임시 데이터는 주기적으로 디스크에 저장되며 , 이와 같은 작동 방식을 통해

트랜잭션을 디스크에 저장하는 I/O 의 속도를 높임

• 리두 로그 버퍼의 관리• 디스크 쓰기가 빈번한 로그 버퍼의 특성상 , 데이터 버퍼 캐시나 , 공유 풀 , 라지 풀과 같은 SGA 메모리

공간 중 크기가 작은 편에 속함• 리두 로그 버퍼의 디폴트 크기는 500k 나 128k • CPU_COUNT : 오라클을 실행 하는 호스트 운영체제의 CPU 개수• LOG_BUFFER : 초기화 파라미터는 리두 로그 버퍼의 크기를 바이트 단위로 지정한다 . 리두 로그 버퍼의

디폴트 세팅은 호스트 운영체제 시스템의 최대 블록 크기의 네 배

Page 10: Oracle Server Architecture

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 작업을 수행

• 리두 로그 버퍼의 관리• 데이터베이스가 공유 서버 모드로 설정되면 , 서버 프로세스들은 자신의 세션 정보를 공유 풀이 아닌 대형

풀에 보관 하여 일단 세션이 로그아웃되면 더 이상 이 메모리들이 이용도지 않음

Page 11: Oracle Server Architecture

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 파라메터로 크기를 설정

Page 12: Oracle Server Architecture

Oracle Instance

• 오라클 백그라운드 프로세스• 백그라운드 프로세스 개념

• 연결된 사용자의 유무에 관계없이 항상 데이터 베이스의 일부로 실행• 각각의 프로세스는 저마다 임무를 가지고 있으며 대표적으로는 5 개의 프로세스 (PMON, SMON, DBWn,

CKPT, LGWR, ARCn) 가 존재 함

• 백그라운드 프로세스 구조도

Background ProcessPMO

NSMO

NDBW

nCKPT

LGWR

ARCn etc

Page 13: Oracle Server Architecture

Oracle Instance

• 오라클 백그라운드 프로세스• 백그라운드 프로세스 영역 확인

• Cache 설명

PMON( 프로세스모니터 ) 서버 프로세스 감시 , 호스트 운영체제 시스템 오라클 리스너에 DB 서비스 등록

SMON( 시스템 모니터 ) 시스템 재시작 시에 폭주 복구 담당 , 임시 세크먼트들 정리 , 딕셔너리 관리

DBWn( 데이터베이스 라이터 )

메모리에서 변경된 버퍼를 디스크에 기록하는 프로세스

CKPT( 체크포인트 ) 데이터 버퍼 캐시의 변경된 데이터 블록을 데이터 파일에 기록하여 메모리 내의 데이터와 데이터 파일에 저장된 데이터를 일치시키는 일련의 작업

LGWR( 로그 라이터 ) 데이터 베이스의 승인된 트랜잭션을 온라인 리두 파일에 기록하는 작업

etc ARCH, CJQ0, Jnnn, Pnnn, RECO, Dnnn, Snnn

Page 14: Oracle Server Architecture

Oracle Instance

• 오라클 백그라운드 프로세스 - PMON• 프로세스 모니터 (PMON) 역할

• 서버 프로세스를 감시하여 잘못되거나 실패한 프로세스를 파괴하고 이를 자원을 풀어 줌• 테이블에서 수 많은 행을 변경 할 경우 서버 프로세스는 갱신하는 각각의 행에 대한 트랜잭션이 승인되거나 룰백 될 때까지 잠겨두고 서버 프로세스가 다운 되면 관련 되었던 행들이 모두 잠긴 채로 남는 사태가 발생 되는데 이와 같은 문제를 해결 해주는 부분이 PMON 프로세스

• 공유 서버 프로세스의 경우에는 서버 프로세스를 다시 시작하여 사용자 프로세스 요청과 연결된 서비스를 계속 진행 할 수 있도록 지원

• 호스트 운영체제 시스템의 오라클 리스너에 데이터베이스의 서비스 등록• PMON 은 항상 실행되고 있는 것이 아니라 특정 작업들이 수행하기 위해 정기적으로 수행 됨

SGA(System Global Area)

Shared Pool

Data Buffer Cache

Redo Log Buffer

PMON

Server Process

사원 테이블

Background Process

작업 롤백

테이블에 락 (Lock) 발생

락 (Lock) goth 및 자원 할당 해제

리소스 할당

Page 15: Oracle Server Architecture

Oracle Instance

• 오라클 백그라운드 프로세스 - SMON• 시스템 모니터 (SMON) 역할

• 인스턴스가 폭주한 경우 , SMON 은 시스템 재시작 시에 폭주 복구를 담당하는 역할을 수행• SMON 은 할당된 후 해제되지 않은 임시 세그먼트들을 정리하고 딕셔너리 관리 테이블스페이스에서 많은

수의 익스텐트가 있을 경우 , 임시 세그먼트를 정리하는 작업에는 상당한 시간이 소요 되며 데이터베이스 시동 시에 성능 저하를 가져오므로 일정 시점에 임시 세그먼트를 정리

• SMON 은 딕셔너리 관리 테이블스페이스에서 익스텐트를 병합• ALTER TABLESPACE < 테이블스페이스 이름> COALESCE 구문을 이용하여 수동으로 데이터베이스

내의 빈 익스텐트들을 병합

SMON

사원 테이블

Background Process

테이블의 연속된 공간 통합

장애 발생

테이블

룰백 세그먼트

임시 세그먼트

OPTMAL 크기 유지

임시 세그먼트 제거

인스턴스 복구 수행

Page 16: Oracle Server Architecture

Oracle Instance

• 오라클 백그라운드 프로세스 - DBWn• 데이터베이스 라이터 (DBWn) 역할

• 테이터 블록은 디스크에서 버퍼 캐시로 읽어들여지며 , 다양한 서버 프로세스에 의해 변경 되기 때문에 버퍼 캐시내의 이 블록들을 다시 디스크로 저장해야 할 때는 데이터베이스 라이터 (Database Writer) 가 데이터 저장 업무를 수행

• 데이터 버퍼 캐시의 버퍼는 데이터 블록과 동일 한 의미를 가짐

Data Buffer Cache LRU 작동

설명

Dirty Buffer( 더티 버퍼 ) 변경은 완료되었지만 디스크에 기록되지 않은 버퍼

Pinned Buffer( 사용중 버퍼 )

변경중인 버퍼

Free Buffer( 프리 버퍼 ) 변경이 완료된 후 디스크에 기록된 버퍼

Crean( 제거버퍼 ) 삭제대상

Page 17: Oracle Server Architecture

Oracle Instance

• 오라클 백그라운드 프로세스 - DBWn• 데이터베이스 라이터 (DBWn) 역할

• 메모리에서 변경된 버퍼를 디스크에 기록하는 프로세스

SGA(System Global Area)

Shared Pool

A+ B

Data Buffer Cache

Redo Log Buffer

DBWnUPDATE

TEST SET a=‘b’ WHERE name=“Omaj

u’

A

TEST TABLE

Background Process 변경된 데이터 저장

Page 18: Oracle Server Architecture

Oracle Instance

• 오라클 백그라운드 프로세스 - LGWR• 로그 라이터 (LGWR) 역할

• 데이터베이스의 승인된 트랜잭션을 온라인 리두 파일에 기록하는 작업을 담당• 리두 로그 버퍼의 모든 데이터를 활성화된 리두 로그 파일로 저장하며 , 다음과 같은 네 가지의 다른

상황이 발생하면 쓰기 작업을 수행• 트랜잭션의 승인• 리두 로그 버퍼가 1/3 이상 채워짐• 리두 로그 버퍼 내의 데이터가 1MB 이상 채워짐• 매 3 초가 경과됨

• 리두 로그 버퍼의 아키텍처

종류 설명

빠른 커밋 (Fast Commit) 유저가 특정 작업을 수행하고 커밋 (commit) 을 수행한 후에는 즉시 데이터 베이스에 저장하여 복구 및 조회를 할 수 있게 하겠다는 뜻

선 로그 기법 (Log Ahead) DML(Insert, Update, Delete) 작업을 수행할 경우 실제 데이터에 대해 DML 을 수행하기 전에 데이터들의 변경에 대한 내용을 리두 로그 버퍼에 미리 저장하며 작업 중 장애가 발생하여도 복구를 수행 할 수 있기 때문에 오라클에서는 선 로그 기법을 주로 사용

동시 쓰기 동시 쓰기는 커밋시 로그를 기록하는 부분에서 같은 시점에 커밋되는 작업들에 대해서는 동시에 리두 로그 파일에 기록

Page 19: Oracle Server Architecture

Oracle Instance

• 오라클 백그라운드 프로세스 - LGWR• 로그 라이터 (LGWR) 역할

• LGWR 백그라운드 프로세스는 리두 로그 버퍼에 기록된 내용을 리두 로그 파일로 저장

A -> BC-> D

SGA(System Global Area)

Shared Pool

A+ B C+ D

Data Buffer Cache

Redo Log Buffer

DBWn

B

C

Background Process

TEST 테이블LGWR

A -> BC -> B

리두 로그 파일

Page 20: Oracle Server Architecture

Oracle Instance

• 오라클 백그라운드 프로세스 - CKPT• 체크포인트 (CKPT) 역할

• CKPT 프로세스는 모든 컨트롤 파일과 데이터 파일의 헤더를 최근의 체크포인트 정보를 갱신하는 역할• 데이터 버퍼 캐시의 변경된 데이터 블록을 데이터 파일에 기록 하여 메모리 내의 데이터와 데이터 파일에

저장된 데이터를 일치시키는 일련의 작업• DBWn( 데이터베이스 라이터 ) : 주기적으로 자신의 버퍼를 디스크에 저장하여 체크포인트를 발생 • CKPT( 체크포인트 ) : 로그 스위치 체크 포인트 발생 이후 데이터베이스 복구작업• SMON( 시스템 모니터 ) : 데이터베이스 복구를 담당하여 , 데이터 파일 내에 마지막으로 기록된 체크포인트 이후 온라인

리두 로그 파일의 모든 항목은 반드시 데이터 파일로 다시 적용• 매 3 초가 경과됨

SGA(System Global Area)

Shared Pool

Data Buffer Cache

Redo Log Buffer

DBWn

Background Process

테이블

CKPT

리두 로그 파일

SMON

Page 21: Oracle Server Architecture

Oracle Instance

• 오라클 백그라운드 프로세스 - ARCn• 기록기 (ARCn) 역할

• 만약 디스크에 문제가 발생 된다면 데이터베이스를 복구 할 수 있는 유일한 방법은 백업을 이용하지만 일반적으로 백업은 월간 , 주간 , 혹은 매일 질 수도 있으며 , 불행하게도 리두 로그 파일은 하루 동안의 트랜잭션을 모두 담기 위한 것이 아니라고 할 수 있기 때문에 이부분을 기록기 (Archiver) 프로세스의 도움을 받음

• 데이터 베이스가 작동되는 동안 이와 같은 백업 작업을 수행하며 , 데이터베이스에 변경이 기록되는 동안 실행될 수 있으므로 , 기록기 실행을 위해 데이터베이스를 중단할 필요가 없음

• 기록기 프로세스는 로그 스위치가 일어나는 바로 이 시점에 리두 로그의 트랜잭션 데이터를 테이프나 네트워크 파일 파일 시스템과 같은 다른 오프라인 저장 매체로 전송 하여 사용 가능 하며 , 로그 라이터는 다음 리두 로그 파일로의 쓰기 작업을 계속 수행 가능

Page 22: Oracle Server Architecture

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=14841

45• http://omaju.springnote.com/ - 오마주 스터디 스프링 노트• http://cafe.daum.net/ocp - 오라클 최고의 전문가 및 스터디 카페