PostgreSQL 이란?
Postgres 버전 4.2를 기반으로 하는 개체 관계 데이터베이스 관리 시스템 (ORDBMS) 이며,
UC 버클리 컴퓨터 공학부에서 개발, 오리지널 버클리 코드에서 유래된 오픈소스 입니다.
SQL 표준 지원.
- 복합쿼리
- 외래키
- 트리거
- 업데이트 가능한 뷰
- 트랜잭션 무결성
- 멀티버전 동시성 제어
PostgreSQL을 사용자가 여러가지 방법으로 확장 할 수 있습니다.
- 데이터타입
- 함수
- 연산자
- 집계함수
- 인덱스 메소드
- 프로시저 언어
※ 라이센스가 자유롭기 때문에 누구든 자유롭게 PostgreSQL을 상업적으로 사용, 수정 배포할 수 있습니다.
단, PostgreSQL 오픈 소스 프로젝트이기 때문에, 장애 발생 및 버그에 대한 처리가 쉽지 않습니다.
사용자 커뮤니티를 통해 자신의 지식을 기부하고, 메일링 리스트를 통해 다른 사람의 도움을 받아야 합니다.
데이터베이스 구조
- PostgreSQL의 물리적 구조는 매우 단순합니다.
- Shared Memory, 적은 수의 백그라운드 프로세스, 데이터 파일로 구성되어 있습니다.
1-1. Shared Memory
1-1-1. Shared Buffer
- Shared Buffer의 목적은 DISK I/O를 최소화 하는 것입니다. 그러기 위해서는 아래 항목을 만족해야 합니다.
- 매우 큰 버퍼를 빠르게 엑세스해야 한다. (수백GB 단위)
- 많은 사용자가 동시에 접근할 때 경합을 최소화해야 한다.
- 자주 사용되는 블록은 최대한 오랫동안 버퍼 내에 있어야 한다.
1-1-2. WAL 버퍼
- WAL 버퍼는 데이터베이스의 변경 사항은 잠시 저장하는 버퍼입니다.
- WAL 버퍼 내에 저장된 내용은 정해진 시점에서 WAL 파일로 기록됩니다.
- 백업 및 복구 관점에서 WAL 파일은 매우 중요하고, 오라클에서 Redo의 개념과 비슷한 부분이 있습니다.
1-2. 프로세스 유형
- Postmaster (Daemon) 프로세스
- Background 프로세스
- Backend 프로세스
- Client 프로세스
1-2-1. Postmaster 프로세스
- PostgreSQL를 구동 할 때 가장 먼저 시작되는 프로세스 입니다.
- 초기 기동시 복구 작업, Shared Memory 초기화 작업, 백그라운드 프로세스 구동작업을 수행합니다.
- 클라이언트 프로세스의 접속 요청이 있을 때 Backend 프로세스를 생성합니다.
1-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 사용 통계 정보를 수집한다.
1-2-3. Backend 프로세스
- Backend 프로세스의 최대 개수는 max_connections 파라미터로 설정 가능하며, 기본값은 100입니다.
- Backend 프로세스는 사용자 프로세스의 쿼리 요청을 수행한 후, 결과를 전송하는 역할을 수행합니다.
- 쿼리 수행에 몇가지 메모리 구조가 필요한데, 이 것을 통칭해서 로컬 메모리라고 합니다.
로컬 메모리 관련 주요 파라미터
- work_mem 파라미터
: 정렬 작업, Bitmap 작업, 해시 조인과 Merge조인 작업시에 사용되는 공간. 기본값은 4MB - maintenance_work_mem 파라미터
: Vacuum 및 create index 작업 시에 사용되는 공간. 기본값은 64MB - temp_buffers 파라미터
: Temporary 테이블을 저장하기 위한 공간. 기본값은 8MB
최신 댓글