다음을 통해 공유


Azure Database for PostgreSQL - 유연한 서버와 관련된 확장 고려 사항

이 문서에서는 Azure Database for PostgreSQL 유연한 서버 인스턴스에서 특정 확장을 사용할 때 알아야 할 몇 가지 특별한 고려 사항에 대해 설명합니다.

필수 조건

Azure Database for PostgreSQL용 PostgreSQL 확장을 사용하여 다음 방법을 알아보는 방법을 알아봅니다.

  • Azure Database for PostgreSQL 유연한 서버의 허용 목록 확장
  • 공유 메모리 할당 및 액세스가 필요하고 서버가 시작될 때 로드해야 하는 이진 라이브러리를 배포하는 확장 라이브러리를 로드합니다.
  • 해당 확장에 패키지된 SQL 개체가 해당 데이터베이스에 배포되고 해당 컨텍스트에서 액세스할 수 있도록 일부 데이터베이스에 확장을 설치합니다.
  • 일부 데이터베이스에서 확장을 삭제하여 해당 확장에 패키지된 SQL 개체가 해당 데이터베이스에서 제거되도록 합니다.
  • 이미 설치된 확장에서 배포한 SQL 아티팩트를 업데이트합니다.
  • 설치된 확장 및 해당 버전을 확인합니다.
  • Azure Database for PostgreSQL 유연한 서버에서 확장을 관리할 때 발생할 수 있는 오류와 각 오류의 원인에 대해 알아봅니다.

확장

다음 목록은 Azure Database for PostgreSQL 유연한 서버 서비스에서 사용할 때 특정 고려 사항이 필요한 지원되는 모든 확장을 열거합니다.

  • dblink
  • pg_buffercache
  • pg_cron
  • pg_failover_slots
  • pg_hint_plan
  • pg_prewarm
  • pg_repack
  • pg_stat_statements
  • postgres_fdw
  • pgstattuple

확장을 dblink 통해 한 Azure Database for PostgreSQL 유연한 서버 인스턴스에서 동일한 서버의 다른 데이터베이스 또는 다른 데이터베이스에 연결할 수 있습니다. Azure Database for PostgreSQL 유연한 서버는 PostgreSQL 서버에 대한 수신 및 발신 연결을 모두 지원합니다. 발신 서버는 수신 서버에 대한 아웃바운드 연결을 허용해야 합니다. 마찬가지로, 수신 서버는 발신 서버의 연결을 허용해야 합니다.

이 확장을 사용하려는 경우 가상 네트워크 통합을 사용하여 서버를 배포하는 것이 좋습니다. 기본적으로 가상 네트워크 통합은 가상 네트워크의 서버 간에 연결을 허용합니다. 또한 가상 네트워크의 네트워크 보안 그룹을 사용하여 액세스를 사용자 지정하도록 선택할 수 있습니다.

pg_buffercache

확장은 pg_buffercache shared_buffers 내용을 연구하는 데 사용할 수 있습니다. 이 확장을 사용하여 특정 관계가 캐시되는지 여부를 알 수 있습니다(inshared_buffers). 이 확장은 성능 문제(캐싱 관련 성능 문제)를 해결하는 데 도움이 될 수 있습니다.

이 확장은 PostgreSQL의 핵심 설치와 통합되며 설치하기 쉽습니다.

CREATE EXTENSION pg_buffercache;

pg_cron

확장은 pg_cron 데이터베이스 내에서 확장으로 실행되는 PostgreSQL에 대한 간단한 cron 기반 작업 스케줄러입니다. 확장은 pg_cron PostgreSQL 데이터베이스 내에서 예약된 유지 관리 작업을 실행할 수 있습니다. 예를 들어 테이블의 주기적인 진공을 실행하거나 이전 데이터 작업을 제거할 수 있습니다.

확장은 pg_cron 여러 작업을 병렬로 실행할 수 있지만 한 번에 최대 하나의 작업 인스턴스에서 실행됩니다. 첫 번째 실행이 완료되기 전에 두 번째 실행이 시작되어야 하는 경우 첫 번째 실행이 완료되는 즉시 두 번째 실행이 대기되고 시작됩니다. 이러한 방식으로 작업이 예약된 시간만큼 정확하게 실행되고 자신과 동시에 실행되지 않도록 합니다.

설정된 값 shared_preload_libraries 에 .가 포함되어 있는지 확인합니다 pg_cron. 이 확장은 CREATE EXTENSION 실행의 영향으로 라이브러리 로드를 지원하지 않습니다. 확장이 추가되지 않았거나 서버가 추가 shared_preload_libraries된 후 다시 시작되지 않은 경우 CREATE EXTENSION을 실행하려고 하면 텍스트가 표시 pg_cron can only be loaded via shared_preload_libraries되고 힌트 Add pg_cron to the shared_preload_libraries configuration variable in postgresql.conf가 있는 오류가 발생합니다.

사용pg_cron하려면 라이브러리가 서버 시작 시 로드되도록 추가되고 허용 목록에 추가되며, 라이브러리가 만든 SQL 아티팩트에서 해당 기능과 상호 작용하려는 모든 데이터베이스에 설치되어 있는지 확인합니다.

예제

  1. 토요일 오전 3시 30분(GMT)에 이전 데이터를 삭제합니다.

    SELECT cron.schedule('30 3 * * 6', $$DELETE FROM events WHERE event_time < now() - interval '1 week'$$);
    
  2. 기본 데이터베이스 postgres에서 매일 오전 10:00(GMT)에 진공을 실행합니다.

    SELECT cron.schedule('0 10 * * *', 'VACUUM');
    
  3. pg_cron의 모든 작업 일정을 취소하려면

    SELECT cron.unschedule(jobid) FROM cron.job;
    
  4. 현재 pg_cron에 예약된 모든 작업을 보려면

    SELECT * FROM cron.job;
    
  5. 역할 계정의 데이터베이스 test cron 에서 매일 오전 10:00(GMT)에 진공을 azure_pg_admin 실행합니다.

    SELECT cron.schedule_in_database('VACUUM',' 0 10 * * * ', 'VACUUM', 'testcron',null,TRUE);
    

추가 예제

pg_cron 버전 1.4부터는 함수와 cron.alter_job 함수를 사용하여 cron.schedule_in_database 특정 데이터베이스에서 작업을 예약하고 각각 기존 일정을 업데이트할 수 있습니다.

이 함수는 cron_schedule_in_database 사용자 이름을 선택적 매개 변수로 허용합니다. 사용자 이름을 null이 아닌 값으로 설정하려면 PostgreSQL 슈퍼 사용자 권한이 필요하며 Azure Database for PostgreSQL 유연한 서버에서는 지원되지 않습니다. 앞의 예제에서는 선택적 사용자 이름 매개 변수를 생략하거나 null로 설정하여 이 함수를 실행하는 방법을 보여 줍니다. 이 매개 변수는 역할 권한이 있어야 azure_pg_admin 하는 작업을 예약하는 사용자의 컨텍스트에서 작업을 실행합니다.

  1. 데이터베이스 DBName에서 토요일 오전 3시 30분(GMT)에 이전 데이터를 삭제합니다.

    SELECT cron.schedule_in_database('JobName', '30 3 * * 6', $$DELETE FROM events WHERE event_time < now() - interval '1 week'$$,'DBName');
    
  2. 기존 일정의 데이터베이스 이름을 업데이트하거나 변경하려면

    SELECT cron.alter_job(job_id:=MyJobID,database:='NewDBName');
    

pg_failover_slots

이 확장은 pg_failover_slots 논리 복제 및 고가용성 사용 서버를 모두 사용하는 경우 Azure Database for PostgreSQL 유연한 서버를 향상시킵니다. 장애 조치 후에 논리 복제 슬롯을 유지하지 않는 표준 PostgreSQL 엔진 내의 문제를 효과적으로 해결합니다. 이러한 슬롯을 유지 관리하는 것은 주 서버 역할 변경 중에 복제 일시 중지 또는 데이터 불일치를 방지하여 운영 연속성 및 데이터 무결성을 보장하는 데 중요합니다.

확장은 복제 슬롯의 필요한 전송, 정리 및 동기화를 관리하여 장애 조치 프로세스를 간소화하므로 서버 역할 변경 중에 원활한 전환을 제공합니다.

GitHub 페이지에서 확장을 사용하는 pg_failover_slots 방법에 대한 자세한 내용과 지침을 찾을 수 있습니다.

확장을 사용 pg_failover_slots 하려면 서버가 시작될 때 라이브러리가 로드되었는지 확인합니다.

pg_hint_plan

확장을 pg_hint_plan 사용하면 다음과 같은 SQL 주석에서 소위 "힌트"를 사용하여 PostgreSQL 실행 계획을 조정할 수 있습니다.

/*+ SeqScan(a) */

확장은 pg_hint_plan 대상 SQL 문과 함께 지정된 특수 양식의 주석에서 힌트 구를 읽습니다. 특정 양식은 문자 시퀀스 "/*+"로 시작하고 "*/"로 끝납니다. 힌트 구는 힌트 이름과 괄호로 묶이고 공백으로 구분된 다음 매개 변수로 구성됩니다. 가독성을 위해 새 줄은 각 힌트 구를 구분할 수 있습니다.

예시:

/*+
 HashJoin(a b)
 SeqScan(a)
 */
    SELECT *
    FROM pgbench_branches b
    JOIN pgbench_accounts an ON b.bid = a.bid
    ORDER BY a.aid;

이전 예제에서는 플래너가 테이블의 결과를 seqscan 테이블 a b hashjoin과 결합하도록 합니다.

확장을 사용 pg_hint_plan 하려면 확장을 허용 목록에 추가하고, 해당 라이브러리를 로드하고, 해당 기능을 사용하려는 데이터베이스에 확장을 설치해야 합니다.

pg_prewarm

확장은 pg_prewarm 관계형 데이터를 캐시에 로드합니다. 캐시를 미리 준비하면 다시 시작한 후 첫 실행 시 쿼리의 응답 시간이 향상됩니다. PostgreSQL 유연한 서버에 대한 자동 설명 기능은 현재 Azure Database에서 사용할 수 없습니다.

pg_repack

확장의 pg_repack 처음 사용자는 일반적으로 다음과 같은 질문을 합니다. pg_repack 확장 또는 클라이언트 쪽 실행 파일은 다음과 같 psql 습니까 pg_dump?

pg_repack 실제로 둘 다입니다. pg_repack/lib 에는 만든 스키마 및 SQL 아티팩트 및 여러 함수의 코드를 구현하는 C 라이브러리를 포함하여 확장에 대한 코드가 있습니다.

반면에 pg_repack/bin 에는 확장에 구현된 프로그래밍 기능 요소와 상호 작용하는 방법을 알고 있는 클라이언트 애플리케이션에 대한 코드가 있습니다. 이 클라이언트 애플리케이션은 서버 쪽 확장에 의해 표면화된 다양한 인터페이스와 상호 작용하는 복잡성을 완화하는 것을 목표로 합니다. 사용자에게 이해하기 쉬운 몇 가지 명령줄 옵션을 제공합니다. 가리키는 데이터베이스에서 만든 확장이 없으면 클라이언트 애플리케이션은 쓸모가 없습니다. 서버 쪽 확장은 자체적으로 완벽하게 작동하지만 사용자가 복잡한 상호 작용 패턴을 이해해야 합니다. 이 패턴은 쿼리를 실행하여 확장에 의해 구현된 함수에 대한 입력으로 사용되는 데이터를 검색하는 등으로 구성됩니다.

스키마 재포장에 대한 권한이 거부되었습니다.

현재 이 확장에서 만든 다시 패키지 스키마에 대한 권한을 부여하기 때문에 컨텍스트azure_pg_admin에서 실행 pg_repack 기능만 지원합니다.

그렇지 않은 azure_pg_admin테이블의 소유자가 실행 pg_repack하려고 하면 다음과 같은 오류가 발생합니다.

NOTICE: Setting up workers.conns
ERROR: pg_repack failed with error: ERROR:  permission denied for schema repack
LINE 1: select repack.version(), repack.version_sql()

이 오류를 방지하려면 컨텍스트 azure_pg_admin에서 pg_repack 실행합니다.

pg_stat_statements

pg_stat_statements 확장을 사용하면 데이터베이스에서 실행되는 모든 쿼리를 볼 수 있습니다. 이는 프로덕션 시스템에서 쿼리 워크로드 성능을 이해하는 데 유용합니다.

pg_stat_statements 확장은 SQL 문 실행 통계를 추적하는 수단을 제공하기 위해 모든 Azure Database for PostgreSQL 유연한 서버 인스턴스에 미리 로드 shared_preload_libraries 됩니다.

보안상의 이유로 pg_stat_statements 확장을 허용 목록에 추가하고 CREATE EXTENSION 명령을 사용하여 설치해야 합니다.

확장에서 추적하는 문을 제어하는 설정 pg_stat_statements.track은 기본적으로 top클라이언트에서 직접 발급한 모든 문을 추적합니다. 다른 두 가지 추적 수준은 noneall입니다. 이 설정은 서버 매개 변수로 구성할 수 있습니다.

각 SQL 문을 기록할 때 확장에서 서버 성능에 제공하는 쿼리 실행 정보 pg_stat_statements 간에는 절충이 있습니다. pg_stat_statements 확장을 적극적으로 사용하지 않는 경우 pg_stat_statements.tracknone으로 설정하는 것이 좋습니다. 일부 타사 모니터링 서비스는 쿼리 성능 인사이트를 제공하기 위해 의존 pg_stat_statements 할 수 있으므로 이것이 적합한지 확인합니다.

postgres_fdw

확장을 postgres_fdw 통해 한 Azure Database for PostgreSQL 유연한 서버 인스턴스에서 동일한 서버의 다른 데이터베이스 또는 다른 데이터베이스에 연결할 수 있습니다. Azure Database for PostgreSQL 유연한 서버는 PostgreSQL 서버에 대한 수신 및 발신 연결을 모두 지원합니다. 발신 서버는 수신 서버에 대한 아웃바운드 연결을 허용해야 합니다. 마찬가지로, 수신 서버는 발신 서버의 연결을 허용해야 합니다.

이 확장을 사용하려는 경우 가상 네트워크 통합을 사용하여 서버를 배포하는 것이 좋습니다. 기본적으로 가상 네트워크 통합은 가상 네트워크의 서버 간에 연결을 허용합니다. 또한 가상 네트워크의 네트워크 보안 그룹을 사용하여 액세스를 사용자 지정하도록 선택할 수 있습니다.

pgstattuple

확장을 사용하여 pgstattuple Postgres 11~13 버전에서 스키마에 pg_toast 보관된 개체에서 튜플 통계를 가져오려고 하면 "스키마 pg_toast 대한 사용 권한 거부" 오류가 표시됩니다.

스키마 pg_toast 대한 사용 권한이 거부됨

Azure Database for Flexible Server에서 PostgreSQL 버전 11~13을 사용하는 고객은 스키마 내 pg_toast 의 개체에서 확장을 사용할 pgstattuple 수 없습니다.

PostgreSQL 16 및 17 pg_read_all_data 에서는 역할이 자동으로 부여되어 azure_pg_admin올바르게 작동할 수 있습니다 pgstattuple . PostgreSQL 14 및 15에서 고객은 동일한 결과를 얻기 위해 역할을 수동으로 부여 pg_read_all_dataazure_pg_admin 수 있습니다. 그러나 PostgreSQL 11~13에서는 pg_read_all_data 역할이 존재하지 않습니다.

고객은 필요한 권한을 직접 부여할 수 없습니다. 스키마 아래 pg_toast 의 개체에 액세스하기 위해 실행할 pgstattuple 수 있어야 하는 경우 Azure 지원 요청을 만듭니다.

timescaleDB

확장은 timescaleDB PostgreSQL에 대한 확장으로 패키지된 시계열 데이터베이스입니다. 시계열 워크로드에 대한 시간 지향 분석 함수 및 최적화 및 배율 Postgres를 제공합니다. Timescale, Inc.의 등록 상표인 TimescaleDB에 대한 자세한 정보를 알아봅니다. Azure Database for PostgreSQL 유연한 서버는 TimescaleDB Apache-2 버전을 제공합니다.

TimescaleDB 설치

사용timescaleDB하려면 확장을 허용 목록에 추가하고, 해당 라이브러리를 로드하고, 해당 기능을 사용하려는 데이터베이스에 확장을 설치해야 합니다.

이제 TimescaleDB 하이퍼테이블을 처음부터 새로 만들거나 PostgreSQL에서 기존 시계열 데이터를 마이그레이션할 수 있습니다.

pg_dump 및 pg_restore를 사용하여 Timescale 데이터베이스 복원

다음을 사용하여 pg_dump pg_restoreTimescale 데이터베이스를 복원하려면 대상 timescaledb_pre_restore() timescaledb_post restore()데이터베이스에서 두 가지 도우미 프로시저를 실행해야 합니다.

먼저 대상 데이터베이스를 준비합니다.

--create the new database where you want to perform the restore
CREATE DATABASE tutorial;
\c tutorial --connect to the database
CREATE EXTENSION timescaledb;

SELECT timescaledb_pre_restore();

이제 원래 데이터베이스에서 실행 pg_dump 한 다음 pg_restore수행할 수 있습니다. 복원 후 복원된 데이터베이스에서 다음 명령을 반드시 실행하세요.

SELECT timescaledb_post_restore();

Timescale 사용 데이터베이스를 사용하는 복원 방법에 대한 자세한 내용은 Timescale 설명서를 참조 하세요.

timescaledb-backup을 사용하여 Timescale 데이터베이스 복원

프로시저를 SELECT timescaledb_post_restore() 실행하는 동안 timescaledb.restoring 플래그를 업데이트할 때 사용 권한이 거부될 수 있습니다. 이는 Cloud PaaS 데이터베이스 서비스에서 제한된 ALTER DATABASE 권한 때문입니다. 이 경우 도구를 사용하여 Timescale 데이터베이스를 timescaledb-backup 백업하고 복원하는 대체 방법을 수행할 수 있습니다. Timescaledb-backup은 TimescaleDB 데이터베이스를 더 간단하게 덤프 및 복원하고 오류가 발생하기 쉽고 성능이 더 좋은 프로그램입니다.

이렇게 하려면 다음 단계를 따르십시오.

  1. 여기에 설명된 대로 도구를 설치합니다.

  2. 대상 Azure Database for PostgreSQL 유연한 서버 인스턴스 및 데이터베이스를 만듭니다.

  3. 시간 표시줄 확장을 사용하도록 설정합니다.

  4. ts-restore에서 azure_pg_admin 사용하는 사용자에게 역할을 부여합니다.

  5. ts-restore를 실행하여 데이터베이스를 복원합니다.

이러한 유틸리티에 대한 자세한 내용은 여기에서 확인할 수 있습니다.

확장 및 주 버전 업그레이드

Azure Database for PostgreSQL 유연한 서버는 사용자의 간단한 상호 작용만으로 Azure Database for PostgreSQL 유연한 서버 인스턴스의 현재 위치 업그레이드를 수행하는 현재 위치 주 버전 업그레이드 기능을 제공합니다. 전체 주 버전 업그레이드는 Azure Database for PostgreSQL 유연한 서버 업그레이드 프로세스를 간소화하여 서버에 액세스하는 사용자 및 애플리케이션의 중단을 최소화합니다. 현재 위치 주 버전 업그레이드는 특정 확장을 지원하지 않으며 특정 확장을 업그레이드하는 데 몇 가지 제한 사항이 있습니다.

현재 위치 주 버전 업데이트 기능을 사용하는 경우 모든 Azure Database for PostgreSQL 유연한 서버 버전에 대해 확장anondblinkApache AGEorafce, , pgauditpostgres_fdwtimescaledb 및 지원되지 않습니다.