Fabric의 미러링(현재 일반 공급)은 복잡한 ETL(추출 변환 로드)을 피하고 기존 Azure Database for PostgreSQL 자산을 Microsoft Fabric의 나머지 데이터와 통합하는 간편한 환경을 제공합니다. 기존 Azure Database for PostgreSQL을 Fabric OneLake에 직접 지속적으로 복제할 수 있습니다. Fabric 내에서 강력한 비즈니스 인텔리전스, 인공 지능, 데이터 엔지니어링, 데이터 과학 및 데이터 공유 시나리오의 잠금을 해제할 수 있습니다.
중요합니다
Ignite 2025 이후 새로 만든 서버에는 미러링 구성 요소의 최신 일반 공급 버전이 자동으로 포함됩니다. 기존 서버는 수동 개입 없이 다음 유지 관리 주기의 일부로 점진적으로 업그레이드됩니다. 업데이트를 받기 위해 미러링을 사용하지 않도록 설정하고 다시 사용하도록 설정할 필요가 없습니다.
아키텍처
Azure Database for PostgreSQL의 패브릭 미러링은 논리적 복제 및 CDC(변경 데이터 캡처) 디자인 패턴과 같은 개념을 기반으로 합니다.
Azure Database for PostgreSQL 유연한 서버 인스턴스에서 데이터베이스에 대한 패브릭 미러링을 설정하면 PostgreSQL 백그라운드 프로세스에서 선택한 테이블을 미러링할 초기 스냅샷을 만듭니다. 스냅샷을 Parquet 형식으로 Fabric OneLake 착륙 지대에 전송합니다. Fabric에서 실행되는 복제자 프로세스는 이러한 초기 스냅샷 파일을 가져와 미러된 데이터베이스 아티팩트에서 델타 테이블을 만듭니다.
원본 데이터베이스는 선택한 테이블에 적용된 후속 변경 내용을 캡처합니다. 이러한 변경 내용을 미러된 데이터베이스 아티팩트에서 해당 델타 테이블에 적용하기 위해 OneLake 랜딩 존에 일괄 처리로 제공합니다.
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 파일로 내보내고 후속 처리를 위해 Microsoft Fabric OneLake 랜딩 존에 복사합니다.
Azure Portal에서 패브릭 미러링 사용
Azure Database for PostgreSQL 유연한 서버 인스턴스에 대한 Azure Portal의 패브릭 미러링을 사용하면 PostgreSQL 데이터베이스를 Microsoft Fabric에 복제할 수 있습니다. 이 기능을 사용하면 Microsoft Fabric의 다른 서비스와 데이터를 원활하게 통합하여 고급 분석, 비즈니스 인텔리전스 및 데이터 과학 시나리오를 사용할 수 있습니다. Azure Portal에서 몇 가지 간단한 단계를 수행하면 필요한 필수 구성 요소를 구성하고 Microsoft Fabric의 모든 잠재력을 사용하도록 데이터베이스 미러링을 시작할 수 있습니다.
지원되는 버전
Azure Database for PostgreSQL은 패브릭 미러링을 위해 PostgreSQL 14 이상을 지원합니다.
필수 조건
Azure Database for PostgreSQL 유연한 서버 인스턴스에서 패브릭 미러링을 사용하려면 몇 가지 필수 구성 요소를 구성해야 합니다.
-
시스템 할당 SAMI(관리 ID) 를 사용하도록 설정해야 합니다.
- Azure CDC는 이 ID를 사용하여 Fabric OneLake와의 통신을 인증하고, 초기 스냅샷을 복사하고, 배치를 랜딩 존으로 변경합니다.
다음 섹션에 설명된 전용 사용 워크플로를 통해 추가 필수 구성 요소를 구성합니다. 이러한 필수 구성 요소는 다음과 같습니다.
wal_level 서버 매개 변수는 "논리"로 설정해야 합니다.
- 원본 서버에 대해 논리적 복제를 사용하도록 설정합니다.
max_worker_processes 서버 매개변수를 증가시켜 미러링을 위한 더 많은 백그라운드 프로세스를 수용해야 합니다.
azure_cdc 확장. Azure CDC 확장(azure_cdc)은 원본 서버에 미리 로드되고 선택한 데이터베이스가 미러링되도록 등록됩니다(다시 시작해야 합니다).
Azure Portal에서 새 페이지를 사용하여 원본 서버에서 이러한 필수 구성 요소 구성을 자동화할 수 있습니다.
시작하기를 선택하여 활성화 워크플로를 시작합니다.
이 페이지에는 필요한 필수 구성 요소의 현재 상태가 표시됩니다. 이 서버에 대해 SAMI(시스템 할당 관리 ID)를 사용하도록 설정하지 않은 경우 이 기능을 사용하도록 설정할 수 있는 페이지로 리디렉션할 링크를 선택합니다.
완료되면 데이터베이스를 선택하여 패브릭 미러링을 사용하도록 설정한 다음(기본적으로 최대 3개까지, max_mirrored_databases 서버 매개 변수를 변경하여 이 제한을 늘릴 수 있음) 준비를 선택합니다.
워크플로에서 서버 다시 시작 팝업을 표시합니다. 다시 시작을 선택하여 프로세스를 시작합니다. 워크플로는 나머지 모든 구성 단계를 자동화합니다. 패브릭 사용자 인터페이스에서 미러된 데이터베이스 만들기를 시작할 수 있습니다.
패브릭 미러링에 대한 데이터베이스 역할 만들기
다음으로, Fabric 서비스에서 Azure Database for PostgreSQL 유연한 서버에 연결하기 위해 PostgreSQL 역할을 제공하거나 만들어야 합니다.
원본 시스템에 연결하기 위한 데이터베이스 역할을 지정하여 이 작업을 수행할 수 있습니다.
비고
엔트라 ID와 로컬 데이터베이스 역할은 모두 Azure Database for PostgreSQL에 패브릭 미러링을 연결하는 데 지원되며, 목적에 가장 적합한 인증 방법을 선택합니다.
데이터베이스 역할 사용
Visual Studio Code 또는 pgAdmin을 사용하여 Azure Database for PostgreSQL에 연결합니다. 역할
azure_pg_admin의 멤버인 주체와 연결합니다.fabric_user라는 PostgreSQL 역할을 만듭니다. 이 역할의 이름을 선택할 수 있습니다. 고유하고 강력한 암호를 제공합니다. 데이터베이스에서 Fabric 미러링에 필요한 권한을 부여합니다. 다음 SQL 스크립트를 실행하여CREATEDB(이)라는 새 역할에 대한CREATEROLE,LOGIN,REPLICATION,azure_cdc_admin및fabric_user권한을 부여합니다.-- create a new user to connect from Fabric CREATE ROLE fabric_user CREATEDB CREATEROLE LOGIN REPLICATION PASSWORD '<strong password>'; -- grant role for replication management to the new user GRANT azure_cdc_admin TO fabric_user; -- grant create permission on the database to mirror to the new user GRANT CREATE ON DATABASE <database_to_mirror> TO fabric_user;생성하는 데이터베이스 사용자는 또한 미러된 데이터베이스에서 복제하려면 테이블의
owner이어야 합니다. 이 요구 사항은 사용자가 테이블을 만들거나 해당 테이블ALTER TABLE <table name here> OWNER TO fabric_user;의 소유권을 변경한다는 것을 의미합니다.- 소유권을 새 사용자로 전환할 때는 이전에 해당 사용자에게
public스키마에 대한 모든 권한을 부여해야 할 수 있습니다. 사용자 계정 관리에 대한 자세한 내용은 Azure Database for PostgreSQL 사용자 관리 설명서, 데이터베이스 역할 및 권한에 대한 PostgreSQL 제품 설명서, GRANT 구문 및 권한을 참조하세요.
- 소유권을 새 사용자로 전환할 때는 이전에 해당 사용자에게
중요합니다
이전 보안 구성 단계 중 하나가 누락되면 패브릭 포털의 후속 미러링 작업이 Internal error 메시지를 출력하며 실패합니다.
서버 매개 변수
이러한 서버 매개 변수는 Azure Database for PostgreSQL에 대한 패브릭 미러링에 직접 영향을 미치며 복제 프로세스를 Fabric OneLake로 조정하는 데 사용할 수 있습니다.
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입니다. 초기 스냅샷을 내보내는 최대 시간(분)입니다. 최대 시간을 초과하면 다시 시작됩니다.
azure_cdc.prune_local_batches: 기본값은 True입니다. 설정된 경우 성공적으로 업로드되고 wal_sender 승인되면 로컬 디스크에서 일괄 처리 데이터를 제거합니다.
Monitor
Azure Database for PostgreSQL 유연한 서버 인스턴스에서 패브릭 미러링을 모니터링하는 것은 미러링 프로세스가 원활하고 효율적으로 실행되도록 하는 데 필수적입니다. 미러된 데이터베이스의 상태를 모니터링하여 잠재적인 문제를 식별하고 수정 작업을 수행할 수 있습니다.
여러 사용자 정의 함수 및 테이블을 사용하여 Azure Database for PostgreSQL 유연한 서버 인스턴스에서 중요한 CDC 메트릭을 모니터링하고 Fabric에 대한 미러링 프로세스 문제를 해결할 수 있습니다.
모니터링 기능
Azure Database for PostgreSQL의 패브릭 미러링에 대한 미러링 함수는 PostgreSQL 데이터베이스를 Microsoft Fabric에 원활하게 복제하므로 고급 분석 및 데이터 통합 시나리오를 사용할 수 있습니다.
azure_cdc.list_tracked_publications(): 원본 유연한 서버 인스턴스의 각 게시에 대해 다음 정보가 포함된 쉼표로 구분된 문자열을 반환합니다.
- publicationName(텍스트)
- includeData(bool)
- includeChanges(bool)
- active(bool)
- baseSnapshotDone(부울)
- generationId(int)
azure_cdc.publication_status('pub_name'): 원본의 각 게시에 대해 유연한 서버 인스턴스는 다음 정보가 포함된 쉼표로 구분된 문자열을 반환합니다.
- <상태, start_lsn, stop_lsn, flush_lsn>.
- 상태는 ["슬롯 이름", "원본 이름", "CDC 데이터 대상 경로", "활성", "스냅샷 완료", "진행률", "생성 ID", "완료된 일괄 처리 ID", "업로드된 일괄 처리 ID", "CDC 시작 시간"으로 구성됩니다.
azure_cdc.get_all_tables_mirror_status(): 데이터베이스의 모든 적격 테이블에 대한 미러링 상태를 반환합니다. 시스템 스키마(pg_catalog, information_schema, pg_toast) 및 확장 소유 테이블을 제외합니다.
| 열 이름 | Postgres 형식 | Explanation |
|---|---|---|
| 테이블 스키마 | 문자 메시지 | 테이블의 스키마 이름 |
| 테이블 이름 | 문자 메시지 | 테이블의 이름 |
| 미러링_상태 | 문자 메시지 | 전체 상태 - 확인, 경고 또는 오류 |
| 데이터 미러링 | jsonb | 상태, status_code 및 선택적 세부 정보가 포함된 자세한 상태 항목을 포함하는 JSONB 배열 |
| 상태 코드 | Level | Description |
|---|---|---|
| 스키마_존재하지_않음 | 오류 | 지정된 스키마가 없습니다. |
| 테이블이 존재하지 않습니다 | 오류 | 지정한 테이블이 스키마에 없습니다. |
| FORBIDDEN_CHARS_IN_COLUMN_NAME | 오류 | 열 이름에 사용할 수 없는 문자가 포함되어 있습니다. |
| FORBIDDEN_CHARS_IN_TABLE_NAME | 오류 | 테이블 이름에 사용할 수 없는 문자가 포함되어 있습니다. |
| UNSUPPORTED_DATA_TYPE | 경고 | 테이블에 지원되지 않는 데이터 형식의 열이 있습니다. |
| UNSUPPORTED_TYPE_IN_REPLICA_IDENTITY (복제 아이덴티티에서 지원되지 않는 유형) | 오류 | 복제본 ID 열에서 지원되지 않는 데이터 형식(고유 인덱스가 없는 경우) |
| NOT_REGULAR_TABLE | 오류 | 테이블이 일반적인 영구 테이블이 아닙니다. |
| NOT_TABLE_OWNER | 오류 | 현재 사용자가 테이블의 소유자가 아닙니다. |
| 기본 키가 있음 | 그래 | 테이블에 기본 키가 있습니다. |
| HAS_UNIQUE_INDEX | 그래 | 테이블에 적합한 고유 인덱스가 있습니다. |
| NO_INDEX_FULL_IDENTITY | 경고 | 적합한 고유 인덱스가 없습니다. 전체 행 ID가 사용됩니다(성능에 영향을 줄 수 있음). |
- 테이블을 미러링할 수 있도록 하려면 다음 조건을 충족해야 합니다.
- 열 이름에는 다음 문자가 포함되지 않습니다.
[ ;{}\n\t=()] - 열 형식은 다음 형식 중 하나입니다.
bigintbigserialbooleanbytescharactercharacter varyingdatedouble precisionintegernumericrealserialoidmoneysmallintsmallserialtexttime without time zonetime with time zonetimestamp without time zonetimestamp with time zoneuuid
- 테이블은 뷰, 구체화된 뷰, 외래 테이블, 알림 테이블 또는 분할된 테이블이 아님
- 테이블에는 기본 키 또는 고유하고 null을 허용하지 않는 인덱스 및 비파티얼 인덱스가 있습니다. 이러한 필수 조건이 충족되지 않는 경우 미러링이 복제본 ID FULL을 적용하는 데 계속 작동하지만 전체 복제 성능 및 WAL 사용률에 상당한 영향을 줍니다. 사소한 크기의 테이블에 대한 기본 키 또는 고유 인덱스를 사용하는 것이 좋습니다.
- 열 이름에는 다음 문자가 포함되지 않습니다.
추적 데이터 테이블
- 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 |
- azure_cdc.tracked_tables: 모든 게시에 걸쳐 추적되는 각 테이블에 대해 한 행입니다. 모든 출판물에서 게시된 모든 테이블에는 다음 필드가 포함되어 있습니다. 테이블이 두 게시의 일부인 경우 두 번 나열됩니다.
| 이름 | Postgres 형식 | Explanation |
|---|---|---|
| 출판물_아이디 | oid | 게시물의 Oid |
| table_oid | oid | 테이블의 OID |
| sequence_number | 빅인트 (bigint) | 생성된 파일의 시퀀스 번호 |