- PostgreSQL은 1996년 7월 8일 캘리포니아 대학교 버클리에서 발명된 open source의 object-relational database management system(ORDBMS) 입니다.
- PostgreSQL 아키텍처는 클라이언트-서버 모델을 사용하여 최종 사용자로부터 요청을 받아 처리한 후 클라이언트로 되돌립니다.
- PostgreSQL 아키텍처는 각 클라이언트 연결 요청에 대해 새로운 프로세스가 시작되고 클라이언트 요청이 PostgreSQL Server 프로세스에 의해 처리되는 프로세스 사용자별 클라이언트-서버 모델입니다.

1. Postmaster
- Postmaster는 PostgreSQL 아키텍처에서 Supervisor 프로세스로 작동하며, PostgreSQL이 시작된 후 가장 먼저 시작되는 프로세스입니다.
- 리스너(Listener) 로서 동작하며, 클라이언트로부터 들어오는 요청에 대해 인증(Authentication)과 권한 부여(Authorization) 를 수행하고, 각 클라이언트 연결마다 Postgres라고 불리는 새로운 프로세스를 할당합니다.
- 또한 Postmaster는 하위 프로세스들을 지속적으로 모니터링하며, 어떤 프로세스가 비정상적으로 종료되었을 경우 이를 재시작하는 역할도 담당한다.
2. Shared Memory Segments of PostgreSQL
- 공유 메모리 세그먼트는 트랜잭션 및 유지 관리 활동을 위해 예약된 메모리의 버퍼 캐시입니다. 서로 다른 작업을 수행하기 위해 할당된 서로 다른 공유 메모리 세그먼트가 있습니다. 다음은 주요 공유 메모리 세그먼트입니다.
Shared Buffer
- Shared Buffer는 PostgreSQL 인스턴스에서 사용되는 메모리 영역으로, 사용자는 데이터 파일에 직접 접근할 수 없기 때문에
모든 INSERT, UPDATE, DELETE, SELECT 작업은 이 Shared Buffer를 통해 수행된다. - Shared Buffer에서 수정되거나 변경된 데이터를 Dirty Data(더티 데이터) 라고 하며, 이 데이터는 writer 프로세스라고 불리는 백그라운드 프로세스를 통해 물리적인 데이터 파일에 기록된다.
- Shared Buffer의 크기 및 특성은 postgresql.conf 파일에 존재하는 Shared_buffers 파라미터에 의해 제어된다.
Wal Buffer
- WAL Buffer는 Write-Ahead Log Buffer라고도 불리며, 트랜잭션 로그 버퍼로서 변경된 데이터의 메타데이터 정보를 저장한다. 이 정보는 데이터베이스 복구 작업 시 데이터를 재구성하는 데 사용된다.
- 트랜잭션 로그 버퍼에 저장된 내용은 WAL writer라고 불리는 백그라운드 프로세스에 의해 물리적인 파일인 WAL 세그먼트(WAL Segments) 또는 체크포인트 세그먼트(Checkpoint Segments) 에 기록된다.
- WAL Buffer의 크기 및 동작 특성은 wal_buffers 파라미터에 의해 관리된다.
CLOG Buffer
- PostgreSQL CLOB 버퍼는 모든 트랜잭션의 상태를 저장하기 위해 메인 메모리(RAM)에 할당된 영역인 커밋 로그입니다. 이는 트랜잭션이 완료되었는지 여부를 보여줍니다.
- 이 버퍼 영역은 특정 매개변수가 없기 때문에 데이터베이스 엔진에 의해 자동으로 관리되며, 그리고 PostgreSQL 데이터베이스의 모든 백그라운드 서버와 사용자가 공유합니다.
Work Memory
- PostgreSQL Work Memory 영역은 정렬 (ORDER BY, DISTINCT, 병합 조인 포함)이나 해시 테이블 연산( 해시 조인, 해시 기반 집계 포함) 또는 IN 절이 데이터베이스 SQL 쿼리에 포함될 때 사용됩니다.
- 작업 메모리는 `work_mem` 매개변수로 제어됩니다. 복잡한 SQL 쿼리에는 여러 개의 정렬 및 해시 연산이 포함될 수 있으며, 각 연산마다 RAM에 메모리가 할당되므로 이 메모리 영역에 큰 값을 할당하지 않는 것이 좋습니다. 그렇지 않으면 모든 RAM 공간이 소진되어 다른 프로세스에 문제를 일으킬 수 있습니다.
Maintenance Work Memory
- PostgreSQL Maintenance Work Memory는 인덱스 생성, 인덱스 추가, 외부 키 추가 등과 같은 유지보수 작업을 수행할 때 사용됩니다. 이 영역은 maintenance_work_mem Parameter에 의해 제어됩니다.
Temp Buffers
- PostgreSQL Temp Buffers 영역은 대규모 정렬 및 해싱 작업 중에 임시 테이블에 액세스할 때 사용됩니다. 이러한 버퍼는 사용자 세션에 따라 다릅니다.
3. Background Processes of PostgreSQL
- PostgreSQL 백그라운드 프로세스는 PostgreSQL 데이터베이스의 중요한 구성 요소입니다.
- 이러한 프로세스는 메모리와 디스크 간의 일관성을 유지하는 데 사용되며, 이로 인해 PostgreSQL 데이터베이스 기능이 제대로 작동합니다.
- 각 PostgreSQL 백그라운드 프로세스는 고유한 역할을 수행합니다.
- 백그라운드 프로세스 목록
- Background Writer, Checkpointer, Autovacuum Launcher, WAL Writer, Statistics Collector, Logging Collector, Archiver
Background Writer
- PostgreSQL 백그라운드 라이터는 PostgreSQL 인스턴스가 시작될 때 Postmaster에 의해 시작됩니다.
- 백그라운드 라이터는 데이터 파일에 새로운 또는 수정된 공유 버퍼라고도 불리는 더티 버퍼를 작성하여 충분한 버퍼 공간을 사용할 수 있도록 하는 데 사용됩니다.
- PostgreSQL 백그라운드 라이터는 다음 세 가지 Parameter를 따라 공유 버퍼에서 데이터 파일로 더티 버퍼를 작성합니다.
- bgwriter_delay (200ms by default, 10ms – 10s possible)
- 이 Parameter는 두 번의 성공적인 실행 대기 시간을 정의하는 데 사용됩니다.
- bgwriter_lru_maxpages (100 pages by default, 0 – 1000 possible)
- 이 Parameter는 각 반복에서 데이터 파일에 쓸 수 있는 최대 버퍼 수를 정의하는 데 사용됩니다.
- bgwriter_lru_multiplier (2.0 by default, 0-10.0 possible)
- 이 Parameter는 들어오는 더티 페이지에 대해 정리할 페이지 수를 정의하는 데 사용되며, 이는 마지막 지연 기간의 수를 기준으로 합니다. 예를 들어, 값이 2로 설정되어 있고 들어오는 페이지가 10이므로 이 경우에는 도달하지 않는 버퍼가 20개가 아닌 한 더티 버퍼가 정리됩니다.
- bgwriter_delay (200ms by default, 10ms – 10s possible)
Checkpointer
반응형