1. 2018.12.12 PostgreSQL의 기본 개념

PostgreSQL의 기본 개념

PostgreSQL의 기본개념


 오라클과 psql의 차이점 때문에 용어 선택에서 상당히 헷갈리는 부분이 존재합니다.



1) 용어 차이

 

- 오라클은 DB 엔진이 올라간 후, 인스턴스를 생성하면서 데이터베이스가 생성됩니다. 즉, 오라클에서는 하나의 인스턴스가 하나의 DB를 나타냅니다. 하나의 데이터베이스 엔진으로 여러개의 인스턴스를 생성하면 하나의 서버에 여러개의 DB를 생성 할 수 있습니다. 인스턴스 = DB의 개념이지만, RAC 환경에서는 다수의 인스턴스가 하나의 DB를 이루는 경우도 있습니다. 


- PostgreSQL에서 인스턴스란, 서버 단위의 개념입니다. 서버 단일 인스턴스라고 부르는 PostgreSQL의 인스턴스는 서버 = 인스턴스 개념입니다. 


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


- Psql에서의 클러스터는 Psql DB 집합체를 이야기 합니다. PostgreSQL은 처음 DB를 설치하면 기본적으로 설치되는 DB가 있는데, postgres database, template0, template1 생성하는데, 이 3가지의 DB 집합체를 클러스터라고 합니다.



2) 데이터베이스 구조


- PostgreSQL의 물리적 구조는 매우 단순합니다.

- 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



 



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

pg_hba.conf  (0) 2018.12.27
Linux에 Postgres 9.6 버전 설치  (0) 2018.12.25
PostgreSQL의 기본 개념  (0) 2018.12.12
pgadmin4 설치  (0) 2018.12.03
PostgreSQL 11 설치  (0) 2018.12.03
PostgreSQL 백업 및 복구  (0) 2018.11.24