본문 바로가기

PostgreSQL & EPAS

PostgreSQL & EPAS System Architecture - 1. Process

글을 작성하기 전에

최근(22.04) Oracle, PostgreSQL, MySQL core Architecture의 출판사인 Exem 사에서 PG Architecture 에 대한 글이 올라왔는데, 매우 정리가 잘되어 있어 이 포스트는 간단한 내용 및 버전 별 변동 사항을 중점으로 정리할 것입니다.

internal 구조 기반 아키텍처를 상세하게 알고 싶으시다면  https://exem.tistory.com/1645?category=1010730  링크를 참고하시길 추천드립니다.

 

PostgreSQL & EPAS Architecture

PostgreSQL & EPAS는 동일한 엔진 아키텍처를 사용하고 있음, 오라클 아키텍처와 유사성이 있으나 EDB PAS를 운영하기 위해서는 PostgreSQL의 아키텍처를 알아야함

 

Overall

System Architecture

PostgreSQL의 장점중의 하나는 다양한 응용프로그램 드라이버 지원인데, 사용자가 쿼리를 요청하기 위해서는 JDBC, ODBC 등과 같은 다양한 API를 통해 접근이 가능하다. 최초 커넥션 요청이 들어오면 Postmaster가 인증 절차를 거쳐 각 요청마다 백엔드 서버 프로세스를 생성하고, 그 생성된 프로세스에서 내부 로직을 통해 쿼리를 처리하는 과정을 거치게 된다.  백엔드 서버 프로세스는 DB 내 설정 된 max_connections 설정까지 연결 가능하며 실제 수행이 안 될때에도 idle 상태를 유지하는 경우도 많음

 

 

Process

postgresql 14 process list

postgres(postmaster) 프로세스

- PostgreSQL 서버의 기동/중지를 위한 필수프로세스 ( Oracle의 listener + pmon + smon역할)

- 기동 시 공유 메모리 영역을 할당하며, 다양한 서버 프로세스의 최상위프로세스 역할을 함

- 일부 백그라운드 프로세스가 강제 종료 될시 postmaster 가 기동되어 있다면 자동 구동시킴

- 엔진 실행파일 내 postmaster는 postgres의 심볼릭링크로 구성되어 있으며 동일 프로세스로 봐도 무방

- pg_ctl start 명령 수행 시 가장 먼저 구동하는 프로세스

 

 

logger 프로세스

- 이름 그대로 로그를 저장하는 프로세스

- DB내 파라미터 인 logging_collector가 on 되어 있어야 기동되는 프로세스 (in postgresql.conf)

- PostgreSQL 은 다른 DBMS 비해 로그관련 설정을 자유롭게 할 수 있는 장점이 있다.

 (log 관련 설정을 확인하기 위해선 select name, setting, short_desc from pg_settings where name like '%log%'  사용)

- 보통 $PGDATA/log or $PGDATA/pg_log에 저장

 (~ 9.6 버전까지는 pg_log , 10이후부터는 log 디렉토리)

 

 

checkpointer 프로세스

- 체크포인트 발생 시 Dirty Page를 Disk상에 Flush 하는 프로세스

- 그 외에 체크포인트 레코드를 파일에 기록하는 역할 도 수행함  

- 체크포인트가 발생하는 경우는 여러가지 조건이 있지만 Default로 5분간 체크포인트 작업이 수행되지 않으면 수행됨

 

 

background writer 프로세스

- checkpointer 프로세스의 부하를 줄이기 위해 Dirty Page를 Disk에 기록하는 프로세스

- checkpointer 와 유사한 방식의 작업이 수행되나 200ms 단위로 누구도 사용하지 않는 dirty page를 기록

-  8.3버전까지 background Writer , 8.4 ~ 11버전까지는 writer 프로세스로 명명되어 있었지만, 11버전 이후로 다시 background Writer로 변경

 

 

walwriter 프로세스

- 대부분의 관계형 데이터베이스에서는 ACID(그중 A,D)를 위해 writer ahead log 기법을 사용한다. 그를 위해 사용되는 프로세스

- Checkpoint 프로세스는 Checkpoint 명령이 수행될 때 동작하지만 walwriter 프로세스는 commit 이 일어 날때나, walbuffer가 가득 찰 때 두가지 경우에 디스크로 쓴다.

- 10 버전까지는 wal writer로 명명되었으나, 11버전 이후 walwriter로 변경

 

 

autovacuum 프로세스

- PostgreSQL MVCC를 위해 필요한 Vacuum을 자동으로 수행해주는 프로세스

- %autovacuum% 검색을 통해 발생 조건 및 기타 설정을 확인 할 수 있음 

- autovacuum으로 Bloating, Age 이슈가 개선이 어려운 서비스 시 수동 Vauum 을 걸어줘야함

 

 

stats colletor 프로세스

- DB 운영관리 시 필요한 통계 정보를 수집하는 프로세스

- pg_stat_activity 등과 같은 뷰를 통해 볼수 있는 자료를 수집 하고, 데이터베이스가 IO가 매우 Busy 할때 수집하지 않는 경우도 있으므로, pg_stat_* 뷰 값을 맹신해서는 안됨

(통계 정보 수집이 불가 할때 대부분 로그에 통계수집 불가에 대한 내용이 나오므로 내용 참고 필요) 

 

 

logical replication lanuncher 프로세스

- 10버전 이후에 구현된 논리복제를 구현하기 위한 프로세스 

- 논리복제 구현시 worker가 생성됨 (추후 포스팅에 기술예정 )

 

(그림 출처 및 참고 자료)

 

https://www.geeksforgeeks.org/postgresql-system-architecture/

postgresql.org

enterprisedb.com

https://bit.ly/3wsxU43

 

모든 포스팅은 공식사이트 및 위 Google Docs에 있는 서버 관리자 지침서(https://bit.ly/3wsxU43) 를 참고하여 작성되었습니다.