你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

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 中的结构镜像基于 逻辑复制 和变更数据捕获(CDC)设计模式等概念构建。

为 Azure Database for PostgreSQL 灵活服务器实例中的数据库建立 Fabric 镜像后,PostgreSQL 后台进程将为要镜像的所选表创建初始快照,该快照以 Parquet 格式寄送到 Fabric OneLake 登陆区域。 在 Fabric 中运行的复制程序进程会获取这些初始快照文件,并在镜像数据库项目中创建 Delta 表。

系统还会在源数据库中捕获对所选表实施的后续更改,并将其分批传输到 OneLake 登陆区域,以应用于镜像数据库工件中的相应 Delta 表。

Azure Database for PostgreSQL 灵活服务器实例中 Fabric 镜像的端到端体系结构示意图。

什么是变更数据捕获(CDC)?

变更数据捕获(CDC)是一种方法,使应用程序能够检测和捕获对数据库所做的更改。

它不依赖于显式 SQL 查询来跟踪更改。

而是涉及数据库服务器发布的连续更改事件流。

客户端可以订阅此流来监视更改、专注于特定数据库、单个表,甚至是表中列的子集。

对于 Fabric 镜像,CDC 模式是在名为 azure_cdc 的专有 PostgreSQL 扩展中实现的。 Azure Database for PostgreSQL 灵活服务器实例的控制平面在 Fabric 镜像启用工作流期间被安装,并在源数据库中注册。

Azure 变更数据捕获 (CDC) 扩展功能

Azure CDC 是 PostgreSQL 的扩展,可增强逻辑解码的功能。

它将 Write-Ahead 日志(WAL)数据解释和转换为可理解的逻辑格式。

该扩展把数据库修改转换为一系列逻辑操作,如 INSERT、UPDATE 和 DELETE。

Azure CDC 是 PostgreSQL 内置逻辑解码插件 pgoutput之上的一层。

Azure CDC 将表快照和修改导出为 Parquet 文件,并将其复制到 Fabric OneLake 着陆区以供后续处理。

在 Azure 门户中启用 Fabric 镜像

通过在 Azure 门户中对 Azure Database for PostgreSQL 灵活服务器实例进行 Fabric 镜像,你可以将 PostgreSQL 数据库复制到 Microsoft Fabric 中。 此功能可帮助你将数据与 Microsoft Fabric 中的其他服务无缝集成,实现高级分析、商业智能和数据科学方案。 通过遵循 Azure 门户中的几个简单步骤,可以配置必要的先决条件并开始镜像数据库,以使用 Microsoft Fabric 的全部潜力。

先决条件

在 Azure Database for the PostgreSQL 灵活服务器实例中使用 Fabric 镜像之前,必须配置几个先决条件。

  • 必须启用系统分配的托管标识(SAMI)。\

    • 这是 Azure CDC 用于实现以下目的的身份:验证与 Fabric OneLake 的通信、复制初始快照,以及更改以登陆区域为目的地的分批传输。
  • wal_level 服务器参数必须设置为“logical”。

    • 为源服务器启用逻辑复制。

    Azure CDC 扩展(azure_cdc)已预加载到源服务器上,并注册了所选数据库进行镜像(需要重启)。

  • 必须增加max_worker_processes 服务器参数,以适应更多后台进程进行镜像。

Azure 门户中提供了一个新页面,用于在源服务器上自动执行先决条件配置。

屏幕截图显示了 Azure 门户中用于开始启用的“新建 Fabric 镜像”页面。

选择 “开始” 以启动启用工作流。

显示 Azure 门户中用于特定数据库的

此页面显示所需先决条件的当前状态。 如果未为此服务器启用系统分配的托管标识(SAMI),请选择要重定向到可启用此功能的页面的链接。

完成后,可以选择数据库以启用 Fabric 镜像(默认情况下最多 3 个),但可以通过更改 max_mirrored_databases 服务器参数来增加此作,然后选择“ 准备”。

工作流显示“重启服务器”弹出窗口,通过选择“重启”,可以启动该过程,从而自动执行所有剩余的配置步骤,并且可以从 Fabric 用户界面开始创建镜像数据库

Fabric 镜像页面,显示服务器已准备好进行镜像。

服务器参数

这些服务器参数直接影响 Azure Database for PostgreSQL 的 Fabric 镜像。

  • Azure.fabric_mirror_enabled:默认值为 off。 此参数指定指示是否在服务器上启用镜像的标志。 它在服务器启用工作流结束时自动设置,因此不应手动更改它。

  • max_replication_slots:默认值 10。 我们为每个镜像数据库使用一个复制槽,但如果客户创建更多镜像或创建其他复制槽(逻辑复制),客户可能会考虑增加此槽。

  • max_wal_senders:默认值为 10。 与上一个参数一样,我们为每个镜像使用一个 wal 发送方进程,这在镜像更多数据库时应增加。

  • max_worker_processes:默认值为 8。 初始快照后,我们为每个镜像数据库或已启用镜像但尚未在 Fabric 中创建镜像工件的对象使用一个进程。 如果你有其他扩展或工作负载使用更多工作器进程,则必须增加此值。

  • max_parallel_workers:默认值为 8,这限制了可以同时运行的工作线程数。 如果在同一服务器上启用多个镜像会话,则可以考虑增加此参数以允许更多并行作(例如,在初始快照中增加并行度)。

  • azure_cdc.max_fabric_mirrors 默认值为 3。 如果客户需要镜像此服务器上的三个以上的数据库,则可以增加此值。 请务必考虑,每个新的镜像数据库都会消耗服务器资源(五个后台进程使用 CPU 和内存资源进行快照创建和更改批处理),因此,应持续监控资源利用率,如果 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_worker 是初始快照期间使用的总内存缓冲区。

  • azure_cdc.snapshot_export_timeout:默认值为 180。 导出初始快照的最长时间(以分钟为单位)。 如果超出最大时间,则会重启。

Monitor

在 Azure Database for PostgreSQL 灵活服务器实例中监视 Fabric 镜像对于确保镜像进程平稳高效地运行至关重要。 通过监视镜像数据库的状态,可以识别任何潜在问题,并根据需要采取纠正措施。

你可以使用多个由用户定义的函数和表来监视 Azure Database for PostgreSQL 灵活服务器实例中的重要 CDC 指标,并对 Fabric 镜像过程进行故障排除。

监视功能

Azure Database for PostgreSQL 中 Fabric 镜像的镜像函数允许无缝将 PostgreSQL 数据库复制到 Microsoft Fabric 中,从而实现高级分析和数据集成方案。

  • azure_cdc.list_tracked_publication():对于源灵活服务器实例中的每个发布,返回一个逗号分隔的字符串,其中包含以下信息 - 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
    • 该表不是视图、具体化视图、外表、Toast 表或分区表
    • 该表具有主键或唯一的非空且完整索引。

跟踪表

  • azure_cdc.tracked_publications:Fabric 中每个现有的镜像数据库对应一行。 查询此表以了解每个发布的状态。
列名 Postgres 类型 Explanation
出版物编号 oid 发布的对象标识符
目标路径 文本消息 Fabric OneLake 中登陆区域的路径
目标格式 azure_cdc.data_format Azure CDC 中的数据格式
include_data 布尔 是否在发布中包含初始快照数据
include_changes 布尔 是否在发布中包含更改
活动 布尔 发布项是否处于活跃状态
快照完成 布尔 快照是否已完成
snapshot_progress smallint 快照的进度
快照进度百分比 文本消息 快照进度百分比
generation_id int 生成标识符
stream_start_lsn pg_lsn 更改流启动的日志序列号
stream_start_time(流开始时间) 时间戳 更改流启动时的时间戳
stream_stop_lsn pg_lsn 更改流停止的日志序列号
快照大小 bigint 快照的总大小(以字节为单位)
总时间 int 出版物所用的总时间(以秒为单位)
  • azure_cdc.tracked_batches:捕获并发送到 Fabric OneLake 的每个更改批次对应一行。 查询此表以了解哪些批次已经被捕获并上传到 Fabric OneLake。 通过该 last_written_lsn 列,可以了解源数据库中的给定事务是否已寄送到 Fabric。
Name Postgres 类型 Explanation
出版物编号 oid 发布的对象标识符
completed_batch_id bigint 批的序列号(从 1 开始)。 每个发布唯一
last_written_lsn pg_lsn 此批次的最后一次写入的 LSN
last_received_lsn pg_lsn 上次收到 LSN
server_lsn pg_lsn 当前服务器 LSN(在完成对此批次的捕获时)
is_batch_uploaded 布尔 批次是否已上传
is_batch_acknowledged 布尔 我们是否确认了此批次数据 (last_written_lsn) 的 wal_sender
批处理开始时间 TIMESTAMPTZ 批处理启动的时间戳
批处理完成时间 TIMESTAMPTZ 批处理完成的时间戳
批量上传时间 TIMESTAMPTZ 批量上传的时间戳
批次确认时间 TIMESTAMPTZ 向发布者确认 LSN 时的批次时间戳
批处理大小 int 批的大小(以字节为单位)