"처음 사용자를 위한 PostgreSQL 사용 샘플" 이라는 제목의 시리즈로, 저처럼 PostgreSQL을 처음 접하는 사용자를 위한 기본적인 개념, 사용 샘플을 설명드립니다.
아래 자료를 참조했습니다.
PostgreSQL Domcumentation
The Internals of PostgreSQL
PostgreSQL Tutorial
PostgreSQL 이란?
PostgreSQL은 1986년 University of California (Berkeley) 에서 "POSTGRES" 프로젝트의 일환으로 시작한 오픈소스 멀티모델 데이터베이스로 관계형 데이터베이스(RDBMS)입니다. 리눅스, 윈도우즈, macOS, BSD, Solaris 등의 운영 체제를 지원하고 2001년부터는 ACID를 준수합니다. Open Source 라이선스로서 자유롭게 사용, 복제, 배포 수정 할 수 있으며, 소스코드가 공개된 소프트웨어입니다. (참조. Open Source Initiative)
PostgreSQL Architecture
Process Architecture
PostgreSQL은 클라이언트/서버 모델을 사용합니다. PostgreSQL 세션은 다음과 같은 프로세스(프로그램)로 구성됩니다.
서버 프로세스: 데이터베이스 클러스터 관리와 관련된 모든 프로세스의 부모 프로세스입니다. 백엔드 (backend) 프로세스는 연결된 클라이언트가 발행하는 쿼리 및 구문을 처리하는 역할을 합니다. 백그라운드 (background) 프로세스는 VACUUM, CHECKPOINT 같은 데이터베이스 관리를 위한 각 기능을 수행하는 프로세스입니다.
클라이언트 어플리케이션: 데이터베이스 작업을 수행하려는 사용자의 클라이언트(프론트엔드) 어플리케이션입니다. 클라이언트 어플리케이션은 본질적으로 매우 다양할 수 있습니다. 텍스트 기반 또는 그래픽 기반 툴, 웹 서버, 기타 데이터베이스 관리 툴 등 다양한 클라이언트 어플리케이션이 있습니다. 일부 클라이언트 어플리케이션은 PostgreSQL 배포와 함께 제공되는데, 이 경우 대부분 사용자들이 개발한 것들입니다.
클라이언트/서버 어플리케이션의 일반적인 경우와 마찬가지로 클라이언트와 서버는 다른 호스트에 있을 수 있습니다. 이 경우 TCP/IP 네트웍 연결을 통해 통신합니다.
PostgreSQL 서버는 클라이언트의 여러 동시 연결을 처리할 수 있습니다. 이를 위해 각 연결에 대해 새로운 프로세스를 시작("fork") 하고, 이때부터는 클라이언트와 새로운 서버 프로세스가 원래 postgres 프로세스의 개입 없이 통신합니다. 따라서 관리 서버 프로세스는 항상 실행 중이며 클라이언트 연결을 기다리는 반면, 클라이언트 및 관련 서버 프로세스는 계속 생성되었다 정리되었다합니다. 아래는 PostgreSQL start 후, 서버 프로세스입니다.
각 서버 백그라운드 프로세스는 다음과 같은 역할을 수행합니다.
프로세스 | 기능 |
background writer | shared buffer pool의 dirty page를 HDD, SSD와 같은 persistent storage에 주기적으로 기록. 9.1 이전 버전에서는 checkpointer가 해당 역할을 수행 |
checkpointer | 9.2 이상 버전부터 checkpoint 수행 |
autovacuum launcher | vacuum 처리를 위해 주기적으로 autovacuum-worker 프로세스 생성을 postgres server에 요청 |
WAL writer | persistent storage에 WAL buffer 상의 WAL 데이터를 주기적으로 기록 및 flush |
statistics collector | pg_stat_activity, pg_stat_database와 같은 통계정보를 수집 |
logging collector (logger) | 에러 메세지를 로그 파일에 기록 |
achiver | archiving logging 실행 |
Memory Architecture
PostgreSQL의 메모리 아키텍처는 두 영역으로 나눌 수 있습니다.
로컬 메모리 영역: 각 backend 프로세스가 자신이 사용하기 위해 할당한 메모리 영역
공유 메모리 영역: PostgreSQL 서버의 모든 프로세스가 사용하는 메모리 영역
로컬 메모리 주요 영역의 기능은 다음과 같습니다.
프로세스 | 기능 |
work_mem | ORDER BY, DISTINCT 같은 정렬 작업과 Merge 조인, Hash 조인 같은 조인 작업을 위한 영역 |
maintenance_work_mem | VACUUM, REINDEX 같은 관리 작업을 위한 메모리 영역 |
temp_buffers | 임시 테이블 저장을 위해 사용되는 영역 |
공유 메모리 주요 영역의 기능은 다음과 같습니다.
프로세스 | 기능 |
shared_buffer_pool | persistent storage에 있는 테이블과 인덱스 페이지를 로드하여 처리하는 메모리 영역 |
WAL buffer | 서버 장애 시 데이터 손실을 막기 위해 PostgreSQL은 WAL 메커니즘을 사용. WAL 데이터 (XLOG 레코드)는 PostgreSQL의 트랜잭션 로그로서 WAL buffer는 WAL 데이터를 persistent storage에 쓰기 전 버퍼링하는 영역 |
commit log | CommitLOG (CLOG)에 Concurrency Control (CC) 메커니즘 작동을 위해 모든 트랜잭션의 상태를 유지 |
EnterpriseDB (EDB) ?
PostgreSQL을 기반으로한 소프트웨어, 서비스 제공 벤더입니다. 2004년 설립되었고 사모투자펀드 Great Hill Partners가 2019년 6월 EDB 인수했습니다. 두가지 버전의 온프레미스 EDB Postgres 제공합니다. 먼저 커뮤니티 오픈소스 버전의 PostgreSQL로 EDB가 배포하고 있습니다. 또 하나는 Postgres Advanced Server로서 오라클의 기능, 오라클 데이터베이스 호환성, 성능 관련 기능이 추가된 상업용 EDB 제품입니다. 데이터 로더, Index Advisor, DynaTune, SQL 대기상태 통계, 빌트인 함수 패키지, 소프트웨어 업데이트 모니터, 엔터프라이즈 모니터링 도구, SQL Performance Profiler, SQL Injection 공격 보호, 데이터베이스 마이그레이션 툴킷, 오라클 및 SQL Server와의 이기종 복제 등의 기능을 가지고 있습니다.
끝
'Database > PostgreSQL' 카테고리의 다른 글
처음 사용자를 위한 PostgreSQL 사용 샘플 - 6. Replication - WAL Streaming (0) | 2021.11.16 |
---|---|
처음 사용자를 위한 PostgreSQL 사용 샘플 - 5. 데이터 업로드 (0) | 2021.11.16 |
처음 사용자를 위한 PostgreSQL 사용 샘플 - 4. pgAdmin 설치 & DB 접속 (0) | 2021.11.15 |
처음 사용자를 위한 PostgreSQL 사용 샘플 - 3. PostgreSQL DB 생성 및 접속 (0) | 2021.11.15 |
처음 사용자를 위한 PostgreSQL 사용 샘플 - 2. PostgreSQL 설치 (0) | 2021.11.11 |