2010-12-06 48 views
10

我读过,启用Change Data Capture显然会对数据库性能产生影响。 这种性能损失只会影响启用CDC的表,还是会影响整个数据库的所有操作更改数据捕获性能损失是否限制在启用CDC的表中?

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

谢谢

回答

25

这个问题的答案是肯定和否。

没有因为

当一个表被用于变更数据捕获启用,将创建的捕获 实例来支持 传播的变化数据的 源表。捕获实例 由一个更改表和最多 两个查询函数组成。

未跟踪的表似乎并未涉及跟踪数据。

是因为

变化数据的变化 数据采集源是SQL Server的 事务日志。作为插入,更新, 和删除应用于跟踪 源表,将描述 这些更改的条目添加到日志。 该日志用作数据捕获捕获过程的变更输入 。此 读取日志并添加关于对跟踪表的 关联的更改表的更改的信息 。

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

建议

存储:

  • 在规划变更数据捕获架构,拿在日志大小显著上升和日志卷I/O操作的考虑。
  • 考虑在sys.sp_cdc_enable_table中指定一个文件组。
  • 考虑在执行sys.sp_cdc_enble_db之前更改数据库的默认文件组,以便更改数据捕获元数据,特别是cdc。lsn_time_mappings位于与PRIMARY不同的文件组上。

工作量行为:

  • 尽量避免在某一行需要插入后立即更新方案。
  • 尽量避免使用更改数据捕获来捕获频繁发生大型更新事务的表的更改。

变更数据捕获参数:

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

结论
如果您的服务器目前没有问题,跟上它的负荷,我很怀疑你会发现任何性能问题,使CDC的罕见变化表。

来源

+1

很好explained..must值得一给予好评...... – 2014-04-09 04:13:39

相关问题