SQL Server 2008 跟踪数据更改

来源:互联网 发布:淘宝diy u盘 编辑:程序博客网 时间:2024/05/29 17:04

SQL Server 2008 提供两个用于在数据库中跟踪数据更改的功能:变更数据捕获(CDC)和更改追踪(Change Tracking)。这两个功能使应用程序能够确定对数据库中的用户表所做的 DML 更改(插入、更新和删除操作)。 通过这两个特性我们可以避免自己写代码实现相同的功能。另外由于这是微软自己提供的,性能上也会有保证。

 

既然这两个功能都能捕获变更数据,那他们有什么不同呢?

下表列出了变更数据捕获与更改跟踪之间的功能差异。 变更数据捕获中的跟踪机制涉及从事务日志中异步捕获更改,因此,可以在执行 DML 操作后获得更改信息。 更改跟踪中的跟踪机制涉及在执行 DML 操作的同时同步跟踪更改,因此,可以立即获得更改信息。

功能

变更数据捕获

更改跟踪

跟踪的更改

DML 更改

跟踪的信息

历史数据

是否更改了列

DML 类型

 

更改跟踪捕获更改了表行这一事实,但不会捕获更改的数据。这样,应用程序就可以确定使用从用户表中直接获取的最新行数据更改的行。因此,与变更数据捕获相比,更改跟踪可以解答的历史问题比较有限。但是,对于不需要历史信息的那些应用程序,更改跟踪产生的存储开销要小得多,因为它不需要捕获更改的数据。它使用同步跟踪机制来跟踪更改。此功能旨在最大限度地减少 DML 操作开销。(可以考虑在数据仓库数据加载中使用,因为只需要考虑最新数据的变更,而不考虑中间发生的变更Compared  with  SSIS and CDC, Change Tracking is a lightweight solution to extract modified data from one SQL Server to another SQL Server。Therefore reducing dramatically I/O and the extraction time. Transformations need to be applied only to the records that need to be updated and the slowly changing dimension only updates those records that need it and inserts new records

 

变更数据捕获通过获取进行 DML 更改的方面和更改的实际数据,提供用户表的历史更改信息,所以对系统性能还是会有影响。更改是使用异步进程捕获的,此进程读取事务日志,并且对系统造成的影响很小。

 

下面是我用更改追踪做的一个测试,我们可以看到在数据被更新的同时,历史信息也会被更新到另外的表中,所以使用的时候一定要做过足够的测试,确保不影响系统性能。


另外比对IO和CPU使用状况:

1.不开启Change Tracking:

2.启用Change Tracking:

3.创建了Timestamp列然后做更新(比用Change Tracking速度快):

 

而CDC相对于以前我们用DML Trigger监控数据改变还是有很大优势的。首先不需要我们自己写,而且是异步抓取Transcation Log然后再记录,性能会有提高。但是对性能还是会有影响,有人做过测试:http://www.databasejournal.com/features/mssql/article.php/3806001/Performance-Testing-SQL-Server-2008146s-Change-Data-Capture-functionality.htm

The expected pattern is that using CDC is costly. That is not surprising at all when you understand that it is recording the CDC changes in the same database as the base changes. The average penalty for CDC with full recovery is10.51%. The average penalty for CDC with simple recovery is 11.10%.

 

但是微软有文档可以针对CDC进行性能优化:Tuning the Performance of Change Data Capture in SQL Server 2008

http://msdn.microsoft.com/en-us/library/dd266396(v=sql.100).aspx 

 

具体如何使用这两个功能请参考MSDN。