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. 결과 반환