我已经读过,启用Change Data Capture显然会对数据库性能产生影响。 此性能损失是否仅影响已启用CDC的表,还是会影响数据库中的所有操作
在我的情况下,我正在使用SSIS并且有大量数据移入和移出临时数据库。我在系统中也有一些用于转换的查找表。我希望使用CDC作为审核这些参考表的更改的方法(而不是导入的数据)。我作为ETL的一部分运行的主要查询访问这些参考表但不改变它们,所以我试图弄清楚是否仍会有明显的性能损失?
由于
答案 0 :(得分:28)
这个问题的答案既是肯定也是否定。
否,因为
为变更数据捕获启用表时,会关联捕获 创建实例以支持 传播变更数据 源表。捕获实例 包括一个更改表和最多 两个查询函数。
未跟踪表似乎不参与跟踪数据。
是的,因为
变更的变更数据来源 数据捕获是SQL Server 交易日志。作为插入,更新, 和删除应用于跟踪 源表,描述的条目 这些更改将添加到日志中。 日志用作更改的输入 数据捕获捕获过程。这个 读取日志并添加信息 关于跟踪表的更改 相关变更表。
由于更改源来自事务日志,因此传播更改需要捕获实例读取和解释事务日志(免责声明:我对事物的解释)。仅启用CDC会对整个数据库产生性能影响。
<强>推荐强>
存储
- 规划更改数据捕获体系结构时,请大幅增加日志大小和日志卷I / O操作。
- 考虑在sys.sp_cdc_enable_table中指定一个文件组。
- 在执行sys.sp_cdc_enble_db之前,请考虑更改数据库的默认文件组,以便更改数据捕获元数据,尤其是cdc.lsn_time_mappings位于与PRIMARY不同的文件组上。
工作量行为:
- 尽量避免插入后需要立即更新行的情况。
- 尽量避免使用更改数据捕获来捕获对频繁发生大量更新事务的表的更改。
更改数据捕获参数:
- 始终将更改数据捕获捕获的列列表减少到您真正需要跟踪的列。
- 如果您不需要支持净更改,请将@设置为0。
- 用于查看更改数据捕获是否可以跟上您的工作量。
- 如果更改数据捕获无法跟上您的工作负载,请修改扫描作业参数并重新启动扫描作业。
<强>结论强>
如果您的服务器目前没有跟上其负载的问题,我非常怀疑您是否会发现任何因不常更改的表而启用CDC的性能问题。
来源