728x90
반응형
0. 이 글을 작성하는 이유
회사에서 진행한 PostgreSQL 9.6 성능 이야기 책 스터디를 하며 정리한 내용을 올리기 위함
PostgreSQL 프로세스 유형 4가지
- Backend process
- Postmaster (Daemon) process
- Background process
- Client process
물리적인 관점에서 보았을 때의 PostgreSQL의 구조
- 공유 메모리( Shared Buffer, WAL 버퍼 ), 프로세스, 데이터 파일
Postgres의 Database 구조에 대한 6가지 정리
- PostgreSQL은 여러 DB로 구성된다. 이를 데이터베이스 클러스터라고 한다
- initdb()수행 시에 template0, template1, postgres DB가 생성된다.
- template0과 template1 DB는 사용자 DB 생성을 위한 템플릿 DB이며 시스템 카탈로그 table을 포함하고 있다
- initdb() 수행 직후에 templaet0과 template1 DB의 table 목록은 같다.
- template1 DB에는 사용자가 필요한 오브젝트를 생성할 수 있다.
- 사용자 DB를 생성할 때 template1 DB를 복제한다
테이블 스페이스
- PostgreSQL에서 데이터베이스 객체(테이블, 인덱스 등)를 저장하는 물리적인 공간이다. 데이터베이스 객체를 저장할 때, 해당 객체는 특정 테이블스페이스에 속하게 된다.
- 생성된 경우 테이블스페이스는 데이터베이스 객체 생성 시 이름으로 참조가 가능하다.
- Database의 실제 오브젝트들의 파일을 저장하는 위치를 저장한다. 조회는 pg_catalog의 pg_database에 존재한다.
- 테이블스페이스를 사용의 이점
- 데이터 파일의 분리가 가능하다
- 테이블스페이스를 사용하면 데이터 파일을 논리적으로 분리하여 저장할 수 있다.
- 성능 및 용량 최적화
- 서로 다른 테이블스페이스를 다른 디스크에 할당하면 입출력 작업을 분산시켜 성능을 최적화할 수 있다.
- 백업 및 복구 관리에 유용
- 특정 테이블스페이스만을 대상으로 백업하거나 복구할 수 있다.
- 데이터 파일의 분리가 가능하다
데이터베이스 클러스터
- 기본적으로 database를 초기화할 때(initdb()를 수행할 때) postgres, template1, template0이라는 데이터베이스가 생성되고 이를 다 합쳐서 Database Cluster라고 한다.
- template database는 기존 데이터를 복사해서 보관하는 용도의 데이터베이스다. Database의 생성은 기존 database를 복사하는 방식으로 작동한다.
pg_global 테이블스페이스의 용도
- ‘데이터 클러스터’ 레벨에서 관리해야 될 데이터 저장
테이블별로 가지고 있는 3개의 파일의 각 용도
- OID: 테이블의 데이터 저장
- OID_fsm: 테이블의 여유 공간 관리
- OID_vm: 테이블 블록의 visibility 관리
WAL Buffer
- WAL이란 Write-Ahead Logging의 약자로 데이터 베이스의 변경 사항을 잠시 저장하는 buffer이며 정해진 시점(사용자 custom가능)에 buffer에 있는 내용은 WAL 파일로 기록되어 백업 및 복구에 사용된다.
PostMaster 프로세스
- Shared Memory 영역을 할당하며 다양한 백그라운드 프로세스를 시작한다.
- Client 접속 요청이 있을 때 Backend 프로세스를 생성한다.
- 가장 상위 프로세스로서 하위 프로세스들의 비정상 작동 유무를 체크하며, 문제 발생 시 재기동 역할을 수행한다
postmaster.pid 파일
- 우리가 흔히 Postgresql을 켠다고 하는데 그 데이터베이스 서버는 postmaster라고 부른다고 한다
- client가 어플리케이션에 접근하려면 반드시 postmaster가 켜져있어야 한다고 한다. 이 Postmaster는 서버 프로세스들 간의 통신도 관리한다고 한다.
- postmaster가 실행될 때 PID가 postmaster.pid에 저장된다고 한다.
- 찾아보니 이런 정보들이 들어간다고 한다.
- the current postmaster process ID (PID)
- cluster data directory path
- postmaster start timestamp
- port number
- Unix domain socket directory path
- listen_address (IP address)
- shared memory segment id(key)
- postmaster status
Shared Buffer
- 저장된 데이터에 대한 Disk I/O 최소화를 목적으로 사용
사용자 데이터베이스는 어떻게 생성되는가
- template1 데이터베이스를 복제해서 생성된다.
- 해당 데이터베이스는 새 데이터베이스를 만드는 "템플릿"이다.
- 객체를 template1에 추가하면, 이 객체는 나중에 생성된 사용자 데이터베이스로 복사된다. 이 작업은 데이터베이스의 표준 객체 집합에 대한 사이트-로컬 수정을 가능하게 한다.
- 예를 들면, template1에서 프로시저 언어 PL/Perl을 설치하는 경우 해당 데이터베이스를 생성할 때 추가적인 작업 없이 사용자 데이터베이스가 자동으로 사용 가능하게 된다.
Vacuum이 하는 일 4가지
- 테이블 및 index 통계 정보 수집
- 테이블 재구성
- 테이블 및 index dead 블록 정리
- XID Waparound 방지를 위한 레코드별 XID Frozen
728x90
반응형
'컴퓨터공학 > 데이터베이스' 카테고리의 다른 글
UUID에 바로 LIKE연산자를 사용하려고 했더니 안되었던 이유는? (1) | 2024.02.04 |
---|---|
postgresql9.6 성능 이야기 1장 - 아키텍처 개요를 보다가 (1) | 2024.01.27 |
postgres가 어느 날 맛이 가버렸다. postmaster는 뭐고 왜 이런 일이 발생했을까 (0) | 2024.01.20 |
PostgreSQL Materialized View 사용기 (1) | 2024.01.12 |
[PostgreSQL]Table Partitioning (1) | 2023.12.03 |