오라클 구조(Architecture) 2

오라클 구조

사용자 삽입 이미지

□ Oracle Server : Instance + Database

□ Instance : SGA + Background Process

□ Database : Datafile + Control File + RedoLog File

□ SGA : Shared Pool + Database Buffer Cache + Redo Log Buffer ( + Java Pool + Large Pool )
  – SGA 값 변경후 재부팅 없이 적용가능
  – SGA_MAX_SIZE로 크기 조절가능
  – SGA_MAX_SIZE > 1G : 1 granule = 16M (9i에서는 128M를 기준으로 나뉜다)
  – SGA_MAX_SIZE <= 1G : 1 granule = 4M

참고 : granule : SGA에서 메모리를 할당해 줄 수 있는 용량의 최소 단위

□ Background Process : PMON + SMON + DBWR + LGWR + CKPT + Others

□ Shared Pool : Library Cache + Data Dictionary Cache
  – 최근 가장 많이 사용된 SQL, DATA가 저장되는 공간
  – SHARED_POOL_SIZE로 크기 조절가능

□ Library Cache
  – SQL, PL/SQL, 실행계획, Parse Code가 저장되는 공간
  – LRU 알고리즘 적용
  – 메모리 크기는 Shared Pool 크기에 따라 조절된다.

참고 : LRU 알고리즘
LRU(Least Recently Used)알고리즘은 기억장치 바깥으로 내보내야할 데이터를 선정할 때 가장 오랜 기간 사용되지 않았던 데이터부터 교체하는 알고리즘

□ Data Dictionary Cache(=Row Cache) : 빈번하게 사용되는 Data Dictionary의 데이터 일부를 저장하는 공간

□ Data Buffer Cache
  – SQL 실행작업과 관련된 Data file의 복사본 중 일부가 저장되는 공간
  – LRU 알고리즘 적용
  – DB_CACHE_SIZE의 설정을 통해 변경 가능(단, 시스템의 가용용량이 존재할 때 가능하다)
  – DB_BLOCK_SIZE의 크기에 따라 데이터 저장

참고 : DB_BLOCK_SIZE
– 오라클은 DB_BLOCK_SIZE 단위로 디스크(데이터베이스)와 메모리(인스턴스) 사이로 데이터를 전송한다.
– 블록사이즈는 DB생성 시 결정되며, 한번 설정된 이후에는 변경할 수 없다.
– 10g 기본 블록사이즈 : 8K  /  9i 기본 블록사이즈 : 4K

□ Redo Log Buffer
  – 복구를 위해 사용되는 공간
  – 데이터베이스의 모든 변경사항이 저장(DML 작업, Select 작업은 제외)
  – LOG_BUFFER을 이용하여 크기조절(단, 인스턴스의 재시작 후 적용된다)

□ Large Pool : Optional 메모리공간, 대용량 메모리 할당이 필요할 때 사용(백업/복구 등)

□ Java Pool : Java 코드가 사용하는 메모리 공간, 잘 사용되지 않음

□ 메모리구조 : SGA + PGA

□ SGA(System Global Area, Shared Global Area) : 인스턴스가 최초 시작될 때 생성되며, 모든 서버 프로세스가 공유하는 메모리 영역

□ PGA(Program Global Area, Private Global Area) : 서버 프로세스가 생성될 때 생성되는 메모리 영역으로, 해당 서버프로세스 단독사용

□ 프로세스 구조
  – 사용자 프로세스(User Process) : 오라클 서버에 접속을 요청하기 위한 프로세스
  – 서버 프로세스(Server Process) : 사용자 프로세스와 오라클 인스턴스간에 연결을 맺고, 세션을 유지시키는 프로세스
  – 백그라운드 프로세스(Background Process) : 오라클 인스턴스 생성 시 같이 시작되는 프로세스

□ User Process : 오라클 서버에 접속 요청을 하는 프로그램, Server Process와 연결을 통해 오라클 서버에 명령을 전달한다.

□ Server Process
  – User Process와 오라클 인스턴스간에 연결을 맺고, User Process의 요청을 처리하거나 오라클 인스턴스에 전달하는 프로세스
  – Dedicated 와 Shared Server로 구분

 참고 : Dedicated Server vs Shared Server
 1. Dedicated Server : 1개 User Process당 1개의 Server Process 할당되는 방식(관리용이, 메모리 성능 저하)
 2. Shared Server :1개 Server Process가 다수의 User Process 처리(메모리 성능 향상, 비정상적인 서버 프로세스는 다수 User Process에 악영향)

□ Background Process : 물리적 데이터파일과 메모리 구조 사이의 관계를 관리하는 프로세스
  – 필수 : DBWR, PMON, CKPT, LGWR, SMON
  – 옵션 : ARCn, RECO, LMON, LMDn 등

참고 : 백그라운드 프로세스 중 1개라도 죽으면 전체 서비스가 멈춘다

□ DBWR(Dtabase Writer) : Data Buffer Cache의 변경된 Data를 디스크에 저장
  – 디스크에 내려쓰는 시기 : Checkpoint 신호 발생 시,  Dirty Buffer의 임계값이 1/3에 도달 시, 3초에 한번 씩, Free Buffer 가 없을 때 등
  – DBWR이 자주 내려쓸 수록 I/O가 증가해 오라클 서버 성능이 저하된다.
  – Data Buffer Cache의 크기가 클 수록 Free Buffer의 검색시간이 증가해 성능이 저하된다.

참고 :  Data Buffer Cache의 3가지 상태
1. Pinned Buffer : 현재 사용중인 상태
2. Dirty Buffer : 변경된 데이터 저장, Data File에는 아직 저장되지 않음
3. Free Buffer : Data File에 저장완료, 새로운 데이터 저장가능한 상태

 
□ LGWR(Log Writer) : 데이터베이스의 모든 변경사항을 Redo Log file에 저장하는 프로세스
  – 디스크에 내려쓰는 시기 : Commit 발생 시, 버퍼 중 1/3가 찼을 때, 버퍼 사용량이 1MB를 넘겼을 때, 3초에 한번 씩, DBWR 작동 전에(선로그 기법)

□ SMON(System Monitor) : 비정상 종료된 서버(Instance Crash) 재시작 시 복구작업을 진행하는 프로세스(Instance Recovery)

□ PMON(Process Monitor)
  – 모든 서버 프로세스의 원본
  – 비정상적으로 종료된 서버프로세스 정리
  – Listener의 요청 시 자신을 복제하여 Server Process 생성

□ CKPT(Checkpoint)
  – Checkpoint 신호 발생
  – Checkpoint 신호 발생 시 DBWR이 Database Buffer Cache의 내용을 디스크(데이터베이스)로 내려쓴다.

□ ARCn : Redo Log file이 모두 꽉 찼을 경우(Log Switch 발생) Archive file로 저장하는 프로세스, ArchiveLog mode로 운영 시에만 동작

□ 논리적인 구조
  – Block → Extent → Segment → Datafile → Tablespace

□ SQL문의 처리 과정
– 구문분석(Parsing), 실행계획(Execute Plan) 작성 → 바인드(Bind) → 실행(Execute) → 인출(Fetch)

참고 : BIND
전체 SQL문 중 특정 컬럼값만 변경되고 전체적인 문법은 동일한 경우 Hard Parsing을 줄이기 위해 실행계획을 1개만 만드는 기법
예제 ) 게시판에서 키워드 검색(제목, 이름, 작성자 등), 로그인 등
      select id, password from member where id=&id and password=&password;

You may also like...

1 Response

  1. 노랑이 댓글:

    퍼가요 ^^

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다