Chinaz.com - 中国站长站

匿名投稿 投稿指南 RSS订阅 站长资讯通告:
搜索: 您的位置主页>网络编程>Mssql>阅读资讯:浅析SQL2008的Change Data Capture功能

浅析SQL2008的Change Data Capture功能

2008-06-04 10:24:31 来源:itpub 作者:Space Ryan 【 评论:1

11、最后试一下DROP命令

DROP TABLE dbo.Product;

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

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

其中最重要的应该就是cdc.fn_cdc_get_all_changes_和cdc.fn_cdc_get_net_changes_两个函数了,这两个函数可以帮助我们获取dbo_Product_CT表中数据,其中cdc.fn_cdc_get_all_changes_是用于获取所有更新,而cdc.fn_cdc_get_net_changes_则是用于获取精简后的更新,在精简的更新中有一些重复的更新就会被合并成一条记录,比如说我们把产品类型由A改为B,然后又改回A,在cdc.fn_cdc_get_all_changes_中应该有3条记录,而在cdc.fn_cdc_get_net_changes_中则只有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万行数据。

评估的结果如下:

图2

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

图3
图4

 

 

Tags:2008   Server   SQL  
责任编辑:谷汶锴
  • 请文明参与讨论,禁止漫骂攻击。 用户名:新注册) 密码: 匿名:
    评论总数: [ 查看全部 ] 网友评论
    关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助