데이터베이스 관리 시스템(DBMS)의 전체적인 구조는 크게 메모리 구조, 프로세스 구조, 스토리지 구조로 나눌 수 있습니다. 각각의 요소는 DBMS가 효율적으로 데이터를 관리하고 처리하는 데 필수적인 역할을 합니다. Oracle DBMS를 예로 들어 SGA를 포함한 전체적인 데이터베이스 구조를 설명하겠습니다.
1. 메모리 구조 (Memory Structure)
데이터베이스의 메모리 구조는 주로 SGA(System Global Area)와 PGA(Program Global Area)로 나눌 수 있습니다. 이 구조는 데이터베이스와 사용자 세션 간의 데이터 교환과 SQL 실행 성능을 최적화하는 데 중요한 역할을 합니다.
1-1. SGA (System Global Area)
SGA는 데이터베이스 인스턴스에서 공유되는 메모리 영역으로, 여러 사용자 간에 공통으로 사용됩니다. SGA는 DB 성능에 중요한 영향을 미치는 다양한 캐시와 버퍼를 포함하고 있습니다.
- DB 버퍼 캐시 (Database Buffer Cache): 디스크 I/O를 줄이고 데이터를 메모리에 캐싱하여 빠르게 읽고 쓸 수 있도록 지원하는 캐시.
- 공유 풀 (Shared Pool): SQL 실행 계획, 파싱된 SQL 문, 데이터 딕셔너리 정보를 캐싱하여 성능을 향상시킴.
- Redo 로그 버퍼 (Redo Log Buffer): 데이터베이스 변경 사항을 기록하여 장애 발생 시 복구할 수 있도록 함.
- 대기열 캐시 (Large Pool): 백업, 복구, 병렬 쿼리 등을 위한 메모리 공간.
- Java 풀 (Java Pool): Java 기반 객체 및 애플리케이션을 실행하는 데 필요한 메모리.
- Streams 풀 (Streams Pool): Oracle Streams 작업을 위한 메모리 공간.
1-2. PGA (Program Global Area)
PGA는 각 사용자 세션이 사용하는 비공유 메모리 영역입니다. PGA는 개별 세션의 연산 작업을 처리하며, 주로 정렬 작업이나 해시 조인 작업에 사용됩니다.
- 세션별 메모리 공간: 세션별로 할당되어 데이터를 처리할 때 사용됩니다.
- 작업 영역: 정렬, 집합 연산 등과 같은 특정 작업을 처리하기 위해 사용되는 메모리입니다.
1-3. UGA (User Global Area)
UGA는 사용자의 세션 상태 정보를 저장하는 공간으로, PGA 또는 SGA에 포함될 수 있습니다. 사용자별로 할당되는 세션 정보와 함께, 쿼리 처리 중 발생하는 일시적인 데이터(세션 캐시 등)가 저장됩니다.
2. 프로세스 구조 (Process Structure)
데이터베이스는 백그라운드 프로세스와 사용자 프로세스로 나뉩니다. 각 프로세스는 데이터베이스 운영을 담당하는 다양한 역할을 수행합니다.
2-1. 백그라운드 프로세스 (Background Processes)
백그라운드 프로세스는 데이터베이스가 원활하게 동작할 수 있도록 내부적으로 다양한 작업을 수행합니다. Oracle의 주요 백그라운드 프로세스는 다음과 같습니다.
- DBWR (Database Writer): DB 버퍼 캐시에서 변경된 데이터를 데이터 파일로 기록하는 프로세스입니다. 변경된 데이터는 먼저 버퍼 캐시에 저장되고, 주기적으로 디스크에 기록됩니다.
- LGWR (Log Writer): Redo 로그 버퍼에 저장된 변경 사항을 Redo 로그 파일로 기록하는 프로세스입니다. 트랜잭션이 커밋되거나 특정 이벤트가 발생할 때 로그를 기록합니다.
- CKPT (Checkpoint): 체크포인트를 발생시켜 DBWR가 디스크에 데이터를 기록하도록 지시하고, 장애 발생 시 데이터 복구에 필요한 정보를 관리합니다.
- SMON (System Monitor): 장애 발생 시 시스템을 복구하고, 데이터베이스 시작 시 복구를 수행하는 프로세스입니다.
- PMON (Process Monitor): 비정상적으로 종료된 사용자 프로세스를 감지하고, 리소스를 회수하는 역할을 합니다.
- ARCH (Archiver): Redo 로그 파일을 보관용 아카이브 로그로 복사하여 장애 발생 시 데이터를 복구할 수 있도록 준비합니다.
2-2. 사용자 프로세스 (User Processes)
사용자 프로세스는 클라이언트 애플리케이션이 데이터베이스에 연결될 때 생성됩니다. 사용자는 SQL 명령을 보내고 결과를 받는 역할을 하며, 사용자 프로세스는 데이터베이스 서버와 통신합니다.
2-3. 서버 프로세스 (Server Processes)
서버 프로세스는 사용자 프로세스와 데이터베이스 사이에서 데이터를 처리하는 역할을 합니다. 서버 프로세스는 SQL 명령을 수행하고, 결과를 사용자 프로세스에 반환합니다.
3. 스토리지 구조 (Storage Structure)
데이터베이스의 스토리지 구조는 데이터를 물리적으로 저장하는 방법과, 디스크에 데이터를 효율적으로 배치하는 방식에 대한 내용입니다.
3-1. 데이터 파일 (Data Files)
데이터 파일은 데이터베이스의 테이블, 인덱스, 트리거 등 모든 데이터를 저장하는 파일입니다. 각 데이터 파일은 하나의 테이블스페이스에 속하며, 테이블스페이스는 여러 데이터 파일로 구성될 수 있습니다.
- 테이블스페이스(Table Space): 데이터 파일을 논리적으로 그룹화한 것. 예를 들어, 데이터베이스 객체들을 논리적으로 구분하기 위해 SYSTEM, USERS, TEMP 등의 테이블스페이스가 사용됩니다.
3-2. Redo 로그 파일 (Redo Log Files)
Redo 로그 파일은 트랜잭션이 변경한 내용을 기록한 파일입니다. 데이터베이스가 정상적으로 운영되다가 장애가 발생했을 때, Redo 로그를 사용하여 데이터베이스를 복구할 수 있습니다.
3-3. 컨트롤 파일 (Control Files)
컨트롤 파일은 데이터베이스의 상태 정보를 저장하는 파일로, 데이터 파일과 로그 파일의 위치, 데이터베이스의 구조, 백업 및 복구에 필요한 정보를 포함하고 있습니다. 이 파일이 손상되면 데이터베이스를 시작할 수 없기 때문에 중요합니다.
3-4. 아카이브 로그 파일 (Archive Log Files)
아카이브 로그 파일은 Redo 로그 파일을 보관용으로 저장한 파일입니다. ARCH 프로세스가 Redo 로그 파일을 보관용으로 아카이브하여 장애 시 복구 작업에 사용할 수 있도록 합니다.
4. 데이터베이스 접근 구조 (Data Access Structure)
데이터베이스는 테이블, 인덱스, 뷰 등의 논리적인 구조를 통해 데이터를 관리하고 처리합니다.
4-1. 테이블 (Tables)
테이블은 데이터베이스에서 데이터를 행과 열로 구성하여 저장하는 기본 단위입니다. 각 테이블은 고유한 열(Column)과 행(Row)으로 구성되며, 데이터가 여기에 저장됩니다.
4-2. 인덱스 (Indexes)
인덱스는 테이블의 데이터를 빠르게 검색하기 위해 사용하는 구조입니다. 인덱스는 주로 B-Tree 구조로 이루어져 있으며, 검색 성능을 향상시키는 데 중요한 역할을 합니다.
- B-Tree 인덱스: 일반적으로 사용하는 인덱스 구조로, 범위 검색 및 동등 비교에 효율적입니다.
- Bitmap 인덱스: 값의 종류가 적은 열에 적합한 인덱스 구조로, 주로 데이터 웨어하우스에서 사용됩니다.
4-3. 뷰 (Views)
뷰는 데이터베이스에서 하나 이상의 테이블을 조인한 결과를 저장하는 가상의 테이블입니다. 실제 데이터는 저장되지 않으며, 뷰를 통해 특정 데이터를 쉽게 조회할 수 있습니다.
4-4. 클러스터 (Cluster)
클러스터는 같은 데이터블록에 여러 테이블을 그룹화하여 저장하는 방법입니다. 클러스터를 사용하면 자주 조인되는 테이블들에 대해 I/O 성능을 향상시킬 수 있습니다.
5. 데이터베이스 성능 관리
데이터베이스의 성능을 최적화하기 위한 다양한 기술들이 적용됩니다. 주로 다음과 같은 요소들을 통해 데이터베이스 성능을 관리합니다.
5-1. 인덱스 튜닝
- 인덱스의 생성과 관리: 자주 사용되는 열에 인덱스를 추가하여 조회 성능을 높입니다.
- 인덱스 재구성: 인덱스를 재구성하는 방향으로 데이터베이스의 성능을 높일 수 있습니다.
'이유's Programming > DBMS' 카테고리의 다른 글
인덱스.. 그래서 어떻게 해야 효율적이야? (필터조건, 액세스 조건) (0) | 2024.10.16 |
---|---|
인덱스 스캔의 효율적인 방식...? (0) | 2024.10.16 |
[ 3 -5 ] 계층형 질의 (0) | 2021.04.27 |
[ 3- 4] 그룹 소계함수 - 보고서 작성을 훨씬 쉽고 매끄럽게! group by 와 order by 사용 / rollup 과 order by 함수 (0) | 2021.04.22 |
다중 행 서브 쿼리 (0) | 2021.04.19 |