공부, 기록

[postgreSQL] 아키텍처와 Shared Buffer 본문

공부/DATABASE

[postgreSQL] 아키텍처와 Shared Buffer

무는빼주세요 2024. 7. 6. 17:28

해당 글은 postgreSQL 9.6 성능이야기 책을 읽고 이해한 내용을 정리하였습니다.

 

아키텍처

postgreSQL은 기본적으로 멀티 프로세스로 수행되는 구조로 다음과 같다.

 

각 구조별 역할은 다음과 같다.

  • postmaster 프로세스
    PostgreSQL을 기동할 때 가장 먼저 시작되는 프로세스로 복구 작업, 메모리 초기화, 백그라운드 프로세스 구동 작업 등을 수행하며 클라이언트의 연결 요청을 받아 Backend 프로세스를 생성 및 할당한다.

  • postgres (backend) 프로세스
    max_connections 파라미터로 수를 조정하며 클라이언트의 쿼리 요청을 수행한 후 결과를 리턴해준다. 즉 쿼리를 수행하기 위한 메모리 구조를 필요로하며 이를 로컬 메모리라 칭한다. 로컬 메모리에는 work_mem 파라미터, maintenance_work_mem 파라미터, temp_buffers 파라미터 등이 있다.

  • background 프로세스
    postgreSQL을 동작시키는데 필요한 주요 프로세스들이 포함되어 있다.
    logger - 에러 메시지를 로그 파일에 기록.
    checkpointer - 체크포인트 발생 시 더티 버퍼를 파일에 기록.
    writer - 주기적으로 더티 버퍼를 파일에 기록.
    wal writer - WAL 버퍼를 WAL 파일에 기록
    autovaccum launcher - Vaccum이 필요한 시점에 autovacuum worker를 fork
    archiver - 아카이브 모드로 설정된 경우 WAL 파일을 지정된 경로로 복사.
    stats collector - 세션 수행 정보와 테이블 통계 정보 등을 수집.

  • 공유 메모리
    WAL 버퍼 : WAL LOG 를 기록하는 영역. WAL 로그는 복제, 복구, 백업 및 복원 등에 사용된다
    Shared 버퍼 : DISK I/O를 줄이기 위한 메모리 영역
    CLOG 버퍼 : 트랜잭션의 메타 정보를 가지는 버퍼. 어떤 트랜잭션이 완료되고 실행중인지 등을 기록한다. 

데이터 파일

각각의 개체는 oid 값으로 디렉토리에 저장이되어 oid 값을 기준으로 찾아야한다.

테이블은 heap 형태로 저장이되고 HEAP 안에는 Block(Page)으로 구성되어 있고 Block 안에는 Tuple이 존재한다.

또한 테이블 스페이스를 지정할 수 있으며 디렉토리에 맵핑을 할 수 있는데 이를 통해 테이블별 디렉토리를 나눠서 관리할 수 있다. 테이블 스페이스를 생성하면 내부적으로 pg는 심볼릭 링크를 생성한다.