SGA(System Global Area) 라고 하는 메모리 캐시 영역이 있음
디스크 (DB)에 직접 접근하는 것보다 훨씬 빠름
여러 프로세스가 동시에 데이터 액세스할 수 있으므로 Lock 메커니즘이 필요
DB는 Block 단위로 읽고 씀
DBWR(DB Writer)와 CKPT 프로세스(Checkpoint Process)가 DB<->SGA 간 동기화
오라클에 접속하면 각 클라이언트 전용 서버 프로세스가 뜸
서버 프로세스는 SQL 파싱, 최적화, 블록 읽기, 결과집합 생성 등을 함
(서버 프로세스: 사용자 프로세스와 직접 통신하면서 사용자의 명령 처리하는 프로세스)
RAC(Real Application Cluster)에선 다중 인스턴스가 하나의 DB를 접근 가능
RAC의 인스턴스들을 고속 네트워크로 연결되어 캐시를 공유함
단, 한 인스턴스가 동시에 여러 DB 접근하는 것은 안 됨
사용자와 서버 프로세스가 연결되는 데엔 두 가지 방법이 있다.
한 서버가 한 사용자를 위해 서비스를 제공해준다. 즉 해당 서버는 사용자의 전용 서버인 것이다.
이때 SQL을 수행할 때마다 연결 요청을 반복하면 (요청할 때마다 서버가 켜졌다 꺼졌다 하면) 성능이 떨어진다. 따라서 Connection Pool 을 만들어 연결을 재활용해야 한다.
사용자의 요청을 여러 서버가 처리할 수 있다. 이는 Connection Pool을 DBMS 내부에 구현한 방식이다.
사용자의 명령이 Dispatcher 에 전달되면 이를 Request Queue 에 등록하고, 서버들 중 시간 나는 서버가 거기서 요청을 빼서 처리한다. 결과는 Response Queue 에 등록하고 Dispatcher 는 여기서 결과를 빼다가 원래 요청한 사용자에게 돌려준다.
다음은 오라클의 주요 백그라운드 프로세스이다.
SMON(System Monitor): 장애가 발생한 시스템을 재기동할 때 인스턴스 복구를 수행하고, 임시 세그먼트와 익스텐트를 모니터링한다.
PMON(Process Monitor): 이상이 생긴 프로세스가 사용하던 리소스를 복구한다.
DBWR(Database Writer): 버퍼 캐시에 있는 Dirty 버퍼를 데이터 파일에 기록한다.
LGWR(Log Writer): 로그 버퍼 엔트리를 Redo 로그 파일에 기록한다.
ARCn(Archiver): 꽉 찬 Redo 로그(Online Redo Log File)가 덮어 쓰여지기 전에 Archive Redo Log File로 백업한다.
CKPT(Checkpoint): 마지막 체크포인트 이후의 데이터베이스 변경 사항을 데이터 파일에 기록하도록 트리거하고, 기록 완료 시의 체크포인트를 control/data file의 헤더에 저장한다.
오라클 데이터의 논리적 구조는 다음과 같다. (물리적 구조와 헷갈리지 말자. 별개의 이야기다.)
I/O의 최소 단위이다.
DBMS 는 익스텐트 단위로 테이블에 공간을 할당한다. (블록 하나하나 생성하지 않는다)
익스텐트는 연속되는 블록의 집합이다. 익스텐트 내의 블록들은 공간 상에서 연속하지만, 익스텐트끼리는 연속되지 않는다.
즉, 익스텐트 자체는 의미있는 데이터가 아니다.
세그먼트는 단일적으로 저장공간으로서 동작할 수 있는 단위로, 의미 있는 데이터의 묶음이다.
각각의 table, index, undo가 이에 속한다.
예를 들어, 직원 테이블, 부서 테이블, 직원의 사번 인덱스 등의 오브젝트가 모두 각각의 세그먼트에 저장된다.
세그먼트 안에는 여러 익스텐트가 있다.
하나의 세그먼트에는 같은 종류의 데이터가 저장되지만,
파티션 (데이터가 너무 커서 잘게 나눈 단위)은 여러 세그먼트를 가질 수 있다.
세그먼트를 구성하는 익스텐트들은 여러 데이터 파일에 흩어져 있을 수 있다. (연속하지 않음)
오라클은 테이블들의 용도에 따라 테이블 스페이스를 구분한다.
예를 들어 시스템용 테이블들, 복구용 테이블들을 위한 테이블 스페이스가 분리되어 있다.
테이블 스페이스는 세그먼트를 담는 컨테이너이며 여러 개의 데이터 파일로 이루어져 있다.
테이블 스페이스는 여러 세그먼트를 담을 수 있지만, 세그먼트는 단 하나의 테이블 스페이스에 존재한다.
(한 세그먼트가 두 개 이상의 테이블 스페이스를 걸쳐서 존재할 수 없다.)
논리적으로는 위와 같이 저장하지만 물리적으로는 파일 단위로 관리한다.
실제 데이터가 저장된다. 한 테이블 스페이스는 여러 데이터 파일로 이루어져 있다.
한 데이터 파일 안에 여러 세그먼트가 있을 수 있고, 세그먼트, 즉 테이블이나 인덱스가 여러 파일에 걸쳐있을 수도 있다.
복구 지점을 관리한다.
참조
데이터베이스 생성 시간, 현재 로그 번호, 체크포인트 정보 등을 저장한다.
데이터베이스에 사용되는 파라미터들을 저장한다.
오라클의 메모리는 SGA(System Global Area)와 PGA(Process Global Area)로 나뉜다.
SGA는 여러 프로세스가 다 액세스할 수 있다.
DB 버퍼 캐시, 로그 버퍼 등이 포함되며, 래치, 락 등의 액세스 직렬화 메커니즘에 사용된다.
PGA는 각 서버 프로세스가 가지는 메모리 영역으로 본인만 접근할 수 있다.