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

You may also like...

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다