티스토리 뷰

데이터베이스는 **선언형 프로그래밍**으로 동작한다. 사용자는 SQL을 전송하고 결과를 받지만, 그 사이에는 여러 내부 절차가 실행된다. 아래 예시를 기준으로 단 한줄의 SQL이 어떻게 처리되는지 샅샅이 살펴보자.

SELECT name, age FROM users WHERE id = 1;

DBMS 내부 구성

데이터베이스에서 SQL을 처리하는 흐름을 간단하게 도식화한 형태인데 실제는 이것보다 훨~씬 복잡하다. 기본적으로 이런 과정을 거쳐 SQL이 실행된다는 정도로만 이해하면 될 것 같다.

 

구성 요소 (엔진) 역할
SQL 파서(Parser) SQL 문장을 문법적으로 분석, 참조 객체 확인, 권한 체크
옵티마이저(Optimizer) 통계 정보를 활용해 최적의 실행 계획(Execution Plan) 수립
실행 엔진(Executor) 옵티마이저가 만든 계획을 실제로 실행
스토리지 엔진(Storage Engine) 데이터를 저장하고 읽는 I/O 작업 수행
버퍼 매니저(Buffer Manager) 캐시 메모리(Buffer Pool) 관리, 필요 시 디스크에서 데이터 로드
트랜잭션 매니저 트랜잭션 시작/커밋/롤백, Isolation 보장, 동시성 제어
로그 엔진 WAL[1] 등 변경 사항 기록, 장애 시 복구 지원
인덱스 엔진 인덱스 구조(B+ Tree 등) 생성 및 탐색
통계 수집기(Statistics Collector) 테이블/인덱스 통계 수집 → 카탈로그[2] 저장, 옵티마이저가 참조

 

1. SQL 파싱 및 최적화

  • SQL 문장을 파싱한다. 문법 검증 및 SQL 분석을 수행한다.
  • 참조한 테이블이나 컬럼이 존재하는지 확인한다.
  • 사용자가 참조한 테이블이나 인덱스 등에 권한이 있는지 확인한다. 없으면 에러를 반환한다.

2. 실행 계획 수립 (Optimizer)

  • 옵티마이저가 통계 정보를 활용해 다양한 실행 계획을 세운다.
  • 실행 계획 중 비용이 가장 낮은 실행 계획을 선택한다.

3. 실행 엔진 동작

  • 실행 엔진은 옵티마이저가 만든 실행 계획을 실제로 수행하는 주체이다.
  • 이 과정에서 트랜잭션 매니저가 트랜잭션을 시작한다.
  • Isolation 레벨에 따라 다른 세션과의 격리성을 보장한다.
  • 필요한 경우 인덱스 엔진을 통해 인덱스를 탐색한다.

4. 스토리지 엔진 (Storage Engine)

  • 요청받은 데이터 페이지를 버퍼 매니저에게 요청한다.

5. 버퍼 매니저 (Buffer Manager)

  • 버퍼 풀(Cache) 에 데이터가 있는지 확인한다.
  • 있으면 바로 반환하고 없으면 디스크에서 데이터를 읽어 버퍼에 적재한 후 스토리지 엔진에게 반환한다.

6. 로그 기록 (Write-Ahead Logging)

  • 순수 SELECT 하는 경우에는 로그를 기록하지 않는다.
  • INSERT/UPDATE/DELETE (쓰기): 반드시 변경 내용을 WAL 로그에 기록
  • WAL이란 것은 반드시 데이터를 디스크에 쓰기 전에 로그가 먼저 기록되어야 함을 의미한다.
  • 장애시 복구할 수 있게 먼저 로그를 남기는 것이다.

[1] : Write-Ahead Logging의 약자로 데이터를 디스크에 쓰기 전에 먼저 변경 내용을 로그에 기록한다는 의미

[2] : DMBS 내부의 메타데이터를 저장하는 특별한 데이터 집합

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2026/05   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함