SQL 파싱 / 실행 계획

원지렁·2025년 1월 30일
0

DB 이야기

목록 보기
3/3

1. SQL 파싱

1-1. SQL 파싱이란?

1-2. 파싱의 종류

  • 소프트 파싱(Soft Parsing) : sql 구문이 문법적으로 맞는지 기본적인 체크 과정
  • 하드 파싱(Hard Parsing) : 실행 계획(풀스캔 할 지, 인덱스 태울 건지 등 ...)

2. 실행계획

2-1. 실행계획의 종류

  • Execution Plan : 실행 전 계획
  • Trace : 실제 실행 과정

2-2. INSERT INTO 과정 살펴보기

1. SQL 구문 분석 (Parsing)

사용자가 실행한 INSERT INTO 구문 분석(SQL Parsing)

  • 구문의 문법이 올바른지 검사
  • 테이블과 컬럼이 존재하는지 확인

2. 쿼리 최적화 (Optimization)

SQL Optimizer가 INSERT를 최적화

  • 인덱스가 적용되어 있는 경우, 어떤 방식으로 데이터를 입력할지 결정
  • 병렬 처리(Parallel Execution)가 가능한지 분석

3. 데이터 잠금 (Locking)

INSERT INTO를 실행하기 전, 데이터 무결성을 보장하기 위해 해당 테이블 또는 행(Row)에 대해 적절한 잠금(Lock) 설정

  • Table-Level Lock: 테이블 전체를 잠그는 방식
  • Row-Level Lock: 특정 행만 잠그는 방식

4. 데이터 저장 및 버퍼링 (Buffering)

데이터를 저장하기 전 버퍼 풀(Buffer Pool) 또는 트랜잭션 로그(Transaction Log)에 기록

  • 실제 테이블에 쓰이기 전에 Redo Log (변경 로그)Undo Log (롤백 로그)에 먼저 저장
    - Redo Log: 장애 발생 시 복구를 위해 기록되는 로그
    - Undo Log: 트랜잭션 롤백을 위해 이전 데이터를 기록하는 로그
  • 데이터를 버퍼 풀에 임시로 저장하여 디스크 쓰기 부하를 줄임

5. 트랜잭션 관리 (Transaction Management)

INSERT INTO 문이 실행될 때, 트랜잭션이 활성화되어 있다면 데이터는 즉시 반영되지 않고, 트랜잭션 로그에 기록

  • COMMIT을 실행하면 데이터가 확정(Commit)되고, ROLLBACK을 실행하면 데이터가 취소됨
  • AUTO_COMMIT=ON 상태라면 INSERT INTO가 실행되자마자 반영

6. 인덱스 업데이트 (Index Update)

테이블에 인덱스가 있는 경우, INSERT된 데이터가 인덱스 구조에도 반영됨

  • B-Tree 인덱스 또는 Hash 인덱스를 업데이트하여 새로운 데이터가 검색될 수 있도록 만듬
  • 다중 인덱스가 있는 경우, 각 인덱스에 맞춰 업데이트가 발생

7. 데이터 저장 (Disk Write)

실제 데이터는 메모리와 캐시를 거친 후 디스크(스토리지)에 저장됨

  • 일반적으로 INSERT된 데이터는 바로 디스크에 저장되지 않고, 특정 시점(Checkpoint)이 되거나 버퍼 풀 공간이 부족할 때 디스크에 기록됨

8. 변경 사항 반영 및 로그 정리

COMMIT이 실행되면, 변경 사항이 영구적으로 반영됨

  • INSERT INTO를 실행한 후, 일정 시간이 지나면 Redo Log 및 Undo Log가 정리됨
  • 데이터가 디스크에 저장되면 CheckPoint가 발생하여 로그를 삭제하고 시스템 리소스를 관리함

9. 트리거(Trigger) 및 이벤트 처리

테이블에 트리거(Trigger)가 설정된 경우, INSERT INTO 실행 후 자동으로 추가 작업이 실행될 수 있음

  • AFTER INSERT 트리거가 설정된 경우, 새로운 데이터가 입력된 후 다른 테이블을 업데이트하거나 추가 연산을 수행할 수 있음

10. 결과 반환

profile
새싹 개발자 지렁이의 벨로그입니다.

0개의 댓글