[PostgreSQL이란?]
- PostgreSQL은 오픈 소스 객체-관계형 데이터베이스 시스템(ORDBMS)으로, Enterprise급 DBMS의 기능과 차세대 DBMS에서나 볼 수 있을 법한 기능들을 제공한다.
[PostgreSQL 장단점]
- 장점 :
- 무료
- 확장성이 좋음
- ANSI SQL 지원
- ACID를 모두 지원하여 높은 안정성
- 다중버전 동시정 제어 제공 (MVCC)
- 단점 :
- UPDATE 쿼리에 약함
- 메모리 성능이 떨어짐
[PostgreSQL 구조]
- 클라이언트/서버 모델을 사용
- SQL(Structured Query Language)을 사용하여 데이터를 관리
- 관계형 데이터베이스 모델을 따름
- 다양한 데이터 유형을 지원, 사용자가 사용자 정의 데이터 유형을 생성할 수 있음
※ PostgreSQL Instance Archiecture
- Postgres (= Postmaster)
- DB 클러스터의 모든 연결 및 작업을 관리
- Background Process에 Shared Memory 영역을 할당
- 요청 수신 시 Backend Process를 Client와 1:1로 생성
- 하위 Process들의 비정상 작동유무를 체크, 문제 발생 시 재기동
- Client가 요청한 SQL 및 Commend를 처리
- 각 Component는 Catalog, Rule, Table을 공유
- max_connection(Default:100) 수 만큼 Client 동시 연결 가능
- Shared Memory Area
- Shared Buffer (≒ Database Buffer with Oracle)
- Data와 Data의 변경 사항을 Block 단위로 캐싱하여 I/O를 빠르게 처리하기 위한 영역
- Shared Buffer에 기록되는 단위는 block_size (Default: 8K)
- shared_buffer (Default: 128MB)로 크기를 설정할 수 있으며, 시스템 메모리의 25% 권장
- WAL Buffer (≒ RedoLog Buffer with Oracle)
- Session들이 수행하는 트랜잭션에 대한 변경 로그를 캐싱하는 공간
- 복구 작업 시 Data를 재구성할 수 있도록 하는 영역
- CLOG Buffer
- 각 트랜잭션의 상태 정보를 캐싱하는 공간
- 모든 트랜잭션의 상태가 있으며 완료 여부를확인할 수 있도록 하는 영역
- Database 엔진에 의해 자동 관리되며, 설정할 수 있는 Parameter 없음
- Lock Space
- PostgreSQL 인스턴스에서 사용하는 모든 유형의 Lock 정보를 저장
- DB의 동시성 제어 및 일관성을 유지하는 역할
- Local Memory Area(= Per Backend Memory)
- Maintenance Work Memory
- 유지 관리 작업에 사용되는 메모리
- Vacuum, Analyze, 인덱스 생성 및 변경, 테이블 변경, FK 추가 등의 작업에 사용됨
- maintenace_work_mem (Default: 64MB)
- Temp Buffer
- Tempoary Table에 사용되는 공간
- Temp Table을 사용하는 경우에만 할당되며, 각 Session별로 관리
- temp_buffer (Default: 8MB)
- Work Memory
- 과도한 Sork/Hash 작업이 발생하여 Temp file 사용 전 사용 되는 공간
- work_mem (Default: 4MB)
- Catalog Cache
- System Catalog Meta Data를 이용할 때 사용하는 공간
- Optimizer / Excutor
- Query에 대한 최적의 실행 계획을 수립하고, 실행 계획에 따른 실행을 담당하는 영역
- Background Process (= Utility Processes)
- BG Writer
- Shared Buffer의 Dirty Block을 Data File에 기록
- BG Writer는 bgwriter_delay(Default: 200ms) 주기로 최대 bgwriter_lru_maxpages(Default: 100pages)를 디스크에 기록
- Check Pointer
- PostgreSQL Server 다운 또는 충돌 등의 문제가 발생했을 때 마지막 *Check Point 레코드를 확인하여 복구를 시작
- WAL Writer
- WAL Buffer를 주기적으로 확인하여 기록되지 않은 모든 트랜잭션 레코드를 디스크(WAL File)에 기록
- WAL Writer는 트랜잭션 Commit 혹은 Log File 공간이 모두 찼을 때 WAL Buffer를 디스크에 내려씀
- WAL File은 DB 복구에 사용
- WAL의 핵심 개념은 데이터 파일의 수정이 트랜잭션 로그에 기록된 후에 이루어져야 함
- Archiver
- 다 쓴 WAL File을 Archiving 하는 프로세스 (WAL 세그먼트가 전환될 때 WAL 파일을 Archive영역으로 복사)
- archive_command로 Archive 경로를 설정하며, scp 명령 또는 백업 도구를 설정하여 다른 호스트로 전송 가능
- Archive File은 PITR(Point In Time Recovery) 복원에 사용
- Logger
- Utility Process, Backend Process, Postgres Daemon 활동에 대한 정보를 기록
- Stats Collector
- DB 통계 정보 수집 프로세스
- Session 정보(pg_stat_activity)와 테이블 통계정보(pg_stat_all_tables)와 같은 DBMS 사용 통계를 수집하여 pg_catalog에 정보를 업데이트
- Optimizer는 해당 정보를 참조하여 최적의 Query 실행 계획을 생성
- Autovacuum Launcher
- Autovacuum을 수행하고 관리하는 프로세스
- Autovacuum Workers라는 여러 Process로 구성된 Daemon Process
- Autovacuum Launcher는 Autovacuum Workers를 주기적으로 호출하여 vacuum 및 vacuum analyze를 실행
- autovacuum_naptime (Default: 60s)마다 Autovacuum Launcher가 DB를 확인하여 autovacuum_max_workers (Default: 3)의 Autovacuum Workers를 호출
- WAL Sender
- Master(Primary 서버)에서 실행되는 WAL 송신 프로세스
- WAL Receiver
- Standby에서 실행되는 WAL 수신 프로세스
※ PostgreSQL Logical Structure
※ PostgreSQL Physical Structure
반응형
'IT > PostgreSQL' 카테고리의 다른 글
[ PostgreSQL ] PostgreSQL 설치 (0) | 2025.02.28 |
---|---|
[PostgreSQL] VACUUM이란? (0) | 2025.02.28 |
[PostgreSQL] MVCC란? (0) | 2025.02.28 |