PostgreSQL 아키텍처 이해
PostgreSQL은 클라이언트/서버 RDMS(관계형 데이터베이스 관리 시스템)입니다. PostgreSQL은 Azure Cosmos DB for PostgreSQL 옵션의 Citus 확장과 같은 광범위한 확장도 지원합니다. 데이터베이스에 로드된 확장은 기본 제공 기능처럼 작동합니다.
PostgreSQL에는 pgsql이라는 자체 쿼리 언어도 있습니다. 또한 PostgreSQL은 Ruby on Rails와 같은 절차 언어를 지원합니다.
클라이언트/서버 아키텍처
PostgreSQL은 클라이언트/서버 아키텍처를 기반으로 합니다. 서버는 데이터를 저장 및 관리하고 클라이언트 프로그램에 반환합니다. 클라이언트 프로그램은 PostgreSQL에서 지원하는 절차 언어(예: PL/pgSQL) 중 하나를 사용하여 데이터를 요청합니다.
PostgreSQL 세션은 세 부분으로 구성됩니다.
- postmaster
- 클라이언트 애플리케이션
- 서버입니다.
Postmaster
Postmaster는 PostgreSQL 서버를 관리하는 감독 디먼 프로세스입니다. Postmaster 디먼은 서버 초기화, 서버 종료, 연결 요청 처리, 기타 백그라운드 프로세스 수행 등 다양한 서버 프로세스 간의 통신을 관리합니다. Azure Database for PostgreSQL에서 파일 시스템 또는 Postmaster 프로세스에 액세스할 수 없습니다.
클라이언트 애플리케이션
클라이언트는 쿼리를 실행하고 Azure Database for PostgreSQL 서버의 데이터베이스와 상호 작용합니다. 쿼리를 실행하려면 Azure Data Studio, DBeaver, pgAdmin 또는 psql과 같은 클라이언트 도구가 필요합니다. 다음 모듈에서는 클라이언트 도구에 대해 알아봅니다.
서버 프로세스
클러스터 - 단일 PostgreSQL 서버가 여러 사용자 데이터베이스를 호스팅할 수 있습니다. PostgreSQL은 이 데이터베이스 컬렉션을 클러스터라고 합니다. 각 데이터베이스는 서로 별개이며 사용자와 애플리케이션은 단일 데이터베이스와 상호 작용합니다. 사용자는 클러스터 또는 서버 수준에서 만들어집니다.
이러한 데이터베이스에 대한 데이터는 PGDATA라는 클러스터의 데이터 디렉터리에 저장됩니다. PGDATA 데이터 디렉터리에는 실행 중인 PostgreSQL 버전이 포함된 파일, 테이블스페이스에 대한 링크가 포함된 pg_tblspc, 미리 쓰기 로그 파일이 포함된 pg_xlog가 들어 있습니다.
참고
Azure Databases for PostgreSQL은 스토리지 및 기본 파일 시스템을 관리하는 서비스입니다. 이 서버의 사용자는 PGDATA 디렉터리 또는 해당 하위 디렉터리에 직접 액세스할 수 없습니다.
사용자가 만드는 데이터베이스 외에도 세 가지 시스템 데이터베이스가 있습니다.
- postgres - 기본 데이터베이스입니다. 서버가 만들어진 후 postgres 데이터베이스에 연결합니다.
- azure_maintenance - 서비스 프로세스를 관리하는 데이터베이스입니다. 이 데이터베이스는 직접 액세스할 수 없습니다.
- azure_sys - 쿼리 저장소 데이터베이스입니다. azure_sys 데이터베이스 또는 해당 스키마를 수정하면 안 됩니다. azure_sys의 내용을 변경하면 쿼리 저장소 및 기타 성능 함수가 올바르게 작동하지 않습니다.
스키마 - 스키마는 데이터베이스 개체의 명명된 그룹화입니다. 개체가 많은 대규모 데이터베이스는 개체를 스키마로 구성하면 이점을 누릴 수 있습니다. 예를 들어 판매 관련 개체에 대한 스키마를 만들고 클라이언트 관련 개체에 대한 스키마를 만들면 올바른 개체를 더 쉽게 찾을 수 있습니다.
서버 매개 변수 - PostgreSQL에는 데이터베이스 엔진의 작동 방식을 결정하는 여러 구성 파일이 있습니다. 기본 PostgreSQL 구성 파일을 postgresql.conf라고 합니다.
Azure Database for PostgreSQL에서는 이러한 구성 파일을 Azure Portal 또는 Azure CLI를 사용하여 액세스할 수 있는 서버 매개 변수로 대체했습니다.
Azure Portal에서 서버 매개 변수를 보거나 수정하려면
- Azure Database for PostgreSQL 서버로 이동합니다.
- 왼쪽 메뉴의 설정 아래에서 서버 매개 변수를 선택합니다.
- 검색 창을 사용하여 매개 변수 목록을 필터링하거나 필요한 페이지 번호를 선택합니다.
스토리지 - Azure Database for PostgreSQL은 사용자 대신 데이터 스토리지를 관리하고 서버 수준에서 프로비전됩니다. 버스트 가능, 범용 또는 메모리 최적화 컴퓨팅 계층 무엇을 선택하든 최대 32TB의 스토리지를 사용할 수 있습니다. 스토리지를 프로비전하려면 Azure Database for PostgreSQL 서버로 이동하고 개요 섹션에서 구성을 선택합니다. 컴퓨팅 + 스토리지 섹션이 표시됩니다. 스토리지의 스토리지 크기(GB) 아래에서 슬라이더를 사용하여 프로비전할 스토리지 크기를 선택합니다.
프로비전하는 스토리지 양은 Azure Database for PostgreSQL 서버에 사용할 수 있는 I/O 용량을 정의합니다. Azure Portal 또는 Azure CLI 명령을 사용하여 I/O 사용량을 모니터링할 수 있습니다. 모니터링할 관련 메트릭은 스토리지 제한, 스토리지 비율, 스토리지 사용됨 및 IO 백분율입니다.
참고
Azure Database for PostgreSQL 서버를 만든 후 스토리지 크기를 늘릴 수 있지만 스토리지 양을 줄일 수는 없습니다.
테이블스페이스 - PostgreSQL의 온-프레미스 구현에서는 pg_tblspc 하위 디렉터리를 사용하여 PGDATA라는 주 스토리지 영역에 연결된 테이블스페이스를 만들 수 있습니다. Azure Database for PostgreSQL은 테이블스페이스를 지원하지 않습니다. 모든 테이블이 주 스토리지 영역에 만들어집니다.
시스템 카탈로그 - PostgreSQL에는 데이터베이스 개체에 대한 정보를 저장하는 많은 시스템 테이블 및 뷰가 포함되어 있습니다. 예를 들어, pg_database는 서버의 모든 데이터베이스를 반환하고 pg_class는 테이블에 대한 통계를 저장합니다.
참고 항목
Azure Database for PostgreSQL는 일부 시스템 카탈로그에만 액세스를 허용합니다.
확장 - PostgreSQL은 데이터베이스 엔진의 핵심 기능을 확장하는 다양한 확장을 지원합니다. 이러한 확장은 PGXN(PostgreSQL 확장 네트워크)이라는 리포지토리에서 사용할 수 있습니다.
PostgreSQL 확장을 사용하려면 데이터베이스에 설치해야 합니다. 확장을 설치하려면 psql 도구에서 CREATE EXTENSION 명령을 실행하여 확장을 데이터베이스에 로드합니다. 예를 들어:
SELECT create_extension('postgis');
Azure Database for PostgreSQL을 지원하는 확장을 찾으려면 다음 쿼리를 실행합니다.
SELECT * FROM pg_available_extensions;
모든 Azure Database for PostgreSQL 서버에는 pg_stat_statements 확장이 포함됩니다. 이 확장은 SQL 문의 실행 통계를 추적하는 기능을 제공하기 위해 이미 설치되어 있습니다. 서버 매개 변수 pg_stat_statements.track은 확장에서 계산되는 문을 정의합니다. 옵션은 다음과 같습니다.
- 상위 - 클라이언트에서 직접 실행한 모든 문을 추적합니다(기본값).
- 없음 - 문이 추적되지 않습니다.
- 모두 - 중첩된 문과 함수에서 호출한 문을 포함하여 모든 문을 추적합니다.
참고
서버가 각 SQL 문을 로그하는 데는 성능 오버헤드가 있습니다. pg_stat_statements를 적극적으로 사용하지 않는 경우 이 매개 변수를 없음으로 설정하세요. 단, 일부 타사 모니터링 서비스가 pg_stat_statements에 의존할 수 있습니다.
쿼리 최적화 프로그램 - PostgreSQL은 비용 기반 쿼리 최적화 방법을 사용합니다. 파서는 쿼리 구문을 확인하고 쿼리를 여러 부분으로 구분합니다. 파서는 구문 분석 트리를 만들고 쿼리에 규칙을 적용하는 재작성기에 쿼리를 전달합니다. 계획 도구는 쿼리가 실행되기 전에 쿼리를 실행하는 가장 좋은 방법을 찾아냅니다.
백 엔드 프로세스 - PostgreSQL 트랜잭션별 프로세스 모델입니다. 새 사용자가 연결되면 PostgreSQL은 사용자를 인증하고 연결을 처리하는 백 엔드 서버 프로세스를 만듭니다. 클라이언트는 쿼리를 제출하고 쿼리 결과를 받을 때만 서버 프로세스와 상호 작용합니다.