인성장

[PostgreSQL] Process 구조 (3) 본문

PostgreSQL/Architecture

[PostgreSQL] Process 구조 (3)

인성장 2023. 11. 28. 11:22
PostgreSQL Process 구조

 

PostgreSQL Process 예시

 

 

 

PostgreSQL 필수 프로세스

 

postmaster

postmaster 프로세스는 위 PostgreSQL Process 조회 시 가장 상단에 위치한 프로세스(PID 1798450)입니다. postmaster 프로세스의 특징은 다음과 같습니다.

㉮ PostgreSQL 서버를 기동/중지하기 위한 필수 프로세스이자 가장 먼저 시작되는 프로세스입니다.

㉯ postmaster 프로세스는 Shared Memory 영역을 할당하며 다양한 백그라운드 프로세스를 시작합니다.

* Shared Memory Oracle SGA영역과 유사합니다.

㉰ postmaster 프로세스는 클라이언트의 연결 요청을 대기하였다가, 클라이언트로부터 연결 요청이 생기면 postmaster는 클라이언트를 위한 postgres 라는 프로세스를 생성해줍니다.

㉱ 가장 상위 프로세스로서 하위 프로세스들의 비정상 작동유무를 체크하며, 문제 발생시 재기동하는 역할을 수행합니다.

 

postgres [backend process]

클라이언트가 요청한 SQL 및 Command를 처리하는 프로세스로 클라이언트와의 연결이 끊어지면 종료됩니다. postmaster 프로세스에 의해 시작되며 클라이언트와 1:1 관계입니다. max_connections 파라미터에 설정된 값(Default : 100)만큼 클라이언트가 동시에 연결될 수 있습니다.

* postgres 프로세스는 Local Memory에 할당되며 Oracle PGA영역과 유사합니다.

 

background writer

이 프로세스는 Oracle의 DBWR 프로세스와 유사합니다. Shared Buffer의 Dirty Block을 디스크에 기록하는 프로세스입니다. background writer는 bgwriter_delay (Default : 200ms) 주기로 bgwriter_lru_maxpages(Default : 100 Pages)를 디스크에 기록합니다. 주기적으로 bg writer가 Dirty Block을 디스크에 기록해두면, Checkpoint 발생 시 디스크에 써내려야하는 Dirty Block의 양을 줄일 수 있어 안정적인 I/O를 유지할 수 있습니다.

 

checkpointer

checkpoint를 수행하는 프로세스로 PostgreSQL 9.2버전부터 추가되었습니다. PostgreSQL 9.1이하 버전에서는 background writer가 checkpoint를 수행하였으나, 9.2버전부터 checkpointer 프로세스가 추가되면서 해당 기능이 background writer로부터 분리되었습니다.

* 9.2버전부터 background writer는 checkpoint를 수행하지 않음.

 

     checkpoint의 발생 조건은 아래와 같습니다.

     ㉮ 이전 checkpoint 발생 이후 checkpoint_timeout(Default : 5)의 시간이 지난 경우

     ㉯ WAL 파일의 크기가 min_wal_size(Default : 80MB)를 초과하는 경우

     ㉰ smart 또는 fast 모드로 Database Server를 종료하는 경우

     ㉱ pg_basebackup 또는 pg_start_backup으로 백업을 시작하는 경우

     ㉲ super 유저에 의해 강제로 checkpoint command를 실행한 경우

 

walwriter

walwriter는 WAL Buffer를 주기적으로 확인하여 기록되지 않은 모든 트랜잭션들을 WAL File(디스크)에 기록하는 프로세스입니다. Commit 혹은 WAL Buffer의 공간이 모두 다 찼을 때 WAL File에 내려 쓰며, WAL File은 database 복구에 사용됩니다.

 

 

 

PostgreSQL 선택 프로세스

 

archiver

Oracle의 ARCH 프로세스와 마찬가지로 아카이빙(Archiving)을 수행하는 프로세스입니다.

Archiving은 WAL segment가 전환될 때 WAL File을 Archive 영역으로 복사하는 기능이며, 복사된 WAL File을 Archive File이라고 합니다. Archive File 이 저장될 경로는 archive_command 파라미터로 설정하며, 해당 Archive File은 PITR(Point-In-Time Recovery : 시점복구) 즉, database를 원하는 특정 시점의 특정 상태로 복원하는데 사용됩니다. Archive File를 사용하는 이유는 PostgreSQL에서 WAL File은 checkpoint 발생 시 디스크에 데이터를 전부 내려쓰게되면 이때까지 WAL File에 저장되어있는 트랜잭션들은 전부 삭제됩니다. 이렇게되면 예전에 작업한 내용을 잃게되어, 예전에 작업한 내용의 데이터 손실이 발생하면 복구하기 어렵습니다. 그렇기에 Archive File을 사용하는 것입니다.

 

stats Collector

PostgreSQL의 database 통계 정보를 수집하는 프로세스입니다. Session 정보(pg_stat_activity) 및 테이블 통계정보(pg_stat_all_tables)와 같은 DBMS 사용 통계를 수집하여 pg_catalog에 정보를 업데이트합니다. 옵티마이저는 최적의 쿼리 실행 계획을 생성하기 위해 해당 정보를 참조합니다. 서버가 종료되어도 통계 정보의 복사본이 pg_stat 하위 디렉토리에 저장되므로 서버를 다시 시작해도 통계가 유지됩니다.

 

autovacuum launcher

autovacuum을 수행하는 프로세스입니다. autovacuum workers라는 여러 프로세스로 구성된 데몬 프로세스이며, 이 프로세스로 인해 vacuum 실행이 자동화 됩니다. autovacuum launcher 프로세스는 autovacuum workers 프로세스를 주기적으로 호출하여 vacuum 및 vacuum analyze를 실행합니다.

autovacuum_naptime 파라미터에 설정되어 있는 값(Default : 1분)마다 autovacuum launcher 프로세스가 데이터베이스를 확인하여 autovacuum_max_workers (Default : 3)의 autovacuum workers 프로세스를 호출합니다.

 

logger

오류메세지를 로그파일에 기록하는 프로세스입니다. Utility process, Backend process 및 Postmaster 활동에 대한 정보를 기록하며 모든 process 정보는 $PGDATA/pg_log 아래에 저장됩니다. postgresql.conf에서 파라미터 설정을 해줘야지만 사용가능합니다.

 

logical replication launcher

PostgreSQL HA 구성 시 필요한 프로세스로 primary Server의 WAL 내용을 standby로 전송하여 반영하는 SQL command를 전달하는 방식을 사용하는 streaming replication 구성에서 사용됩니다.

 

참조사이트

https://blog.ex-em.com/1645

 

DB 인사이드 | PostgreSQL Architecture - 1. Process, Memory

엑셈은 창사 이래 꾸준히 축적해온 IT 시스템 성능 관리 경험과 연구 역량을 토대로 전문적이고 차별화된 컨설팅 서비스를 제공하고 있습니다. DBMS 전문가 엑셈에서 새롭게 선보이는 ‘DB인사이

blog.ex-em.com

 

'PostgreSQL > Architecture' 카테고리의 다른 글

[PostgreSQL] SQL 처리 과정 (6)  (2) 2023.11.29
[PostgreSQL] 동작 원리 (5)  (2) 2023.11.28
[PostgreSQL] Memory 구조 (4)  (0) 2023.11.28
[PostgreSQL] Data Directory 구조 (2)  (0) 2023.11.28
[PostgreSQL] Database 구조 (1)  (0) 2023.11.24