[DB] POSTGRESQL

[PostgreSQL] Postgresql database 기본 구조

mewoni 2020. 3. 31. 10:33
반응형

1. postgresql vs oracle ?

 

- db엔진이 올라간 후, 인스턴스를 생성하면서 database가 생성되어 대부분 1 instance = 1 database 를 나타내는 오라클과 달리 postgresql에서의 인스턴스는 1 instance = 1 server를 의미하는 서버 단위의 개념이다.

 

- oracle에서의 클러스터는 RAC 환경의 공유노드 개념으로 하나의 스토리지를 바라보는 여러대의 노드, 오라클 클러스터웨어인 grid instructure 를 통한 active-active의 환경을 조성하고 클러스터웨어를 통해 이루어진 공유노드를 클러스터라고 한다.

 

- postgresql에서의 클러스터는 psql DB 집합체를 의미한다. 처음 postgresql 설치 시 기본적으로 postgres database, template0, template1 3개의 database가 생성되는데 이 db 집합체를 postgresql 클러스터라고 한다.

그림1. postgresql cluster structure

- postgresql의 database는 여러개의 schema로 구성되어 있으며 schema는 object들의 논리적인 집합을 의미한다.

 

- postgresql schema는 tables, views, sequences, synonyms, domains, functions 등의 object로 구성되며 이러한 database와 users/groups과 tablespaces가 모여 cluster를 구성

 

2. postgresql database structure

 - 매우 단순한 물리적 구조를 가짐

 - Shared Memory, 적은 수의 백그라운드 프로세스, 데이터 파일로 구성

 

2-1. Shared Memory

2-1-1 Shared Buffer

 - Shared Buffer의 목적은 DISK I/O를 최소화 하는 것

 - 그러기 위해서는 아래 항목을 만족해야 한다.

 

  ● 매우 큰 버퍼를 빠르게 엑세스해야 한다. (수백GB 단위)

  ● 많은 사용자가 동시에 접근할 때 경합을 최소화해야 한다.

  ● 자주 사용되는 블록은 최대한 오랫동안 버퍼 내에 있어야 한다.

 

2-1-2. WAL 버퍼

 - WAL 버퍼는 데이터베이스의 변경 사항은 잠시 저장하는 버퍼

 - WAL 버퍼 내에 저장된 내용은 정해진 시점에서 WAL 파일로 기록

 - 백업 및 복구 관점에서 WAL 파일은 매우 중요하고, 오라클에서 Redo의 개념과 비슷

 

2-2) 프로세스 유형

 - Postmaster (Daemon) 프로세스

 - Background 프로세스

 - Backend 프로세스

 - Client 프로세스

 

2-2-1) Postmaster 프로세스

 - PostgreSQL를 구동 할 때 가장 먼저 시작되는 프로세스

 - 초기 기동시 복구 작업, Shared Memory 초기화 작업, 백그라운드 프로세스 구동작업을 수행

 - 클라이언트 프로세스의 접속 요청이 있을 때 Backend 프로세스를 생성

 

2-2-2) Background 프로세스

 - Autovacuum launcher를 제외하면, 오라클과 비슷한 백그라운드 프로세스들이 존재

 

 ● logger : 에러메세지를 로그 파일에 기록한다.

 ● checkpointer : 체크포인트 발생시, dirty 버퍼를 파일에 기록한다.

 ● writer : 주기적으로 dirty 버퍼를 파일에 기록한다.

 ● wal writer : WAL버퍼 내용을 WAL 파일에 기록한다.

 ● autovacuum launcher : Vacuum이 필요한 시점에 autovacuum worker를 fork 한다.

 ● archiver : Archive Log 모드일 때, WAL 파일을 지정된 디렉토리에 복사한다.

 ● stats collector : 세션 수행 정보 (pg_stat_activity)와 테이블 사용 통계 정보 (pg_stat_all_tables)와 같은 DBMS 사용 통계 정보를 수집한다.

 

2-2-3) Backend 프로세스

 - Backend 프로세스의 최대 개수는 max_connections 파라미터로 설정 가능하며, 기본값은 100

 - Backend 프로세스는 사용자 프로세스의 쿼리 요청을 수행한 후, 결과를 전송하는 역할을 수행

 - 쿼리 수행에 몇가지 메모리 구조가 필요한데, 이 것을 통칭해서 로컬 메모리라고 함

 

 - 로컬 메모리 관련 주요 파라미터

 

 ◈ work_mem 파라미터

  - 정렬 작업, Bitmap 작업, 해시 조인과 Merge조인 작업시에 사용되는 공간. 기본값은 4MB

 

 ◈ maintenance_work_mem 파라미터

  - Vacuum 및 create index 작업 시에 사용되는 공간. 기본값은 64MB

 

 ◈ temp_buffers 파라미터

  - Temporary 테이블을 저장하기 위한 공간. 기본값은 8MB

 

반응형