DBA의 길

Postgres - PG Architecture and Process

모모토 2024. 10. 13. 16:23
반응형

한달전 회사에서 postgres의 구조에 대해서 살펴보고 간단하게 설명해보는 시간을 가졌다.

 

알아도 아는 게 아닌것같은 묘한 IT 세계 정답은 기록뿐 그동안의 공부한것들을 다시한번 가벼운 마음으로 회상해보도록 하자 

 

아래의 사진은 기존에 인터넷에서 돌아다니는 사진을 가져와봤는데

 

 

 

흠 마음에 들지않아 내가 임의로 그려보았다.

 

PG Architecture

 

postmaster 는 client의 요청을 받을때마다 자신을 pork하여 postgres daemon을 생성한다. 이 daemon의 백그라운드 프로세스들(BG writer , Wal Writer , Check pointer , Archiver , Vacuum launcher , Logger ... ETC) 

 

1. BG Writer (Back Ground Writer) - 버퍼 캐시의 더티 페이지(dirty page)를 디스크에 주기적으로 기록하는 역할을 하며 이를 통해 성능을 최적화하고, 버퍼 캐시가 꽉 차지 않도록 관리한다.

 

2. Wal Writer - 변경된 데이터를 바로 데이터 파일에 기록하는 대신, 우선적으로 WAL (Write-Ahead Logging)에 기록하는 작업을 담당하며 이 과정은 데이터 무결성을 보장하며, 시스템 충돌 시 복구할 수 있게 도와준다.

 

3. Check pointer - 특정 체크포인트 시점마다, 변경된 데이터가 디스크에 안전하게 기록되었는지 확인하는 작업을 담당하며 이는 데이터베이스 재시작 시 복구 시간을 단축하는 중요한 역할을 합니다.

 

4. Archiver - WAL 파일이 다 채워지면, 이를 보관(아카이빙)하는 작업을 수행하며 이 과정은 주로 WAL 파일을 백업하거나 장애 발생 시 복구를 위해 사용된다.

 

5. Vacuum Launcher - VACUUM 프로세스를 주기적으로 실행하여, 불필요한 데이터(예: 삭제된 레코드)를 제거하고, 데이터베이스 테이블의 성능을 유지 관리하는 역할을 한다.

 

6. Autovacuum Worker - Vacuum launcher 에 의하여 vacuum이 필요하다고 판단되는 테이블에 대하여 autuvacuum을 돌리는 역할을 한다. 다시말하자면 Vacuum LauncherAutovacuum 작업을 관리하고 스케줄링하는 프로세스

 

(위에서 굵은 글씨는 나중에 다시 정리 할 예정이다.)

 

해당 아키텍쳐에 대해서 다시 한번 설명해보자면

 

PostgreSQL의 아키텍처는 여러 중요한 구성 요소를 포함하여 데이터 처리와 유지 관리를 최적화한다. 클라이언트가 데이터베이스에 연결하여 SQL 요청을 보내면, 이를 처음 처리하는 것은 Postmaster이다. Postmaster는 클라이언트의 요청에 따라 새로운 Postgres backend 프로세스를 생성하여 쿼리를 처리하게 한다. 이 백엔드 프로세스는 요청된 데이터를 공유 메모리에서 읽고, 데이터의 변경 사항을 처리한다. 

PostgreSQL의 데이터 처리는 주로 Shared Memory(공유 메모리)를 통해 이루어진다. 이 메모리에는 Shared Buffer, WAL Buffer, Clog Buffer와 같은 여러 중요한 버퍼들이 존재한다. Shared Buffer는 디스크에서 읽어온 데이터와 변경된 데이터를 캐싱하여 성능을 최적화한다. 클라이언트가 요청한 데이터는 이 버퍼에서 처리되고, 변경된 데이터는 여기에 기록된 후 비동기적으로 디스크로 기록된다. WAL(Write-Ahead Log) Buffer는 변경 사항을 먼저 기록하는 곳이며, 나중에 WAL Writer가 이 데이터를 WAL 파일로 플러시한다. Clog Buffer는 트랜잭션의 커밋 및 롤백 상태를 관리하는 버퍼로, 트랜잭션의 일관성을 유지하는 데 중요한 역할을 한다.

PostgreSQL의 백그라운드 프로세스들은 시스템의 성능과 안정성을 유지하는 데 핵심적인 역할을 한다. BG Writer는 변경된 데이터를 주기적으로 디스크에 기록하여 메모리 관리와 성능을 최적화한다. WAL Writer는 비동기적으로 WAL Buffer에 기록된 데이터를 WAL 파일로 주기적으로 플러시하여 장애 복구에 대비한다. Checkpointer는 주기적으로 체크포인트를 생성하여 데이터의 일관성을 유지하며, 이 시점에 메모리의 변경 사항이 디스크에 반영된다. Archiver는 로그 파일이 꽉 차면 이를 아카이브 디렉토리로 이동시켜, 복구 및 백업을 위한 자료로 보존한다.

또한, Vacuum Launcher는 자동으로 테이블을 정리하는 Autovacuum Worker를 트리거하는 역할을 한다. Autovacuum 작업은 불필요한 데이터와 공간을 제거하여 테이블을 최적화하며, 쿼리 성능을 유지한다. Logger는 시스템의 이벤트와 오류를 기록하여 문제 발생 시 이를 분석할 수 있게 도와준다.

PostgreSQL의 데이터는 OS Cache를 거쳐 디스크로 기록된다. Data File에는 테이블 및 인덱스 데이터가 저장되고, WAL File에는 트랜잭션 로그가 기록된다. 아카이브된 로그는 Archive File로 저장되며, 이는 장애 복구 시 중요한 역할을 한다. 이러한 전체적인 아키텍처 덕분에 PostgreSQL은 클라이언트 요청을 효율적으로 처리할 뿐만 아니라, 데이터의 무결성과 복구 가능성을 보장한다.