浅析SQL Server 2008的Change Data Capture功能

来源:itpub 作者:Space Ryan 2008-03-31 出处:pcdog.com

sql server  存储过程  解决方案  数据仓库  数据库  
上一页 1 2 3 4 下一页 

11、最后试一下DROP命令

DROP TABLE dbo.Product;

dbo.Product表消失了,同时cdc.dbo_Product_CT表也消失了。

12. 评估结束。一定有人问,捕获到的更新怎么用呢,还有一堆系统函数和存储过程可以帮助用户,但是那段测试的过程就不详细写了。

其中最重要的应该就是cdc.fn_cdc_get_all_changes_.<CAPTURE_INSTANCE>和cdc.fn_cdc_get_net_changes_.<CAPTURE_INSTANCE>两个函数了,这两个函数可以帮助我们获取dbo_Product_CT表中数据,其中cdc.fn_cdc_get_all_changes_.<CAPTURE_INSTANCE>是用于获取所有更新,而cdc.fn_cdc_get_net_changes_.<CAPTURE_INSTANCE>则是用于获取精简后的更新,在精简的更新中有一些重复的更新就会被合并成一条记录,比如说我们把产品类型由A改为B,然后又改回A,在cdc.fn_cdc_get_all_changes_.<CAPTURE_INSTANCE>中应该有3条记录,而在cdc.fn_cdc_get_net_changes_.<CAPTURE_INSTANCE>中则只有1条记录。两个函数的范例如下(你会发现精简结果集的函数运算相当慢,至少在CTP4中是这样的,不知道以后的版本会不回有改进):

SELECT * FROM cdc.fn_cdc_get_all_changes_dbo_Product(0x00000048000001760004, 0x00000048000001F70004, 'all');

SELECT * FROM cdc.fn_cdc_get_net_changes_dbo_Product(0x00000048000001760004,
0x00000048000001F70004, 'all');

CDC功能的IO开销

  
很明显,CDC功能是会产生一定的IO和存储开销的,为了评估CDC功能产生的这些开销。我又进行了一段评测。

整个评估的思路是这样的:


1、创建两个数据库
2、在两个数据库中分别创建一张结构完全相同的表,一个数据库启用CDC功能,而另外一个禁用CDC功能
3、向两张表中写入相同行数的数据
4、视图sys.dm_io_virtual_file_stats来获得两个数据库文件上的
5、利用sysindexes来获得两个数据库中数据表的存储消耗情况


因为是在虚拟机中进行的测试,所以选取了比较小的数据表(AdventureWorks数据库中的SalesOrderDetails),大约有12万行数据。

评估的结果如下:

浅析SQL Server 2008的Change Data Capture功能(图二)
图2

从上面两张表中可以看到,CDC激活后日志文件的读会显着增加。原因是CDC在写更新跟踪表时,需要读取日志。

浅析SQL Server 2008的Change Data Capture功能(图三)
图3

浅析SQL Server 2008的Change Data Capture功能(图四)
图4


更多内容请看PCdog.com--SQL Server专题
上一页 1 2 3 4 下一页 
上一篇:如何在SQL Server 2008中订阅策略组
下一篇:SQL Server 2008分析服务概览