PostgreSQL은 write 작업에 대해 어떻게 내부적으로 처리할까?
WAL 파일은 무엇이고, 언제 데이터 파일로 반영될까?
위와 같은 궁금즘에서 시작된 질문에 대한 답을 풀어나가기 위해 PostgreSQL의 내부 동작을 단계적으로 살펴보았다.
1. Write 작업의 기본 흐름
- 클라이언트의 데이터 변경 요청
- INSERT, UPDATE, DELETE 등 데이터 변경 쿼리를 실행하면 PostgreSQL은 데이터를 처리할 준비를 합니다.
- 데이터가 shared_buffer에 기록
- PostgreSQL은 데이터를 바로 디스크에 쓰지 않고 shared_buffer(메모리 공간)에 우선 기록합니다. 이는 디스크 I/O를 줄이고 성능을 향상시키기 위한 메커니즘입니다.
- WAL에 변경 내용 기록
- 트랜잭션 Commit
- 클라이언트가 COMMIT을 실행하면 PostgreSQL은 WAL에 기록된 내용을 디스크에 플러시(flush)하여 트랜잭션이 안전하게 완료되었음을 보장합니다.
- 데이터 파일 반영 (Checkpoint)
- PostgreSQL은 특정 시점에 Checkpoint를 실행하여 shared_buffer의 내용을 실제 디스크의 데이터 파일에 기록합니다.