Tmax OpenSQL 개발 엔지니어가 직접 제공하는 기술 자료입니다.
포스트별 댓글로 작성자와 직접 대화할 수 있어요! 궁금한 게 있다면 질문을 남겨주세요!
Tutorials
제품 설치 요구 및 설치 가이드

PostgreSQL Install
참고 메뉴얼
•
PostgreSQL 공식 문서 : https://www.postgresql.org/docs/
•
PostgreSQL 공식 위키 : https://wiki.postgresql.org/wiki/Main_Page
해당 문서는 위 공식 문서와 위키를 참고하여 작성되었습니다.
지원 플랫폼 및 OS
•
PostgreSQL Build Farm 에서 install 현황이 update 되고 있으니 참고 바랍니다.
패키지
필수 패키지
필수 패키지는 아래와 같은 사양을 요구합니다.
•
GNU Make 3.80 이상
PostgreSQL Install
SYB
Internals
PostgreSQL 의 Internal Architecture 포스팅

Overview
Chapter 2에서 우리는 백엔드 프로세스에 대해 설명하였습니다. 백엔드 프로세스는 자신이 담당하는 커넥션으로부터 들어온 쿼리를 처리하는 역할을 수행합니다. 본 문서에는 조금 더 깊게 들어가서 백엔드 프로세스가 쿼리를 처리(Query Processing)하는 쿼리를 처리하는 과정을 소개하겠습니다.
백엔드 프로세스에서 쿼리를 처리하는 각 과정은 다음과 같습니다. 각 과정을 하나 씩 설명드리겠습니다.
Parser
대부분의 데이터베이스와 마찬가지로 PostgreSQL은 SQL 문법으로 작성된 문자열(평문) 형태의 쿼리를 입력으로 받습니다. Parser는 입력받은 쿼리의 문법(Syntax)를 검증하는 작업을 수행합니다. 또한 문법 구조를 바탕으로 Parse Tree를 생성하는 역할을 수행합니다.
The parser has to check the query string (which arrives as plain text) for valid syntax.
The parser stage creates a parse tree using only fixed rules about the syntactic structure of SQL.
- PostgreSQL 공식 문서 -
문법 검증을 수행한다는 것은 SELECT, FROM, WHERE 등이 구문이 적절한 위치에 쓰여졌는지, 쉼표가 적절히 쓰여졌는지 만을 판단한다는 의미입니다. 따라서, Parser에서는 실제 테이블, 컬럼의 존재 여부와 같은 Semantic 검증은 수행하지 않습니다. 해당 작업은 Analyzer에서 수행합니다.
Parser에서 수행하는 단계를 정확히 이해하기 위하여 Parse Tree라는 개념에 대해서 알 필요가 있습니다. Parse Tree는 Parse Node라고 불리는 구조체들로 이루어진 Tree입니다. Parse Node는 해당 구문의 성격(INSERT, SELECT 등)에 따라 상이한 내용을 담고 있습니다. Parse Node 구조체의 정의는 다음에서 살펴볼 수 있습니다.(”Stmt”를 접미사로 가지는 구조체들)

Analyzer
Analyzer는 Parser에서 생성한 Parse Tree를 입력 받아 Query Tree를 생성합니다. 상술하였듯 Parse Tree는 문법만 고려되어 있고 실제 테이블, 컬럼과 같은 의미론적인(Semantic) 내용은 포함하고 있지 않습니다. Analyzer에서는 Parse Tree에서 언급하는 테이블, 컬럼, 연산자의 유효성 등에 대한 Semantic 검증을 System Catalog 조회를 통해 수행하고, 해당 내용을 추가하여 Query Tree를 생성합니다. 즉, Query Tree는 Parse Tree와 달리 테이블, 컬럼을 참조하기 위한 정보를 포함하고 있다는 점에서 차이를 보입니다.
the transformation process takes the tree handed back by the parser as input and does the semantic interpretation needed to understand which tables, functions, and operators are referenced by the query. The data structure that is built to represent this information is called the query tree.
- PostgreSQL 공식 문서 -
Query Tree의 루트 노드는 다음에 Query라는 이름의 구조체로 구현되어 있습니다. (*Parse Tree의 구조체들과 같은 곳에 구현되어 있으니 유의바랍니다.)
PostgreSQL의 쿼리 엔진 - Overview
JBH
JSW

Executor? 
Query Processing 과정에서 Optimizer가 생성한 실행 계획에 따라 데이터 가공에 필요한 알고리즘을 실행 시키는 레이어를 Executor라고 부릅니다. 실행 계획은 Plan Node로 이루어진 Plan Tree라는 형태로 저장되는데, 각 Plan Node에는 실행 계획의 각 단계에서 실행되어야 하는 알고리즘에 대한 함수 포인터가 있습니다. Executor는 실행 계획을 순회하여 사용자가 요구한 결과물을 위해 데이터를 가공합니다.
이번 포스팅에서는 Executor가 데이터 가공을 하는 전반적인 과정을 소개하고 Executor의 동작에 영향을 미치는 메모리 설정 파라미터를 소개하도록 하겠습니다.
Executor 프레임워크 개요 
Executor가 Query를 처리하는 프레임워크는 pquery.c 파일에 정의된 ProcessQuery 함수에서 수행됩니다. 해당 함수의 수행 과정은 아래와 같이 간략하게 정리할 수 있습니다.
1.
실행 계획 수행에 필요한 초기 정보를 담은 메타데이터 생성 (CreateQueryDesc 호출)
2.
실행 계획 수행 중 사용될 리소스와 표현식에 대한 정보 초기화 (ExecutorStart 호출)
3.
실행 계획 수행 (ExecutorRun 호출)
4.
실행 계획 수행 완료 후 해야 하는 마무리 작업 수행 (ExecutorFinish 호출)
5.
실행 계획 수행에 사용한 상태 정보 초기화 및 리소스 해제 (ExecutorEnd 호출)
6.
Query Metadata 해제 (FreeQueryDesc 호출)
각 단계 별로 어떤 작업을 하는지 자세히 살펴보겠습니다.
Query Metadata 생성 (CreateQueryDesc 호출)
실행 계획 수행에 필요한 초기 정보를 QueryDesc 라는 객체를 초기화하고 담아주게 됩니다. QueryDesc 객체에는 Optimizer가 생성한 Plan Tree와 Query에서 참조해야 하는 스냅샷 정보, 그리고 바인드 변수 정보 등이 있습니다.
PostgreSQL의 쿼리 엔진 - Executor
JSW
Technical Guide
Admin, Feature, Backup, Operating 관련 기술 가이드 포스팅

pg_ctl 개요
pg_ctl 이란?
pg_ctl is a utility for initializing a PostgreSQL database cluster, starting, stopping, or restarting the PostgreSQL database server (postgres), or displaying the status of a running server.
- PostgreSQL 공식 문서 -
pg_ctl은 PostgreSQL 데이터베이스 클러스터를 초기화하고, 데이터베이스 서버를 시작, 중지 또는 재시작 또는 실행 중인 서버의 상태를 표시하는 유틸리티입니다. 서버를 수동으로 시작할 수 있지만, pg_ctl은 로그 출력 재연결 및 터미널과 프로세스 그룹에서 적절하게 분리하는 것과 같이 태스크를 캡슐화 합니다. 또한 여러 옵션이 포함된 종료 모드를 제공합니다.
pg_ctl 문법
pg_ctl 옵션
pg_ctl 문법 ( for Windows )
pg_ctl 옵션 (for Windows)
pg_ctl 모드
pg_ctl
AJY

pg_basebackup의 개요
pg_basebackup이란?
pg_basebackup is used to take a base backup of a running PostgreSQL database cluster. The backup is taken without affecting other clients of the database, and can be used both for point-in-time recovery and as the starting point for a log-shipping or streaming-replication standby server.
- PostgreSQL 공식 문서 -
pg_basebackup은 실행 중인 PostgreSQL 데이터베이스 클러스터의 기본 백업을 수행하는 데 사용됩니다. 백업은 데이터베이스의 다른 클라이언트에 영향을 주지 않으며 PITR과 Log-shipping 또는 Streaming Replication을 구성하는 데에 시작 점으로 사용할 수 있습니다.
pg_basebackup은 데이터베이스 클러스터 파일의 복사본을 만들면서 동시에 서버가 자동으로 백업 모드로 전환 되거나 종료되도록 합니다. 백업은 항상 전체 데이터베이스 클러스터에서 수행되며 개별 데이터베이스 또는 데이터베이스 오브젝트는 백업할 수 없습니다. 선택적 백업의 경우
pg_dump
와 같은 다른 도구를 사용해야 합니다.
백업은 복제 프로토콜을 이용하여 이루어지며, 복제 권한이 있거나 수퍼유저인 사용자를 사용하여 연결해야하고, pg_hba.conf가 복제 연결을 허용해야 합니다. 또한 서버는 백업 용 wal sender와 스트리밍용 wal sender가 하나 이상 사용할 수 있도록 max_wal_sender를 충분히 높게 설정해야 합니다.
동시에 여러 개의 pg_basebackup을 실행할 수 있지만, 일반적으로 성능 측면에서는 하나의 백업만 수행하고 결과를 복사하는 것이 좋습니다.
pg_basebackup이 기본 백업을 수행할 때마다 서버의 pg_stat_progress_basebackup 뷰에서 백업 진행 률을 확인할 수 있습니다.
Standby 서버 백업
pg_basebackup은 primary 서버 뿐만 아니라 standby 서버에서도 백업을 만들 수 있습니다. 백업을 실행하기 전에 다음을 설정해주어야 합니다.
그리고 standby 상태에서 백업을 수행하는 데는 몇 가지 제한 사항이 있습니다.
•
백업 된 데이터베이스 클러스터에 백업 기록 파일이 생성되지 않습니다.
•
pg_basebackup은 백업이 끝날 때 까지 새 WAL파일로 강제 전환할 수 없습니다. -X none 을 사용하고 primary 의 WRITE 작업이 거의 없는 경우, pg_basebackup은 백업에 필요한 마지막 WAL파일을 전환하고 아카이브 할 때까지 오랜 시간 기다려야 할 수 있습니다. 이 경우, 즉시 WAL 파일을 스위치 하려면 primary 서버에서 pg_switch_wal을 실행하는 것이 좋습니다.
pg_basebackup
AJY
CONTACT US

제품 문의 (오전 9시 ~오후 6시)

기술지원 문의 (오전 9시 ~오후 6시)
•