11、最后试一下DROP命令
|
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, |
CDC功能的IO开销
很明显,CDC功能是会产生一定的IO和存储开销的,为了评估CDC功能产生的这些开销。我又进行了一段评测。
整个评估的思路是这样的:
1、创建两个数据库
2、在两个数据库中分别创建一张结构完全相同的表,一个数据库启用CDC功能,而另外一个禁用CDC功能
3、向两张表中写入相同行数的数据
4、视图sys.dm_io_virtual_file_stats来获得两个数据库文件上的
5、利用sysindexes来获得两个数据库中数据表的存储消耗情况
因为是在虚拟机中进行的测试,所以选取了比较小的数据表(AdventureWorks数据库中的SalesOrderDetails),大约有12万行数据。
评估的结果如下:
从上面两张表中可以看到,CDC激活后日志文件的读会显着增加。原因是CDC在写更新跟踪表时,需要读取日志。
相关专题
- SQL Server 数据处理专题 (1877篇文章)
- SQL Server 索引和查询专题 (3359篇文章)
- SQL Server (1834篇文章)
- SQL Server (1836篇文章)
- 用SQL语句删除重复记录的四种方法 (124次浏览)
- 如何使用SQL Server 2000中的XML功能一 (80次浏览)
- 用SQL Server 2005实现WebService (52次浏览)
- 讲解SQL Server数据库触发器的安全隐患 (36次浏览)
- 在Win Server 2008运行 SQL Server 2008 (30次浏览)
- 使用NetBeans5.0连接SQL Server 2005数据库 (28次浏览)
- 在SQL Server 2005中编写sp_lock系统存储过程 (26次浏览)
- SQL Server 2000和JDBC的融合实例 (24次浏览)
- SQL Server 2008开辟崭新数据平台 (22次浏览)
- SQL Server 2008数据库中的新数据类型 (16次浏览)






