【问题标题】:Is Change Data Capture Performance Loss Restricted to CDC Enabled Tables?变更数据捕获性能损失是否仅限于启用 CDC 的表?
【发布时间】:2010-12-06 09:33:55
【问题描述】:
我已经读到启用变更数据捕获显然会对数据库性能产生影响。
这种性能损失是否只会影响启用了 CDC 的表,还是会影响整个数据库中的所有操作
在我的情况下,我使用的是 SSIS,并且有大量数据进出暂存数据库。我在系统中还有一些用于转换的查找表。我希望使用 CDC 作为仅审核对这些参考表的更改(而不是导入的数据)的一种手段。我作为 ETL 的一部分运行的主要查询会访问这些引用表,但不会更改它们,因此我想弄清楚是否还会有明显的性能影响?
谢谢
【问题讨论】:
标签:
sql
sql-server
sql-server-2008
change-data-capture
【解决方案1】:
这个问题的答案是肯定的和否定的。
不,因为
当为更改数据捕获启用表时,关联的捕获
创建实例以支持
变化数据的传播
源表。捕获实例
由一个变更表和最多
两个查询函数。
未跟踪的表似乎不参与跟踪数据。
是的,因为
变更数据的来源变更
数据捕获是 SQL Server
事务日志。作为插入、更新、
并将删除应用于跟踪
源表,描述的条目
这些更改将添加到日志中。
日志用作更改的输入
数据采集过程。这
读取日志并添加信息
关于跟踪表的更改
关联的变更表。
由于更改的来源来自事务日志,因此更改的传播需要捕获实例来读取和解释事务日志(免责声明:我对事物的解释)。仅启用 CDC 会对整个数据库的性能产生影响。
建议
存储:
- 在规划变更数据捕获架构时,请考虑日志大小和日志量 I/O 操作的显着增加。
- 考虑在 sys.sp_cdc_enable_table 中指定一个文件组。
- 请考虑在执行 sys.sp_cdc_enble_db 之前更改数据库的默认文件组,以便更改数据捕获元数据,尤其是 cdc.lsn_time_mappings 位于与 PRIMARY 不同的文件组中。
工作负载行为:
- 尽量避免插入后需要立即更新行的情况。
- 尽量避免使用更改数据捕获来捕获对具有频繁大更新事务的表的更改。
更改数据采集参数:
- 始终将变更数据捕获所捕获的列列表减少到您真正需要跟踪的列。
- 如果您不需要支持网络更改,请将 @ 设置为 0。
- 用于查看变更数据捕获是否能够跟上您的工作量。
- 如果更改数据捕获无法跟上您的工作负载,请修改扫描作业参数并重新启动扫描作业。
结论
如果您的服务器当前在跟上其负载方面没有问题,我非常怀疑您是否会注意到为不经常更改的表启用 CDC 的任何性能问题。
来源