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, template1 3개의 database가 생성되는데 이 db 집합체를 postgresql 클러스터라고 한다.
- postgresql의 database는 여러개의 schema로 구성되어 있으며 schema는 object들의 논리적인 집합을 의미한다.
- postgresql schema는 tables, views, sequences, synonyms, domains, functions 등의 object로 구성되며 이러한 database와 users/groups과 tablespaces가 모여 cluster를 구성
2. postgresql database structure
- 매우 단순한 물리적 구조를 가짐
- 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
'[DB] POSTGRESQL' 카테고리의 다른 글
[PostgreSQL] database 관리(생성/추가/삭제/변경) (0) | 2020.03.31 |
---|---|
[PostgreSQL] 계정/유저 관리 (0) | 2020.03.31 |
[PostgreSQL] 기본 조회 명령어 및 변수 선언, 설정 (0) | 2020.03.31 |
[PostgreSQL] 디렉토리 구조 및 환경 변수 파일 (0) | 2020.03.31 |
[PostgreSQL] Cent os에 postgresql 설치하기 (2) | 2020.03.27 |