搜索

9.3. 设置 SQL Server 以运行 Debezium 连接器

download PDF

要使 Debezium 从 SQL Server 表捕获更改事件,具有所需权限的 SQL Server 管理员必须首先运行查询,以便在数据库中启用 CDC。然后,管理员必须为您要 Debezium 捕获的每个表启用 CDC。

注意

默认情况下,与 Microsoft SQL Server 的 JDBC 连接受 SSL 加密保护。如果没有为 SQL Server 数据库启用 SSL,或者您希望在没有使用 SSL 的情况下连接到数据库,您可以通过将连接器配置中的 database.encrypt 属性的值设置为 false 来禁用 SSL。

有关设置 SQL Server 以与 Debezium 连接器搭配使用的详情,请查看以下部分:

应用 CDC 后,它会捕获所有 INSERTUPDATEDELETE 操作,它们提交到启用了 CDD 的表。然后,Debezium 连接器可以捕获这些事件并将其发送到 Kafka 主题。

9.3.1. 在 SQL Server 数据库中启用 CDC

在为表启用 CDC 之前,您必须为 SQL Server 数据库启用它。SQL Server 管理员通过运行系统存储的步骤启用 CDC。系统存储的流程可以使用 SQL Server Management Studio 运行,也可以使用 Transact-SQL 运行。

先决条件

  • 您是 SQL Server 的 sysadmin 固定服务器角色的成员。
  • 您是数据库的 db_owner。
  • SQL Server Agent 正在运行。
注意

SQL Server CDC 功能只处理在用户创建的表中发生的更改。您无法在 SQL Server master 数据库中启用 CDC。

流程

  1. 在 SQL Server Management Studio 中的 View 菜单中,单击 Template Explorer
  2. Template Browser 中,展开 SQL Server Templates
  3. 展开 Change Data Capture > Configuration,然后点 CDC 的 Enable Database
  4. 在模板中,将 USE 语句中的数据库名称替换为您要为 CDC 启用的数据库的名称。
  5. 运行存储的步骤 sys.sp_cdc_enable_db,为 CDC 启用数据库。

    为 CDC 启用数据库后,会创建一个名称 cdc 的模式,以及 CDC 用户、元数据表和其他系统对象。

    以下示例演示了如何为数据库 MyDB 启用 CDC:

    示例:为 CDC 模板启用 SQL Server 数据库

    USE MyDB
    GO
    EXEC sys.sp_cdc_enable_db
    GO

9.3.2. 在 SQL Server 表中启用 CDC

SQL Server 管理员必须在您要捕获的源表中启用更改数据捕获。必须已经为 CDC 启用数据库。要在表中启用 CDC,SQL Server 管理员为表运行存储的步骤 sys.sp_cdc_enable_table。可以使用 SQL Server Management Studio 或使用 Transact-SQL 运行存储的流程。对于您要捕获的每个表,必须启用 SQL Server CDC。

先决条件

  • 在 SQL Server 数据库上启用了 CDC。
  • SQL Server Agent 正在运行。
  • 您是 db_owner 固定数据库角色的成员。

流程

  1. 在 SQL Server Management Studio 中的 View 菜单中,单击 Template Explorer
  2. Template Browser 中,展开 SQL Server Templates
  3. 展开 Change Data Capture > Configuration,然后单击 Enable Table Specifying Filegroup Option
  4. 在模板中,将 USE 语句中的表名称替换为您要捕获的表的名称。
  5. 运行存储的步骤 sys.sp_cdc_enable_table

    以下示例演示了如何为表 MyTable 启用 CDC:

    示例:为 SQL Server 表启用 CDC

    USE MyDB
    GO
    
    EXEC sys.sp_cdc_enable_table
    @source_schema = N'dbo',
    @source_name   = N'MyTable', //<.>
    @role_name     = N'MyRole',  //<.>
    @filegroup_name = N'MyDB_CT',//<.>
    @supports_net_changes = 0
    GO

    <.> 指定要捕获的表的名称。<.> 指定角色 MyRole,您可以将其添加到您要为源表捕获的列授予 SELECT 权限的用户。sysadmindb_owner 角色的用户也有权访问指定的更改表。将 @role_name 的值设置为 NULL,仅允许 sysadmindb_owner 中的成员具有捕获信息的完整访问权限。<.> 指定 SQL Server 放置捕获表的 filegroup。named filegroup 必须已经存在。最好不要找到用于源表的同一 filegroup 中的更改表。

9.3.3. 验证用户是否有权访问 CDC 表

SQL Server 管理员可以运行系统存储的步骤来查询数据库或表来检索其 CDC 配置信息。可以使用 SQL Server Management Studio 或使用 Transact-SQL 运行存储的流程。

先决条件

  • 您有 capture 实例捕获的所有列的 SELECT 权限。db_owner 数据库角色的成员可以查看所有定义的捕获实例的信息。
  • 您在为查询包括的表信息定义的任何 gating 角色中有一个成员资格。

流程

  1. 在 SQL Server Management Studio 中的 View 菜单中,单击 Object Explorer
  2. 从 Object Explorer,展开 Databases,然后展开您的数据库对象,如 MyDB
  3. 展开 Programmability > Stored processs > System Stored process
  4. 运行 sys.sp_cdc_help_change_data_capture 存储的流程来查询表。

    查询不应返回空结果。

    以下示例在数据库 MyDB 上运行存储的步骤 sys.sp_cdc_help_change_data_capture

    示例:查询 CDC 配置信息的表

    USE MyDB;
    GO
    EXEC sys.sp_cdc_help_change_data_capture
    GO

    查询会返回为 CDC 启用的每个表的配置信息,其中包含调用者有权访问的更改数据。如果结果为空,请验证用户具有访问捕获实例和 CDC 表的特权。

9.3.4. Azure 上的 SQL Server

Debezium SQL Server 连接器可用于 Azure 上的 SQL Server。有关在 Azure 上为 SQL Server 配置 CDC 并在 Debezium 中使用它的信息,请参阅此示例。https://learn.microsoft.com/en-us/samples/azure-samples/azure-sql-db-change-stream-debezium/azure-sql%2D%2Dsql-server-change-stream-with-debezium/

9.3.5. SQL Server 捕获服务器负载和延迟上的作业代理配置的影响

当数据库管理员为源表启用更改数据捕获时,捕获作业代理开始运行。代理从事务日志中读取新的更改事件记录,并将事件记录复制到更改数据表中。在源表中提交更改的时间以及更改出现在对应更改表中的时间,总有较小的延迟间隔。这个延迟间隔代表在源表中发生更改时以及 Debezium 可用于 Apache Kafka 的更改时之间的差距。

理想情况下,对于必须快速响应数据变化的应用程序,您希望在源和更改表之间保持关闭同步。您可能想,运行捕获代理以尽可能快地持续处理事件更改事件,可能会导致吞吐量增加,并减少 latency netobserv-wagoning 更改表,以便在事件发生后马上使用新事件记录(在最近实时发生)。但是,这不一定如此。在寻求更多即时同步时,需要支付性能损失。每次捕获作业代理查询数据库以获取新事件记录时,它会增加数据库主机上的 CPU 负载。服务器上的额外的负载可能会对整个数据库性能造成负面影响,并可能会降低事务效率,特别是在高峰数据库使用时。

监控数据库指标非常重要,以便您知道数据库是否达到服务器无法支持捕获代理的活动级别。如果您注意到性能问题,可以修改 SQL Server 捕获代理设置,以帮助平衡数据库主机上的总体 CPU 负载与可容忍的延迟程度。

9.3.6. SQL Server 捕获作业代理配置参数

在 SQL Server 上,控制捕获作业代理行为的参数在 SQL Server 表 msdb.dbo.cdc_jobs 中定义。如果您在运行捕获作业代理时遇到问题,请调整捕获作业设置,以通过运行 sys.sp_cdc_change_job 存储的步骤并提供新值来减少 CPU 负载。

注意

有关如何配置 SQL Server 捕获作业代理参数的具体指导超出了本文档的范围。

以下参数对于修改捕获代理行为与 Debezium SQL Server 连接器一起使用的最显著:

pollinginterval
  • 指定捕获代理在日志扫描周期之间等待的时间。
  • 较高的值可减少数据库主机上的负载并增加延迟。
  • 0 指定扫描之间没有等待。
  • 默认值为 5
maxtrans
  • 指定每个日志扫描周期内进程的最大事务数。在捕获作业处理指定数量的事务后,它会暂停 pollinginterval 指定下一次扫描开始前的时间长度。
  • 较低值可减少数据库主机上的负载并增加延迟。
  • 默认值为 500
maxscans
  • 指定捕获作业可以尝试捕获数据库事务日志的扫描周期数的限制。如果 continuous 参数设为 1,则作业会在恢复扫描前暂停 pollinginterval 指定的时间长度。
  • 较低值可减少数据库主机上的负载并增加延迟。
  • 默认值为 10

其他资源

  • 有关捕获代理参数的更多信息,请参阅 SQL Server 文档。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.