다음을 통해 공유


Microsoft Fabric에서 Azure Database for PostgreSQL의 미러링

패브릭의 미러링을 사용하면 복잡한 ETL(변환 로드 추출)을 방지하고 기존 Azure Database for PostgreSQL 유연한 서버 자산을 Microsoft Fabric의 나머지 데이터와 통합할 수 있습니다. 기존 Azure Database for PostgreSQL을 Fabric OneLake에 직접 지속적으로 복제할 수 있습니다. Fabric 내에서 강력한 비즈니스 인텔리전스, 인공 지능, 데이터 엔지니어링, 데이터 과학 및 데이터 공유 시나리오의 잠금을 해제할 수 있습니다.

아키텍처

Azure Database for PostgreSQL의 패브릭 미러링은 논리적 복제 및 CDC(변경 데이터 캡처) 디자인 패턴과 같은 개념을 기반으로 합니다.

PostgreSQL 유연한 서버 인스턴스에 대한 Azure Database의 데이터베이스에 대해 패브릭 미러링이 설정되면 PostgreSQL 백그라운드 프로세스는 선택한 테이블을 미러링할 초기 스냅샷을 만듭니다. 이 스냅샷은 Parquet 형식의 Fabric OneLake 랜딩 존으로 제공됩니다. Fabric에서 실행되는 복제자 프로세스는 이러한 초기 스냅샷 파일을 가져와 미러된 데이터베이스 아티팩트에서 델타 테이블을 만듭니다.

선택한 테이블에 적용된 후속 변경 내용도 원본 데이터베이스에서 캡처되고 미러된 데이터베이스 아티팩트에서 해당 델타 테이블에 적용되도록 일괄 처리로 OneLake 랜딩 존으로 전송됩니다.

Azure Database for PostgreSQL 유연한 서버 인스턴스의 패브릭 미러링에 대한 엔드투엔드 아키텍처 다이어그램.

CDC(변경 데이터 캡처)란?

CDC(변경 데이터 캡처)는 애플리케이션이 데이터베이스에 대한 변경 내용을 검색하고 캡처할 수 있도록 하는 방법입니다.

명시적 SQL 쿼리를 사용하여 변경 내용을 추적하지 않습니다.

대신 데이터베이스 서버에서 게시한 변경 이벤트의 연속 스트림이 포함됩니다.

클라이언트는 이 스트림을 구독하여 특정 데이터베이스, 개별 테이블 또는 테이블 내의 열 하위 집합에 중점을 두고 변경 내용을 모니터링할 수 있습니다.

패브릭 미러링의 경우 CDC 패턴은 azure_cdc이라는 독점 PostgreSQL 확장에서 구현됩니다. Azure Database for PostgreSQL 유연한 서버 인스턴스에 대한 컨트롤 플레인은 패브릭 미러링 사용 워크플로 중에 원본 데이터베이스에 설치되고 등록됩니다.

Azure 변경 데이터 캡처(CDC) 확장 기능

Azure CDC는 논리 디코딩 기능을 향상시키는 PostgreSQL의 확장입니다.

WAL(Write-Ahead 로그) 데이터를 해석하고 이해할 수 있는 논리 형식으로 변환합니다.

확장은 데이터베이스 수정을 INSERT, UPDATE 및 DELETE와 같은 논리 작업 시퀀스로 변환합니다.

Azure CDC는 PostgreSQL의 기본 제공 논리 디코딩 플러그 인 pgoutput위에 있는 계층입니다.

Azure CDC는 테이블 스냅샷 및 수정 내용을 Parquet 파일로 내보내고 후속 처리를 위해 Fabric OneLake 랜딩 존에 복사합니다.

Azure Portal에서 패브릭 미러링 사용

Azure Database for PostgreSQL 유연한 서버 인스턴스에 대한 Azure Portal의 패브릭 미러링을 사용하면 PostgreSQL 데이터베이스를 Microsoft Fabric에 복제할 수 있습니다. 이 기능을 사용하면 Microsoft Fabric의 다른 서비스와 데이터를 원활하게 통합하여 고급 분석, 비즈니스 인텔리전스 및 데이터 과학 시나리오를 사용할 수 있습니다. Azure Portal에서 몇 가지 간단한 단계를 수행하면 필요한 필수 구성 요소를 구성하고 Microsoft Fabric의 모든 잠재력을 사용하도록 데이터베이스 미러링을 시작할 수 있습니다.

필수 조건

PostgreSQL 유연한 서버 인스턴스용 Azure Database에서 패브릭 미러링을 사용하기 전에 몇 가지 필수 구성 요소를 구성해야 합니다.

  • 시스템 할당 SAMI(관리 ID) 를 사용하도록 설정해야 합니다.\

    • Azure CDC에서 Fabric OneLake와의 통신을 인증하고, 초기 스냅샷을 복사하고, 배치를 랜딩 존으로 변경하는 데 사용하는 ID입니다.
  • wal_level 서버 매개 변수는 "논리"로 설정해야 합니다.

    • 원본 서버에 대해 논리적 복제를 사용하도록 설정합니다.

    Azure CDC 확장(azure_cdc)은 원본 서버에 미리 로드되고 선택한 데이터베이스가 미러링되도록 등록됩니다(다시 시작해야 합니다).

  • max_worker_processes 서버 매개변수를 증가시켜 미러링을 위한 더 많은 백그라운드 프로세스를 수용해야 합니다.

Azure Portal에서 새 페이지를 사용하여 원본 서버에서 필수 구성 요소 구성을 자동화할 수 있습니다.

Azure Portal에서 활성화를 시작하는 새 패브릭 미러링 페이지를 보여 주는 스크린샷

시작하기를 선택하여 활성화 워크플로를 시작합니다.

선택한 데이터베이스에 대한 Azure Portal의 새 패브릭 미러링 페이지를 보여 주는 스크린샷

이 페이지에는 필요한 필수 구성 요소의 현재 상태가 표시됩니다. 이 서버에 대해 SAMI(시스템 할당 관리 ID)를 사용하도록 설정하지 않은 경우 이 기능을 사용하도록 설정할 수 있는 페이지로 리디렉션할 링크를 선택합니다.

완료되면 데이터베이스를 선택하여 패브릭 미러링을 활성화할 수 있습니다(기본적으로 최대 3개까지 가능하지만 max_mirrored_databases 서버 매개 변수를 변경하여 늘릴 수 있습니다) 그런 다음 준비를 선택합니다.

워크플로는 다시 시작 서버 팝업을 표시하고 다시 시작을 선택하면 프로세스를 시작하여 나머지 구성 단계를 모두 자동화하고 Fabric 사용자 인터페이스에서 미러된 데이터베이스 만들기를 시작할 수 있습니다.

미러링할 준비가 된 서버를 보여 주는 패브릭 미러링 페이지입니다.

서버 매개 변수

이러한 서버 매개 변수는 Azure Database for PostgreSQL에 대한 패브릭 미러링에 직접 영향을 줍니다.

  • Azure.fabric_mirror_enabled: 기본값이 꺼져 있습니다. 이 매개 변수는 서버에서 미러링을 사용할 수 있는지 여부를 나타내는 플래그를 지정합니다. 서버 사용 워크플로의 끝에 자동으로 설정되므로 수동으로 변경해서는 안 됩니다.

  • max_replication_slots: 기본값 10. 미러된 데이터베이스당 하나의 복제 슬롯을 사용하지만, 고객이 미러를 더 만들거나 다른 용도(논리적 복제)를 위해 다른 복제 슬롯을 만든 경우 이를 늘리는 것을 고려할 수 있습니다.

  • max_wal_senders: 기본값은 10입니다. 이전 매개 변수와 마찬가지로 미러당 하나의 wal 송신 프로세스를 사용하며, 더 많은 데이터베이스를 미러링할 때는 송신 프로세스를 증가시키는 것이 좋습니다.

  • max_worker_processes: 기본값은 8입니다. 초기 스냅샷 후에는 미러된 데이터베이스당 하나의 프로세스를 사용하거나 미러링이 사용하도록 설정된 경우(하지만 아직 Fabric에서 미러된 아티팩트가 만들어지지 않았습니다). 더 많은 작업자 프로세스를 사용하는 다른 확장 또는 워크로드가 있는 경우 이 값을 늘려야 합니다.

  • max_parallel_workers: 기본값은 8로, 동시에 실행할 수 있는 작업자 수를 제한합니다. 동일한 서버에서 여러 미러링 세션을 사용하도록 설정하는 경우 더 많은 병렬 작업(예: 초기 스냅샷에서 병렬 처리 증가)을 허용하도록 이 매개 변수를 늘리는 것이 좋습니다.

  • azure_cdc.max_fabric_mirrors 기본값은 3입니다. 고객은 이 서버에서 3개 이상의 데이터베이스를 미러링해야 하는 경우 이 값을 늘릴 수 있습니다. 모든 새 미러된 데이터베이스는 서버 리소스(스냅샷 생성 및 변경 일괄 처리를 위해 CPU 및 메모리 리소스를 사용하는 5개의 백그라운드 프로세스)를 사용하므로 서버 사용량에 따라 리소스 사용률을 모니터링하고 CPU 및 메모리 사용률이 지속적으로 80개 이상의% 또는 성능이 예상과 다른 경우 사용 가능한 다음 크기로 컴퓨팅 크기를 확장해야 합니다.

  • azure_cdc.max_snapshot_workers: 기본값은 3입니다. 초기 스냅샷을 만드는 동안 사용되는 작업자 프로세스의 최대 수입니다. 미러된 데이터베이스 수를 늘릴 때 초기 스냅샷 생성 속도를 높이려면 이 값을 늘입니다. 그러나 이 작업을 수행하기 전에 시스템에서 실행되는 다른 모든 백그라운드 프로세스를 고려해야 합니다.

  • azure_cdc.change_batch_buffer_size: 기본값은 16MB입니다. 변경 일괄 처리의 최대 버퍼 크기(MB)입니다. 이 표에는 로컬 디스크에 기록되기 전에 버퍼링된 많은 데이터가 표시됩니다. 미러된 데이터베이스의 데이터 변경 빈도에 따라 이 값을 조정하여 변경 일괄 처리 빈도를 줄이거나 전체 처리량의 우선 순위를 지정하려는 경우 늘릴 수 있습니다.

  • azure_cdc.change_batch_export_timeout: 기본값은 30입니다. 변경 일괄 처리 메시지 사이의 최대 유휴 시간(초)입니다. 초과하면 현재 일괄 처리를 완료로 표시합니다. 미러된 데이터베이스의 데이터 변경 빈도에 따라 이 값을 조정하여 변경 일괄 처리 빈도를 줄이거나 전체 처리량의 우선 순위를 지정하려는 경우 늘릴 수 있습니다.

  • azure_cdc.parquet_compression: 기본값은 ZSTD입니다. 이 매개 변수는 내부 전용이므로 수정하면 안 됩니다.

  • azure_cdc.snapshot_buffer_size: 기본값은 1000입니다. 초기 스냅샷 버퍼의 최대 크기(MB)입니다. 이 테이블에 따르면, 많은 데이터가 Fabric으로 전송되기 전에 버퍼에 저장됩니다. azure_cdc.snapshot_buffer_size*azure_cdc.max_snapshot_workers는 초기 스냅샷 중에 사용되는 총 메모리 버퍼입니다.

  • azure_cdc.snapshot_export_timeout: 기본값은 180입니다. 초기 스냅샷을 내보내는 최대 시간(분)입니다. 최대 시간을 초과하면 다시 시작됩니다.

Monitor

Azure Database for PostgreSQL 유연한 서버 인스턴스에서 패브릭 미러링을 모니터링하는 것은 미러링 프로세스가 원활하고 효율적으로 실행되도록 하는 데 필수적입니다. 미러된 데이터베이스의 상태를 모니터링하여 잠재적인 문제를 식별하고 필요에 따라 수정 작업을 수행할 수 있습니다.

여러 사용자 정의 함수 및 테이블을 사용하여 PostgreSQL 유연한 서버 인스턴스에 대한 Azure Database의 중요한 CDC 메트릭을 모니터링하고 Fabric에 대한 미러링 프로세스 문제를 해결할 수 있습니다.

모니터링 기능

Azure Database for PostgreSQL의 패브릭 미러링 미러링 함수를 사용하면 PostgreSQL 데이터베이스를 Microsoft Fabric에 원활하게 복제하여 고급 분석 및 데이터 통합 시나리오를 사용할 수 있습니다.

  • azure_cdc.list_tracked_publications(): 원본 유연한 서버 인스턴스의 각 게시에 대해 publicationName (text) - includeData (bool) - includeChanges (bool) - active (bool) - baseSnapshotDone (bool) - generationId (int) 정보를 포함하는 쉼표로 구분된 문자열을 반환합니다.

  • azure_cdc.publication_status('pub_name'): 원본의 각 게시에 대해 유연한 서버 인스턴스는 다음 정보가 포함된 쉼표로 구분된 문자열을 반환합니다.

    • <상태, start_lsn, stop_lsn, flush_lsn>.
    • 상태는 ["슬롯 이름", "원본 이름", "CDC 데이터 대상 경로", "활성", "스냅샷 완료", "진행률", "생성 ID", "완료된 일괄 처리 ID", "업로드된 일괄 처리 ID", "CDC 시작 시간"으로 구성됩니다.
  • azure_cdc.is_table_mirrorable('schema_name','table_name'): 스키마 및 테이블 이름이 지정되면 테이블이 미러링 가능한 경우 반환됩니다. 테이블을 미러링할 수 있도록 하려면 다음을 충족해야 합니다.

    • 열 이름에는 다음 문자가 포함되지 않습니다. [ ;{}\n\t=()]
    • 열 형식은 다음 중 하나입니다.
      • bigint
      • bigserial
      • boolean
      • bytes
      • character
      • character varying
      • date
      • double precision
      • integer
      • numeric
      • real
      • serial
      • oid
      • money
      • smallint
      • smallserial
      • text
      • time without time zone
      • time with time zone
      • timestamp without time zone
      • timestamp with time zone
      • uuid
    • 테이블은 뷰, 구체화된 뷰, 외래 테이블, 알림 테이블 또는 분할된 테이블이 아님
    • 테이블에는 기본 키가 있거나 고유하고 null이 아니며 부분적이지 않은 인덱스가 있습니다.

추적 데이터 테이블

  • azure_cdc.tracked_publications: Fabric의 기존 미러된 데이터베이스 각각에 대해 한 행입니다. 각 게시의 상태를 이해하려면 이 테이블을 쿼리합니다.
열 이름 Postgres 형식 Explanation
출판물_아이디 oid 게시물의 Oid
대상 경로 문자 메시지 Fabric OneLake의 랜딩 존 경로
destination_format azure_cdc.data_format Azure CDC의 데이터 형식
include_data bool 게시에 초기 스냅샷 데이터를 포함할지 여부
변경사항포함 bool 게시에 변경 내용을 포함할지 여부
active bool 게시가 활성 상태인지 여부
스냅샷 완료 bool 스냅샷 완료 여부
snapshot_progress 스몰인트 스냅샷 진행률
스냅샷_진행률_백분율 문자 메시지 스냅샷의 백분율 진행률
세대_아이디 정수 (int) 생성자 식별자
stream_start_lsn pg_lsn 변경 스트림이 시작된 로그 시퀀스 번호
스트림_시작_시간 시간표시 변경 스트림이 시작된 타임스탬프
stream_stop_lsn pg_lsn 변경 스트림이 중지된 로그 시퀀스 번호
스냅샷 크기 빅인트 (bigint) 스냅샷의 총 크기(바이트)
총_시간 정수 (int) 게시에 소요된 총 시간(초)입니다.
  • azure_cdc.tracked_batches: 캡처되어 패브릭 OneLake로 전송되는 각 변경 일괄 처리에 대해 한 행입니다. 이 테이블을 쿼리하여 어떤 일괄 처리가 이미 캡처되어 Fabric OneLake에 업로드되었는지 확인합니다. last_written_lsn 열을 사용하면 원본 데이터베이스의 지정된 트랜잭션이 이미 Fabric으로 제공되었는지 이해할 수 있습니다.
이름 Postgres 형식 Explanation
출판물_아이디 oid 게시물의 Oid
완료된_배치_ID 빅인트 (bigint) 일괄 처리의 시퀀스 번호(1부터 시작)입니다. 출판물별 고유
last_written_lsn pg_lsn 이 일괄 처리의 마지막 쓰기의 LSN
last_received_lsn pg_lsn 마지막으로 받은 LSN
server_lsn pg_lsn 현재 서버 LSN(이 일괄 처리 캡처가 완료된 시점)
일괄 업로드됨 여부 bool 일괄 처리 업로드 여부
일괄 처리 승인됨인지 bool 이 일괄 처리 데이터에 대해 wal_sender를 인지했는지 여부(last_written_lsn)
배치 시작 시간 타임스탬프츠 일괄 처리 시작의 타임스탬프
배치 완료 시간 타임스탬프츠 일괄 처리 완료의 타임스탬프
batch_uploaded_time 타임스탬프츠 일괄 처리 업로드의 타임스탬프
batch_acknowledged_time 타임스탬프츠 LSN이 게시자에게 ack된 일괄 처리의 타임스탬프
배치 크기 정수 (int) 일괄 처리 크기(바이트)