피드로 돌아가기
Dev.toDatabase
원문 읽기
INSERT 호출 시 데이터베이스 내부에서 네 단계의 처리가 순차적으로 실행되는 과정
What Actually Happens When You Call INSERT?
AI 요약
Context
대부분의 엔지니어는 INSERT 호출 시 단순히 데이터만 기록된다고 인식한다. 실제 내부에서는 WAL 기록, 인덱스 갱신, 디스크 동기화 여부 결정, 최종 저장 구조 배치가 순차적으로 발생한다.
Technical Solution
- PostgreSQL → WAL(Write-Ahead Log)에 순차 기록 후 shared_buffers 메모리 수정, heap file에 8KB 페이지 단위 저장
- MongoDB → WiredTiger가 journal에 기록, 문서가 B-Tree 내부에 직접 저장 (별도 heap 없음)
- Cassandra → CommitLog 기록 후 Memtable에 정렬 저장, immutable SSTable로 flush
- orders 테이블에 order_id, user_id, created_at 인덱스 3개 존재 시 INSERT 1건에 약 4회의 쓰기 작업 발생
- B+Tree/B-Tree는 읽기 최적화, LSM Tree는 쓰기 최적화 구조로 설계 철학이 상이
Impact
- Cassandra는 LSM Tree 특성상 쓰기 성능이 PostgreSQL 대비 우수하나, compaction 실행 전 읽기 성능은 낮음
- 인덱스 추가 시write path 비용이 비선형적으로 증가
Key Takeaway
저장소 엔진의 데이터 구조 선택(B+Tree, B-Tree, LSM Tree)이 읽기/쓰기 성능 특성을 근본적으로 결정하며, 이 선택이 p99 지연 시간과 컴팩션 동작에 직접적 영향을 미친다.
실천 포인트
다중 인덱스가 존재하는 테이블에서 INSERT 성능 저하 발생 시, 불필요한 인덱스 제거 검토 및 쓰기 워크로드에 LSM Tree 기반 엔진 활용을 고려해야 한다.