更改事件流式处理常见问题解答 (CES)

SQL Server 2025 (17.x) 预览版

以下是 SQL Server 2025 (17.x) 预览版更改事件流功能(CES)功能的解答。

兼容性和要求

CES 是否需要完整恢复模式?

是的。 CES 依赖于读取事务日志,因此必须使用完整恢复模式配置 SQL Server 数据库。

使用 CES 的成本是多少?

对于 CES,Azure 事件中心使用量按标准费率计费。 入口和出口费用也适用。

性能和影响

启用 CES 时,预期性能对具有数百万行的大型数据库有何影响?

性能影响取决于特定的工作负荷和配置。 但是,CES 的开销应低于变更数据捕获(CDC),因为没有将数据写回数据库。

CES 支持的最大消息大小是多少?

消息大小可配置,最大为 1 MB,应符合 Azure 事件中心实例的限制。 默认情况下,较高层的事件中心支持高达 1 MB 的消息。

如果 CES 无法传送事件(例如由于目标问题),事务日志是否会继续增长?

是的。 CES 可确保可靠的消息传递,因此在成功传递事件之前,事务日志不会被截断。 如果传递失败,则日志会增大,直到问题得到解决。 通过监视已启用 CES 的数据库的事务日志传递和事务日志利用率来维护 CES 的运行状况非常重要。

架构和数据处理

CES 如何处理架构更改,例如删除列?

CES 包含每个事件的行架构。 如果 DDL作修改表(如删除、重命名或添加列),则下一个 DML 事件反映更新后的架构。 CES 不会为 DDL作本身发出事件。

CES 是否支持具有 BLOB 列(例如 varchar(max))的表?

是的。 CES 支持具有 BLOB 列的表。 可以配置流式处理事件中是否包括大型对象。

表是否需要主键才能使用 CES?

否。 CES 不需要表的主键。

CES 事件粒度如何?

受某一 INSERTUPDATEDELETE 作影响的每一行作为单独的事件进行流式处理。

如果事务修改了多行,它们是否作为单独的事件流式传输或作为一行进行流式处理?

每个受影响的行作为单独的事件进行流式传输。 每个事件都包含事务元数据,因此可以在目标上对同一事务的更改进行逻辑分组。

集成和配置

CES 如何在高可用性(HA)配置中工作? 是否可以使用 DNN 连接字符串?

CES 仅来自主要副本的流。 发生故障转移时,必须在新的主数据库上重新配置 CES。 可以使用 SQL Server 支持的任何方法(包括 DNN)连接到主副本。

CES 用于与目标通信的协议是什么?

CES 支持适用于 Azure 事件中心的 AMQP 和 Kafka 协议。 不支持 HTTPS。

CES 是否可以直接流式传输到 Kafka?

否。 CES 目前仅支持 Azure 事件中心(AMQP 和 Kafka 协议)作为目标。

CES 是否支持Microsoft使用 Azure 事件中心进行身份验证的 Entra 托管标识?

否,CES 目前不支持Microsoft Entra 托管标识,以便通过 Azure 事件中心进行身份验证。

功能和特性

是否可以在已使用事务复制的数据库上启用 CES?

否。 无法在配置事务复制的数据库上启用 CES。

CES 是否可以与变更数据捕获(CDC)一起运行?

否。 无法在使用 CDC 启用的数据库上启用 CES。

CES 是否可以与 SQL Server 的构造镜像数据库一起使用?

如果 CES 停止,它是否从其离开的位置恢复?

如果 CES 手动停止,则不会自动恢复。 必须手动重启 CES 才能继续流式处理事件。 不会捕获 CES 停止时所做的更改。 只有在重启 CES 后所做的更改才会流式传输。 CES 保证 至少交付一次 。 如果 CES 无法传递消息,它会继续重试,直到消息成功传递,或手动停止 CES。 如果未停止 CES,则失败的传递会阻止日志截断,直到解决错误条件,并且消息已成功传递。 如果手动停止 CES,则不会捕获日志截断,并且不会捕获停机期间发生的事件。

如何监视 CES 活动(例如已处理的事件、错误)?

使用以下系统视图监视 CES 活动:

  • 事件 传递错误的sys.dm_change_feed_errors。
  • 日志 扫描活动的sys.dm_change_feed_log_scan_sessions。

可以创建与 CES 相关的 XEvent 会话,并获取有关 CES 活动和潜在错误的更多详细信息。

  CREATE EVENT SESSION ChangeEventStreaming
  ON SERVER
  ADD EVENT sqlserver.synapse_link_error
  (
  )
  ADD TARGET package0.event_file 
  (SET filename=N'C:\temp\YourSession_Target1.xel');
  GO

可以监视 Azure 事件中心并使用关联的指标和日志。

是否可以为流式处理配置多少个表?

是的。 CES 最多支持 4,096 个流式处理组,每个组最多包含 40,000 个表。