我已经读到,启用变更数据捕获显然会影响数据库性能。这种性能下降会只影响启用了CDC的表还是会影响数据库中的所有操作
在我的情况下,我正在使用SSIS,并且有大量数据移入和移出暂存数据库。我在系统中也有一些用于转换的查找表。我希望使用CDC作为仅审核这些参考表(而不是导入的数据)的更改的方法。我作为ETL的一部分运行的主要查询访问了这些引用表,但是没有更改它们,因此我试图确定是否仍然存在明显的性能下降?
谢谢
该问题的答案将是“是”和“否”。
没有为什么
为表启用更改数据捕获后,将创建关联的捕获实例以支持在源表中分发更改数据。捕获实例由一个变更表和最多两个查询功能组成。
未跟踪的表似乎不参与跟踪数据。
是的,因为
用于更改数据捕获的更改数据的源是SQL Server事务日志。在将插入,更新和删除应用于跟踪的源表时,描述这些更改的条目将添加到日志中。日志用作更改数据捕获捕获过程的输入。这将读取日志,并将有关更改的信息添加到跟踪表及其关联的更改表中。
由于更改的来源来自事务日志,因此更改的传播需要捕获实例读取和解释事务日志 (免责声明:我对事物的解释) 。仅启用CDC会对整个数据库的性能产生影响。
推荐建议
贮存: 在计划更改数据捕获体系结构时,请考虑日志大小和日志卷I / O操作的显着增加。 考虑在sys.sp_cdc_enable_table中指定一个文件组。 * 在执行sys.sp_cdc_enble_db之前,请考虑更改数据库的默认文件组,以使更改数据捕获元数据(尤其是cdc.lsn_time_mappings)位于与PRIMARY不同的文件组上。 工作负载行为: 尝试避免插入后需要立即更新行的情况。 尝试避免使用更改数据捕获来捕获对具有频繁的大更新事务的表的更改。 更改数据捕获参数: 始终将更改数据捕获所捕获的列的列表减少为仅真正需要跟踪的列。 如果不需要网络更改支持,请将@设置为0。 用于查看更改数据捕获是否可以跟上您的工作量。 如果更改数据捕获无法满足您的工作量,请修改扫描作业参数并重新启动扫描作业。
贮存:
工作负载行为:
更改数据捕获参数:
结束语 如果您的服务器当前没有任何问题可以跟上它的负载,我非常怀疑您是否会注意到为不频繁更改的表启用CDC的任何性能问题。