Today
Total
KoreanEnglishFrenchGermanJapaneseSpanishChinese (Simplified)
관리 메뉴

DB & AWS Knowledge

PostgreSQL / PPAS data 영역 구조 본문

PostgreSQL/아키텍처 및 내부 구조

PostgreSQL / PPAS data 영역 구조

`O` 2021. 7. 8. 04:57
728x90
반응형

해당 페이지에서는 PostgreSQL / PPAS 의 data 영역 구조에 대하여 다룬다.

 

 

참조 페이지

 

https://kwomy.tistory.com/7

 

https://www.postgresql.org/docs/11/storage-file-layout.html

 

https://pgadminedb.readthedocs.io/en/latest/module_02/

 

 

 

 

타 DB 와 같이 PostgreSQL / PPAS 도 엔진 및 데이터영역이 나뉘어져 있으며 기본 설치시, 11.2 버전 기준으로 구성되는 데이터 영역은 아래와 같다. 

 

 

해당 디렉토리들을 구분하여 정리하면 아래와 같이 나눌 수 있다.

 

출처 : https://pgadminedb.readthedocs.io/en/latest/module_02/

 

 

 

 

위에서 정렬된 리스트부터 차례대로 설명하면 아래와 같다.

 

 

global

 

데이터베이스 전체의 정보를 가지고 있는 경로다. 

 

크게 4가지가 있다. 

 

- pg_interneral.init, pg_filenode.map

 

DB 내에 존재하는 객체속성들과 실제 해당 객체정보, 데이터를 가진 파일과의 맵핑 정보가 저장.

 

- pg_control

 

DB 를 운영하면서 생성 및 관리가 필요한 정보들 (ex. 버전, 트랜잭션, 체크포인트, 데이터블록 크기, 트랜잭션 로그 크기 등) 에 대한 모든 정보들을 가지고 있는 파일이다. ORACLE 의 control 파일과 유사한 기능을 담당한다.

 

- 기타 숫자 파일들 

 

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

 

 

Base

 

데이터베이스내에 있는 테이블등의 객체 및 데이터등의 모든 자료들이 저장되는 공간이다. 저장구조는 /base/(database_oid)/(object_id) 순서로 아래와 같이 구성된다. (아래 화면에서는 database id 가 13286 인 database 가 가진 모든 객체파일들을 조회한 것이다.

 

 

여기서 더 나아가 아래의 예시로 test 라는 DB 를 만든 후 test.test 테이블을 생성했다. (test 스키마 생성 후 test 테이블 생성) 그리고 해당 테이블을 pg_class 에서 조회하여 objectid (oid) 를 조회했다. 

 

그 후, pg_relation_filepath 라는 각 객체들이 어디에 저장되어있는지를 보여주는 함수를 사용하면 해당 테이블이 조회된 ID 로 저장됨을 확인 할 수 있다.

 

 

또한 해당 디렉토리를 자세히 보면 vm, fsm 파일이 나와있는 경우가 있는데 이는 각 객체(테이블) 에 대해서 vacuum 이 

끝났을 때 만들어진다. 

(참조 페이지 : 2021.03.08 - [PostgreSQL/Vacuum] - Vacuum 목적 및 종류)

 

 

각 두개의 파일 설명은 아래와 같다.

 

- fsm

 

free space map 의 약자로써, 해당 객체가 가지고 있는 빈 공간블록 정보를 가지고 있음. 차후 vacuum 및 빠른 데이터 조작을 하기 위해 DB 가 참조하는 파일임

 

- vm 

 

visibility map 의 약자로써, 실제 사용하는 자료의 정보만 가지고 있음. 자료 조회 시 사용하는 실행 계획 중 full sequence scan (다른 DB 의 full scan 과 동일한 실행 계획) 을 수행할 때 사용한다.

 

 

그 이외에 임시 테이블은 파일 명 앞에  t_ 접두사가 붙어서 생성되며, 사용 후에는 자동 삭제 된다.

 

 

pg_tblspc 

 

테이블스페이스 정보를 보관하는 공간으로써 데이터베이스 영역의 파일, 데이터들을 보관하는 공간이라는 측면에서 다른 RDBMS 와 수행하는 기능이 유사하다. 단, 테이블스페이스와 객체간의 관계가 종속 관계인 ORACLE 과는 달리, PostgreSQL / PPAS 에서는 독립관계이며 (즉, 테이블스페이스에 무조건 정보들을 보관할 필요가 없다.), 주 기능은 기존 DB 의 data 영역 공간이 부족 시, 타 OS 파티션 영역을 DB 보관 공간으로 사용 할 수 있도록 구성을 해 주는 것이다.

 

pg_xlog -> pg_wal (10이상)

 

PostgreSQL / PPAS 10 버전 이전에는 pg_xlog 지만, 그 이후 버전에서는 pg_wal 로 변경되었다.

타 RDBMS 에서 사용하는 Redo 로그파일 의 개념인 WAL 파일들을 보관하는 공간이다. 

(참조 페이지 : 2021.04.06 - [DB 관련 지식/DB 기본 개념] - 리두 로그 (Redo Log))

DB가 비정상 종료되어 기록중이던 데이터들을 디스크에 쓰지못했을 때, 복구하는 용도로 쓰는것이 1순위 기능이며 (이는 REDO 로그의 존재 의의와 동일), PostgreSQL / PPAS 에서는 이를 사용하여 replication 을 건다. 

 

보통 생각하는 ORACLE Redo 로그 파일 순환과 다른점이 있는데 PostgreSQL / PPAS 에서는 pg_wal 파일을 지속적으로 만들어서 쌓아 두다가 변경 데이터들을 메모리에서 디스크에 써내리는 checkpoint 가 일어나면 해당 시점이전의 파일들을 삭제한다. 그래서 이러한 삭제파일들도 보관하여 나중에 필요시 복구 때 쓸수 있도록 설정하는 것이 archive 다.

ORACLE 과 동일하게 archive 는 기본 설정이 OFF 이므로, 운영서버에서는 필수로 설정을 해줘야 한다.

 

pg_log

 

데이터베이스 운영중에 발생하는 특이사항들을 모두 기록하는 파일들을 보관하는 영역이다. 단, 이영역은 archive 와 같이 기본 구성이 아니라서 디렉토리 생성 및 conf 파일에서 on 설정을 해줘야 한다. (on 및 재기동 후, 이를 담당하는 프로세스인 logger 가 추가로 뜬다.)

 

status directories (트랜잭션 상태 보관 디렉토리)

 

해당 디렉토리들은 운영중인 DB 에서 트랜잭션들의 진행 상태 및 commit 여부 등의 정보를 보관하는 공간이다.

대표적인 디렉토리들은 아래와 같다.

 

- pg_clog -> pg_xact (10이상)

 

2비트 단위로 트랜잭션이 커밋중인지, 아직 트랜잭션 진행중인지에 대한 상태값을 2비트로 보관하는 공간이다. 파일한개당 약 100만개 보관이 가능하며 최대 트랜잭션 보관 상한은 autovacuum_freeze_max_age 파라미터값에 따른다.

 

- pg_multixact

 

DB lock 중 shared row lock 처리를 위해서 이 lock 에 연관되는 트랜잭션들의 상태값을 보관

 

- pg_serial

 

DB 격리 level 중 serializable 과 연관되는 트랜잭션들의 상태값을 보관

(참조 페이지 : 2021.03.07 - [PostgreSQL/아키텍처 및 내부 구조] - PostgreSQL / PPAS 트랜잭션 Isolation Level)

 

- pg_subtrans

 

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

 

- pg_twophase

 

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

 

- pg_snaphots

 

Database 에서는 격리성이나 특정 lock 등의 이유로 데이터가 변경되기 이전의 상태값을 보관해서 데이터를 변경중인 클라이언트 이외에 데이터를 조회해야하는 클라이언트가 변경전의 데이터 상태값을 볼수 있도록 해주는 것이 중요하다.

(참조 페이지 : 2021.03.07 - [PostgreSQL/아키텍처 및 내부 구조] - PostgreSQL / PPAS 트랜잭션 Isolation Level)

이 때, 데이터의 특정 상태값을 snapshot 으로 보관하게 되는데, 이 때 이 snapshot 들을 보관하는 디렉토리다.

 

configureation files (설정 파일)

 

DB 의 설정값들을 변경하기 위해 사용하는 파일들. 대표적인 파일은 전역 파라미터 설정 파일인 postgresql.conf, 유저 및 서버별 접근 허용 설정 파일인 pg_hba.conf 가 있다.

 

postmaster info files

 

DB 기동 시, 같이 기동되는 PostgreSQL / PPAS 의 핵심 프로세스인 (다른 부속 프로세스들을 관리한다.) postmaster 프로세스 정보를 가지고 있는 파일이다. (postmaster.opts, postmaster.pid)

(참조 페이지 : 2021.03.19 - [PostgreSQL/아키텍처 및 내부 구조] - PostgreSQL / PPAS 기본 아키텍처 (Engine))

반응형
Comments