Edit

Frequently Asked Questions (FAQ) for Change Event Streaming (CES)

Applies to: SQL Server 2025 (17.x) Azure SQL Database Azure SQL Managed Instance SQL database in Microsoft Fabric

The following are answers to questions about the change event streaming (CES) feature for SQL Server 2025 (17.x), Azure SQL Database, Azure SQL Managed Instance, and SQL database in Microsoft Fabric.

Note

Change event streaming is currently in preview, and has differences in supportability across products. During preview, this feature is subject to change.

Compatibility and requirements

Does CES work with Azure SQL Database?

Yes. CES is supported in Azure SQL Database starting in November 2025.

Is the full recovery model required for CES?

Yes. CES relies on reading the transaction log, so the SQL Server database must be configured with the full recovery model.

What is the cost of using CES?

For CES, Azure Event Hubs and Fabric Eventstream usage is billed at standard rates. Ingress and egress charges also apply.

Performance and impact

What is the expected performance impact on a large database with millions of rows when CES is enabled?

The performance impact depends on your specific workload and configuration. However, CES is expected to have a lower overhead than change data capture (CDC), as there is no writing data back into the database.

What is the maximum message size supported by CES?

CES uses the @max_message_size_kb setting to split large outbound events into message chunks that fit the destination Azure Event Hubs limits or the configured Fabric Eventstream throughput. This setting controls message splitting only. It doesn't change the per-column truncation limit: before CES forms the outbound event, each streamed column value larger than 1 MB is truncated to 1 MB.

Will the transaction log continue to grow if CES can't deliver events (such as due to a destination issue, expired authorization credential, etc.)?

Yes. CES ensures reliable ("at least once") message delivery, so the transaction log won't be truncated until events are successfully delivered. If delivery fails, the log grows until the issue is resolved. It's important to maintain the health of CES by monitoring message delivery, errors, and the utilization of the transaction log for databases that have CES enabled.

Schema and data handling

How does CES handle schema changes, such as deleting a column?

CES includes the row schema with each event. If a DDL operation modifies the table (such as deleting, renaming, or adding a column), the next DML event reflects the updated schema. CES doesn't emit events for DDL operations themselves.

Are tables with LOB columns (for example, varchar(max)) supported by CES?

Yes. CES supports tables with LOB columns. For each table configured for streaming, you can control whether the old row includes LOB column values by using sys.sp_add_object_to_event_stream_group. Each streamed LOB value is still subject to the 1 MB per-column truncation limit. Configure the max text repl size server configuration option to allow more than 65,536 bytes to be written to LOB columns when CES is enabled.

What happens if a streamed column value is larger than 1 MB?

If one or more streamed column values are larger than 1 MB, CES truncates each affected column value to 1 MB before it forms the outbound event. The limit applies to each column separately. For example, if a row has five columns and the first three column values are each larger than 1 MB, CES truncates each of those three values to 1 MB, forms the outbound event, splits the event into message chunks according to @max_message_size_kb, and sends each chunk to the destination.

Column data truncation is unconditional. CES doesn't log errors or warnings when this truncation occurs. Configure the max text repl size server configuration option to allow more than 65,536 bytes to be written to LOB columns when CES is enabled.

Does a table need a primary key to use CES?

No. CES doesn't require a primary key on the table.

How granular are CES events?

Each row affected by an INSERT, UPDATE, or DELETE operation is streamed as a separate event.

If a transaction modifies multiple rows, are they streamed as separate events or as one?

Each affected row is streamed as a separate event. Each event includes transaction metadata, so changes from the same transaction can be logically grouped on the destination.

Integration and configuration

How does CES work in a high availability (HA) configuration? Can I use a DNN connection string?

CES only streams from the primary replica. In the event of a failover, CES must be reconfigured on the new primary. You can connect to the primary replica using any method supported by SQL Server, including a distributed network name (DNN).

Which protocols does CES use to communicate with the destination?

CES supports AMQP and Kafka protocols for Azure Event Hubs and Fabric Eventstream. HTTPS isn't supported. Starting August 15, 2026, the AMQP protocol is deprecated for new stream groups. All newly created stream groups must use AzureEventHubs as the destination_type. For details, see AMQP protocol deprecation. If you use the AMQP protocol on existing stream groups, set the Azure Event Hubs Minimum TLS version configuration option to 1.2. CES doesn't support AMQP when this option is set to 1.3.

Can CES stream directly to Kafka?

No. CES currently supports only Azure Event Hubs (AMQP and Kafka protocol) as the destination.

Can CES stream to Fabric Eventstream?

Yes. You can connect CES to Fabric Eventstream by using the Azure Event Hubs-compatible custom input endpoint that eventstream provides. Configure CES with the eventstream connection string the same way you would configure it for Azure Event Hubs.

Does CES support Microsoft Entra managed identity for authentication with Azure Event Hubs and Fabric Eventstream?

Yes. CES supports Microsoft Entra authentication in Azure SQL Database and Azure SQL Managed Instance. For SQL Server 2025, Microsoft Entra authentication is supported starting with Cumulative Update 3 (CU3) for instances enabled by Azure Arc or running on an Azure VM. Microsoft Entra authentication isn't currently supported in SQL database in Microsoft Fabric.

Functionality and features

Can CES be enabled on a database that already uses transactional replication?

No. CES can't be enabled on a database configured with transactional replication.

Can CES run alongside change data capture (CDC)?

No. CES can't be enabled on a database enabled with CDC.

Can CES be used with Fabric Mirrored Databases for SQL Server?

No. CES isn't supported with Fabric Mirrored Databases for SQL Server.

What happens if CES is disabled? Does it resume from where it left off when reenabled?

If CES is disabled, it can't be resumed. You must manually reconfigure CES to continue streaming events. Data changes made while CES was disabled aren't captured. Only changes made after CES is restarted are streamed. CES guarantees at least once delivery. If CES fails to deliver a message, it continues to retry until the message is successfully delivered, or CES is disabled. If CES isn't disabled, failed deliveries prevent log truncation until the error condition is resolved, and the message is successfully delivered. If CES is disabled, log truncation resumes, and events that occur during the downtime aren't captured.

What happens if I do a restore (or another type of migration) of a database that was configured for CES?

After restore (or other types of database migration), CES is disabled and stopped for the database. You have to reconfigure it to start streaming again.

Can CES do an initial snapshot ("seed") of existing data in tables when CES is enabled?

No. CES currently only streams changes to data that happen after CES is enabled. It doesn't stream data in a table that exists before CES is enabled.

How can I monitor CES activity (for example, events processed, errors)?

Use the following system views to monitor CES activity:

In SQL Server 2025, you can create a CES-related xEvent session and get more details on CES activity and potential errors.

  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

When configuring CES xEvent monitoring for Azure SQL Managed Instance, store your .xel file in an Azure Blob Storage container. You can observe change event streaming trace information in Azure SQL Managed Instance by observing synapse_link_error events:

CREATE CREDENTIAL
[your blob container URL here] --make sure to not leave / at the end
WITH IDENTITY = 'MANAGED IDENTITY';

DROP EVENT SESSION ChangeEventStreaming ON SERVER
CREATE EVENT SESSION ChangeEventStreaming
ON SERVER
ADD EVENT sqlserver.synapse_link_error
(
)
ADD TARGET package0.event_file
(
    SET filename = N'https://[your container URL]/cessession.xel'
  
);

xEvent debugging isn't supported for troubleshooting CES in Azure SQL Database.

You can monitor Azure Event Hubs or Fabric Eventstream and use associated metrics and logs.

How long are CES errors retained in sys.dm_change_feed_errors?

The sys.dm_change_feed_errors error list auto-rotates. Newer errors push out earlier entries. Errors that stop occurring aren't removed from the list immediately; they remain until newer errors push them out or the list clears completely.

Is there a limit to how many tables can be configured for streaming?

Yes. CES supports up to 4,096 stream groups, with up to 40,000 tables per group.