인성장

[PostgreSQL] Data Directory 구조 (2) 본문

PostgreSQL/Architecture

[PostgreSQL] Data Directory 구조 (2)

인성장 2023. 11. 28. 10:52
PostgreSQL Data Directory 구조

 

 

PostgreSQL Data Directory 구조

 

 

base

base 디렉토리는 각 데이터베이스의 디렉토리가 생성되고, 각 데이터베이스 디렉토리에는 테이블과 인덱스 파일이 생성 됩니다. 각 데이터베이스는 oid(object id)로 구분할 수 있으며, 테이블, 인덱스 파일도 oid 형식으로 생성이 됩니다.

 

global

모든 데이터베이스에서 공유하는 서버 카탈로그 테이블들이 존재하는 곳입니다. 한마디로 데이터베이스 전체 정보를 가지고 있는 곳을 뜻합니다. global 디렉터리에는 크게 4가지가 있습니다.

① pg_internal.init

관계 캐시를 포함하는 파일입니다. 해당 파일은 전역 서브 디렉토리에 존재하고 각 데이터베이스 서브 디렉토리에 하나씩 존재하며, 기본이 아닌 각 테이블스페이스에 있을 수 있습니다.

② pg_filenode.map

소위 “매핑된 관계” (즉, 파일노드가 pg_class에 저장되지 않은 관계를 말함)를 OID에 매핑하는 특수 파일입니다.

③ pg_control (Oracle Control 파일과 유사)

DB를 운영하면서, 생성 및 관리가 필요한 정보들 ( 예: 버전, 트랜잭션, 체크포인트 등) 에 대한 모든 정보들을 가지고 있는 파일입니다.

④ 기타 파일들

DB 에 존재하는 모든 전역 객체 ( PostgreSQL 내부에서 구성된 모든 DB들이 공용으로 사용 하는 정보) 정보들을 가지고 있습니다. 전역 객체엔 테이블스페이스, 데이터베이스, DB 사용자, ROLE 등이 있습니다.

 

pg_tblspc

외부 테이블스페이스들의 링크가 존재하는 디렉토리입니다.

일반적으로 테이블스페이스를 지정해주지않고 데이터베이스를 생성할 때 pg_default라는 영역에 저장되어 있는 값에 데이터를 저장합니다. 그 위치가 바로 $PGDATA 경로인것이고 그안에서 base라는 디렉토리 인것입니다.

만약, 새로 추가한 디스크에 데이터를 저장하고 싶다면, 또 뭔가 데이터 정보들을 구분하고 싶다면, 테이블스페이스를 사용하시면 됩니다. 외부 테이블스페이스를 생성하게되면 pg_tblspc 이곳에 심볼릭 링크가 생성됩니다.

 

pg_wal (pg_xlog)

PostgreSQL 10 버전 이전에는 pg_xlog 였으나, 이후 버전부터는 pg_wal 로 변경되었습니다. 트랜잭션 로그 파일(Write Ahead Log – WAL)들이 저장되는 디렉토리입니다. Oracle 의 Redo Log File 개념과 비슷합니다. DB가 비정상적으로 종료되어 기록중이던 데이터들을 디스크에 쓰지 못했을 때, 복구하는 용도로 쓰입니다.

! Tip

Oracle Redo Log File 개념이 비슷할 뿐, 파일을 써내려가는 방식은 다릅니다. Oracle Redo Log File 정해진 파일 개수로 순환하며 트랜잭션 내용을 덮어씌우는 방식이고, PostgreSQL WAL File 은 계속해서 생성해서 쌓아두다가 chekpoint 가 발생하면 해당 시점 이전의 파일들을 삭제하는 방식입니다.

 

pg_xact

2비트 단위로 트랜잭션이 Commit 중인지, 아직 진행중인지에 대한 상태값을 2비트로 보관하는 디렉토리입니다.

 

pg_multixact

shared row lock 처리를 위해서 해당 lock에 연관되는 트랜잭션들의 상태값을 보관하는 디렉토리입니다.

 

pg_subtrans

DB 처리 중, begin -> commit 혹은 rollback을 사용하는 트랜잭션들의 상태값을 보관하는 디렉토리입니다.

 

pg_serial

DB 격리 Level 중에 serializable 과 연관되는 트랜잭션들의 상태값을 보관합니다.

 

pg_snapshots

Database 에서는 격리성이나 특정 Lock 등의 이유로 데이터가 변경되기 이전의 상태 값을 보관해서 데이터를 변경중인 사용자 이외에 데이터를 조회를 조회해야 하는 사용자가 변경 전의 데이터 상태 값을 볼 수 있도록 해줘야합니다. 이 때 데이터의 특정 상태값을 snapshot으로 보관할 수 있는데, 이 snapshot들을 저장하는 공간입니다.

 

pg_twophase

PostgreSQL은 Oracle과 다르게 shared pool과 같은 공용 SQL 실행 계획을 보관하는 공간이 없어서 각 세션별로 실행 계획을 세워야 합니다. 이는 자주 수행되는 트랜잭션들도 매번 실행 계획을 세워야 하는데, 이것은 매우 비효율적입니다. 그래서 PREPARE 명령어로 특정 트랜잭션들의 실행 계획을 보관할 수가 있는데, 이 PREPARE된 트랜잭션들의 실행계획을 보관하는 공간이 바로 pg_twophase 디렉토리입니다.

 

pg_dynshmem

동적 공유 메모리 서브시스템에서 사용하는 파일을 포함한느 디렉토리입니다.

 

pg_replslot

복제 슬롯 데이터를 포함하는 디렉토리입니다.

 

pg_stat

통계 서브시스템에 대한 영구 파일이 포함된 디렉토리입니다.

 

pg_stat_tmp

통계 서브시스템용 임시 파일이 포함된 디렉토리입니다.

 

pg_notify

LISTEN/NOTIFY 상태 데이터를 포함하는 디렉토리입니다.

 

pg_logical

논리적 디코딩을 위한 상태 데이터를 포함하는 디렉토리입니다.

 

pg_commit_ts

트랜잭션 커밋 타임스탬프 데이터가 포함된 디렉토리입니다.

 

current_logfiles

DB에 대한 오류 보고 및 로깅 기능을 사용할 때, 현재 로그정보를 실시간으로 기록하고 있는 파일 이름을 알려줍니다.

 

postmaster info files (postmaster.pid, postmaster.opts)

DB 기동 시, PostgreSQL 핵심 프로세스인 postmaster 프로세스 정보들을 가지고 있는 파일들입니다. 이 파일들이 없으면 DB 기동이 되지 않습니다.

 

PG_VERSION

PostgreSQL Database 버전 정보를 표시합니다. 파일 안에 기술된 내용과 PostgreSQL 엔진 버전이 동일해야 PostgreSQL이 기동됩니다. 아래 두 가지 경우에 대해서는 PostgreSQL이 기동되지 않습니다.

1. PG_VERSION 파일이 존재하지 않을 경우

2. PostgreSQL Database 버전과 파일에 기술된 버전이 다른 경우

 

pg_hba.conf

PostgreSQL의 인증시스템 관련 정보를 담고 있는 파일입니다. PostgreSQL에 접근하는 Host나 데이터 전송방식, 암호화 전송방식에 대한 설정을 할 수 있습니다. pg_hba.conf의 내용을 변경한 후에는 PostgreSQL을 재기동 해줘야 합니다.

 

postgresql.conf

PostgreSQL Database의 환경설정 파일입니다. Oracle의 pfile과 유사한 역할을 수행합니다. 파라미터별 설정실습은 뒤에서 진행하도록 하겠습니다.

 

postgresql.auto.conf

postgresql.auto.conf는 postgresql.conf와 비슷한 역할을 수행하는데, 다른점은 psql 내부에서 alter system 명령어를 통해 변경한 내용들이 저장되는 파일입니다. PostgreSQL을 기동하면서 postgresql.conf 파일을 먼저 읽고, postgresql.auto.conf 파일을 읽은 다음 OPEN 합니다. 파라미터 적용 우선순위는 postgresql.auto.conf 파일이 postgresql.conf 파일보다 높습니다.

 

pg_ident.conf

클라이언트의 인증 방식으로 ident 인증을 사용하는 경우, ident 사용자 이름을 PostgreSQL의 역할 이름에 매핑하는데 사용하는 파일입니다.

 

참조사이트

https://blog.ex-em.com/1654

 

DB 인사이드 | PostgreSQL Architecture - 2. Physical Structure

Physical Structure본 문서에서는 Data 파일, Engine Log 파일, Configuration 파일 등 PostgreSQL이 관리하는 다양한 파일과 디렉토리에 대한 내용을 다루도록 하겠습니다. 해당 파일 및 디렉토리들은 PGDATA라고

blog.ex-em.com

 

'PostgreSQL > Architecture' 카테고리의 다른 글

[PostgreSQL] SQL 처리 과정 (6)  (2) 2023.11.29
[PostgreSQL] 동작 원리 (5)  (2) 2023.11.28
[PostgreSQL] Memory 구조 (4)  (0) 2023.11.28
[PostgreSQL] Process 구조 (3)  (0) 2023.11.28
[PostgreSQL] Database 구조 (1)  (0) 2023.11.24