Postgresql
- 오픈 소스 객체-관계형 데이터베이스 관리 시스템(ORDBMS)의 하나로서 다른 관계형 데이터베이스 시스템과 달리
연산자, 복합 자료형, 집계 함수, 자료형 변환자, 확장 기능 등 다양한 데이터베이스 객체를 사용자가 임의로 만들 수
있는 기능을 제공함
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, template 3개의 database가 생성되는데 이 db 집합체를 postgresql 클러스터라고 한다.
(template database는 밑의 접은글로 설명)
- postgresql의 database는 여러개의 schema로 구성되어 있으며 schema는 object들의 논리적 집합을 의미
- postgresql schema는 tables, views, sequences, synonyms, domains, functions등의 object로 구성되며 이러한
database와 users/groups와 tablespaces가 모여 cluster를 구성
※ Template 데이터베이스
- PostgreSQL에서 "Create Database"로 테이블을 생성할 때, 기본으로 생성되어 있는 Template1 Database를 복사하여 생성한다. 즉, Template Database는 표준 시스템 데이터베이스로 원본 데이터베이스에 해당하는데 template1에서 프로시저언어 PL/Perl을 설치하는 경우 해당 데이터베이스를 생성할 때 추가적인 작업 없이 사용자 데이터베이스가 자동으로 사용 가능
PostgresQL에는 Template0라는 2차 표준 시스템 데이터베이스가 있는데, 이 데이터베이스에는 template1의 초기 내용과 동일한 데이터가 포함되어 있다. Template 0은 수정하지 않고 원본 그대로 유지하여 무수정 상태의 데이터베이스를 생성할 수 있으며, pg_dump 덤프를 복원할 때 유용하게 사용할 수 있다.
2. postgresql database structure
- PostgreSql은 클라이언트/서버 모델을 사용
- 서버는 데이터베이스 파일들을 관리하며, 클라이언트 애플리케이션으로부터 들어오는 연결을 수용하고, 클라이언트를
대신하여 데이터베이스 액션을 수행한다.
- 서버는 다중 클라이언트 연결을 처리할 수 있는데, 서버는 클라이언트의 연결 요청이 오면 각 커넥션에 대해 새로운
프로세스를 fork하고 클라이언트는 기존 서버와의 간섭없이 새로 생성된 서버 프로세스와 통신하게 된다.
1) Shared Memory
- Shared Buffer : Disk I/O를 최소화하는 것이 목적. 그를 위해 매우 큰 버퍼를 빠르게 액세스 해야하고, 다수의
사용자가 동시에 접근할 때 경합을 최소화해야 하며, 자주 사용되는 블록은 최대한 오랫동안 버퍼
내에 있어야 함
- WAL Buffer : 데이터베이스의 변경사항을 잠시 저장하는 버퍼로 wal 버퍼 내에 저장된 내용은 정해진 시점에
wal 파일로 기록. 백업 및 복구 관점에서 wal파일은 매우 중요하고, 오라클에서 Redo의 개념과 비슷
2) 프로세스 유형
- Postmaster 프로세스
: PostgreSQL를 구동 할 때 가장 먼저 시작되는 프로세스
: 초기 기동시 복구 작업, Shared Memory 초기화 작업, 백그라운드 프로세스 구동작업을 수행
: 클라이언트 프로세스의 접속 요청이 있을 때 Backend 프로세스를 생성
- 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 사용 통계 정보를 수집한다.
- Backend 프로세스
: Backend 프로세스의 최대 개수는 max_connections 파라미터로 설정 가능하며, 기본값은 100
: Backend 프로세스는 사용자 프로세스의 쿼리 요청을 수행한 후, 결과를 전송하는 역할을 수행
: 쿼리 수행에 몇가지 메모리 구조가 필요한데, 이 것을 통칭해서 로컬 메모리라고 함
: 로컬 메모리 관련 주요 파라미터
- work_mem 파라미터 : 정렬 작업, Bitmap 작업, 해시 조인과 Merge조인 작업시에 사용되는 공간. 기본값은 4MB
- maintenance_work_mem 파라미터 : Vacuum 및 create index 작업 시에 사용되는 공간. 기본값은 64MB
- temp_buffers 파라미터 : Temporary 테이블을 저장하기 위한 공간. 기본값은 8MB
참고 글 : https://kwomy.tistory.com/7?category=851266 , https://mangkyu.tistory.com/71
'PostgreSQL' 카테고리의 다른 글
[PostgreSQL] Sequence 권한 (0) | 2021.11.17 |
---|---|
[PostgreSQL] psql 옵션 (0) | 2021.11.02 |
[PostgreSQL] DB에서 서버의 file 조회, 읽기 (0) | 2021.05.25 |
[PostgreSQL] postgres_fdw (0) | 2021.05.24 |
[PostgreSQL] DB링크(dblink) (0) | 2021.05.17 |
댓글