变更数据捕获性能损失是否受限于启用CDC的表?

Mar*_*ark 11 sql sql-server change-data-capture sql-server-2008

我已经读过,启用Change Data Capture显然会对数据库性能产生影响.此性能损失是否仅影响已启用CDC的表,还是会影响整个数据库中的所有操作

在我的情况下,我正在使用SSIS并且有大量数据移入和移出临时数据库.我在系统中也有一些用于转换的查找表.我希望使用CDC作为审核这些参考表的更改的手段(而不是导入的数据).我作为ETL的一部分运行的主要查询访问这些参考表但不更改它们,所以我试图弄清楚是否仍会有明显的性能损失?

谢谢

Lie*_*ers 28

这个问题的答案既是肯定也是否定.

没有为什么

为变更数据捕获启用表时,会创建关联的捕获实例以支持在源表中传播更改数据.捕获实例由更改表和最多两个查询函数组成.

未跟踪的表似乎不参与跟踪数据.

是的,因为

更改数据捕获的更改数据源是SQL Server事务日志.当插入,更新和删除应用于跟踪的源表时,描述这些更改的条目将添加到日志中.该日志用作变更数据捕获捕获过程的输入.这将读取日志并添加有关已跟踪表的关联更改表的更改的信息.

由于更改源来自事务日志,因此传播更改需要捕获实例读取和解释事务日志(免责声明:我对事物的解释).仅启用CDC会对整个数据库产生性能影响.

建议

存储:

  • 规划更改数据捕获体系结构时,请大幅增加日志大小和日志卷I/O操作.
  • 考虑在sys.sp_cdc_enable_table中指定文件组.
  • 在执行sys.sp_cdc_enble_db之前,请考虑更改数据库的默认文件组,以便更改数据捕获元数据,尤其是cdc.lsn_time_mappings位于与PRIMARY不同的文件组上.

工作量行为:

  • 尽量避免插入后需要立即更新行的情况.
  • 尽量避免使用更改数据捕获来捕获对具有频繁大型更新事务的表的更改.

更改数据捕获参数:

  • 始终将更改数据捕获捕获的列列表减少到您真正需要跟踪的列.
  • 如果您不需要支持净更改,请将@设置为0.
  • 用于查看更改数据捕获是否可以跟上您的工作负载.
  • 如果更改数据捕获无法跟上您的工作负载,请修改扫描作业参数并重新启动扫描作业.

结束语
如果您的服务器目前没有跟上其负载的问题,我非常怀疑您是否会发现任何性能问题使CDC不常更改表.

来源