次の方法で共有


Microsoft Fabric での Azure Database for PostgreSQL ミラーリング

Fabric のミラーリングは、複雑な ETL (変換読み込みの抽出) を回避し、既存の Azure Database for PostgreSQL フレキシブル サーバー資産を Microsoft Fabric の残りのデータと統合する簡単なエクスペリエンスを提供します。 既存の Azure Database for PostgreSQL を Fabric OneLake に直接継続的にレプリケートできます。 Fabric 内では、強力なビジネス インテリジェンス、人工知能、データ エンジニア、データ サイエンス、データ共有のシナリオのロックを解除できます。

Architecture

Azure Database for PostgreSQL のファブリック ミラーリングは、 論理レプリケーション や Change Data Capture (CDC) 設計パターンなどの概念に基づいて構築されています。

Azure Database for a PostgreSQL フレキシブル サーバー インスタンスのデータベースに対してファブリック ミラーリングが確立されると、PostgreSQL バックグラウンド プロセスによって、選択したテーブルの初期スナップショットが作成され、ミラーリングされます。このスナップショットは、Parquet 形式の Fabric OneLake ランディング ゾーンに出荷されます。 Fabric で実行されているレプリケーター プロセスは、これらの初期スナップショット ファイルを取得し、ミラー化されたデータベース成果物に差分テーブルを作成します。

選択したテーブルに適用された後続の変更もソース データベースでキャプチャされ、OneLake ランディング ゾーンにバッチで出荷され、ミラー化されたデータベース成果物内のそれぞれの Delta テーブルに適用されます。

Azure Database for PostgreSQL フレキシブル サーバー インスタンスでのファブリック ミラーリングのエンド ツー エンド アーキテクチャの図。

Change Data Capture (CDC) とは

Change Data Capture (CDC) は、アプリケーションがデータベースに加えられた変更を検出してキャプチャできるようにする方法です。

変更を追跡するために明示的な SQL クエリに依存することはありません。

代わりに、データベース サーバーによって発行された変更イベントの連続ストリームが含まれます。

クライアントは、このストリームをサブスクライブして、特定のデータベース、個々のテーブル、またはテーブル内の列のサブセットに焦点を当てて、変更を監視できます。

ファブリック ミラーリングの場合、CDC パターンは、azure_cdcと呼ばれる独自の PostgreSQL 拡張機能に実装されます。 Azure Database for PostgreSQL フレキシブル サーバー インスタンスのコントロール プレーンは、ファブリック ミラーリング有効化ワークフロー中にソース データベースにインストールおよび登録されます。

Azure Change Data Capture (CDC) 拡張機能

Azure CDC は、論理デコードの機能を強化する PostgreSQL の拡張機能です。

Write-Ahead Log (WAL) データを解釈し、理解しやすい論理形式に変換します。

この拡張機能は、データベースの変更を、INSERT、UPDATE、DELETE などの一連の論理操作に変換します。

Azure CDC は、PostgreSQL の組み込みの論理デコード プラグイン ( pgoutput) 上のレイヤーです。

Azure CDC は、テーブルのスナップショットと変更を Parquet ファイルとしてエクスポートし、後続の処理のために Fabric OneLake ランディング ゾーンにコピーします。

Azure portal で Fabric ミラーリングを有効にする

Azure Database for PostgreSQL フレキシブル サーバー インスタンス用の Azure portal でのファブリック ミラーリングを使用すると、PostgreSQL データベースを Microsoft Fabric にレプリケートできます。 この機能を使用すると、データを Microsoft Fabric の他のサービスとシームレスに統合し、高度な分析、ビジネス インテリジェンス、データ サイエンスのシナリオを実現できます。 Azure portal でいくつかの簡単な手順に従うことで、必要な前提条件を構成し、Microsoft Fabric の可能性を最大限に活用するためにデータベースのミラーリングを開始できます。

[前提条件]

Azure Database for the PostgreSQL フレキシブル サーバー インスタンスでファブリック ミラーリングを使用する前に、いくつかの前提条件を構成する必要があります。

  • システム割り当てマネージド ID (SAMI) を 有効にする必要があります。\

    • これは、Azure CDC が Fabric OneLake との通信を認証し、初期スナップショットをコピーし、バッチをランディング ゾーンに変更するために使用される ID です。
  • wal_level サーバー パラメーターは "論理" に設定する必要があります。

    • ソース サーバーの論理レプリケーションを有効にします。

    Azure CDC 拡張機能 (azure_cdc) は、ソース サーバーに事前に読み込まれており、選択したデータベースがミラー化されるように登録されます (再起動が必要です)。

  • max_worker_processes サーバーパラメーターは、ミラーリングのためのバックグラウンドプロセスを増やすために増加させる必要があります。

ソース サーバーでの前提条件の構成を自動化するために、Azure portal で新しいページを使用できます。

有効化を開始する Azure portal の [New Fabric ミラーリング] ページを示すスクリーンショット。

[ 作業の開始] を 選択して有効化ワークフローを開始します。

選択したデータベースの Azure portal の [New Fabric ミラーリング] ページを示すスクリーンショット。

このページには、必要な前提条件の現在の状態が表示されます。 このサーバーでシステム割り当てマネージド ID (SAMI) が有効になっていない場合は、この機能を有効にできるページにリダイレクトするリンクを選択します。

完了したら、ファブリック ミラーリングを有効にするデータベースを選択し (既定では最大 3 つまでですが、 max_mirrored_databases サーバー パラメーターを変更することでこれを増やすことができます)、[ 準備] を選択します。

このワークフローでは、サーバーの再起動ポップアップが表示されます。[再起動] を選択すると、プロセスを開始できます。このプロセスでは、残りの構成手順がすべて自動化され、Fabric ユーザー インターフェイスからミラー化されたデータベースの作成を開始できます。

サーバーをミラーリングする準備ができていることを示すファブリック ミラーリング ページ。

サーバー パラメーター

これらのサーバー パラメーターは、Azure Database for PostgreSQL のファブリック ミラーリングに直接影響します。

  • Azure.fabric_mirror_enabled: 既定値はオフです。 このパラメーターは、サーバーでミラーリングが有効かどうかを示すフラグを指定します。 サーバー有効化ワークフローの最後に自動的に設定されるため、手動で変更しないでください。

  • max_replication_slots: 既定値は 10 です。 ミラー化されたデータベースごとに 1 つのレプリケーション スロットを使用しますが、ミラーを増やしたり、他の目的 (論理レプリケーション) 用に他のレプリケーション スロットを作成したりする場合は、これを増やすことを検討できます。

  • max_wal_senders: 既定値は 10 です。 前のパラメーターと同様に、ミラーごとに 1 つの wal 送信側プロセスを使用します。これは、より多くのデータベースをミラーリングするときに増やす必要があります。

  • max_worker_processes: 既定値は 8 です。 初期スナップショットの後、ミラー化されたデータベースごとに 1 つのプロセスを使用するか、ミラーリングが有効になっている場所を使用します (ただし、ミラー化された成果物はまだ 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: 既定値は 16 MB です。 変更バッチの最大バッファー サイズ (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 フレキシブル サーバー インスタンスでの Fabric ミラーリングの監視は、ミラーリング プロセスがスムーズかつ効率的に実行されるようにするために不可欠です。 ミラー化されたデータベースの状態を監視することで、潜在的な問題を特定し、必要に応じて是正措置を講じることができます。

複数のユーザー定義関数とテーブルを使用して、Azure Database for the PostgreSQL フレキシブル サーバー インスタンスの重要な CDC メトリックを監視し、ファブリックへのミラーリング プロセスのトラブルシューティングを行うことができます。

監視機能

Azure Database for PostgreSQL の Fabric ミラーリングのミラーリング機能を使用すると、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'): ソース内の各パブリケーションについて、フレキシブル サーバー インスタンスは次の情報を含むコンマ区切りの文字列を返します。

    • <status、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 の既存のミラー化されたデータベースごとに 1 行。 このテーブルにクエリを実行して、各パブリケーションの状態を把握します。
列名 Postgres の種類 Explanation
publication_id oid パブリケーションの OID
送信先のパス SMS 送信 Fabric OneLake のランディング ゾーンへのパス
destination_format azure_cdc.data_format Azure CDC のデータの形式
include_data ブール (bool) パブリケーションに初期スナップショット データを含めるかどうか
変更を含める ブール (bool) パブリケーションに変更を含めるかどうか
活動中 ブール (bool) パブリケーションがアクティブかどうか
スナップショット完了 ブール (bool) スナップショットが完了したかどうか
スナップショット進捗 smallint(スモールイント) スナップショットの進行状況
スナップショット進行割合 SMS 送信 スナップショットの進行状況の割合
世代識別子 整数 (int) 生成識別子
stream_start_lsn pg_lsn 変更ストリームが開始されたログ シーケンス番号
ストリーム開始時刻 timestamp 変更ストリームが開始されたときのタイムスタンプ
stream_stop_lsn pg_lsn 変更ストリームが停止したログ シーケンス番号
スナップショットサイズ bigint スナップショットの合計サイズ (バイト単位)
総時間 整数 (int) パブリケーションにかかった合計時間 (秒単位)
  • azure_cdc.tracked_batches: Fabric OneLake にキャプチャおよび出荷される変更バッチごとに 1 行。 このテーブルにクエリを実行して、どのバッチが既にキャプチャされ、Fabric OneLake にアップロードされているかを把握します。 last_written_lsn列を使用すると、ソース データベース内の特定のトランザクションが既に Fabric に出荷されているかどうかを理解できます。
名前 Postgres の種類 Explanation
publication_id 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)
バッチ開始時間 TIMESTAMPTZ バッチ開始のタイムスタンプ
バッチ完了時間 TIMESTAMPTZ バッチ完了のタイムスタンプ
バッチアップロード時間 TIMESTAMPTZ バッチ アップロードのタイムスタンプ
バッチ確認時刻 TIMESTAMPTZ LSN がパブリッシャーに受信確認されたときのバッチのタイムスタンプ
バッチサイズ 整数 (int) バッチのサイズ (バイト単位)