淺析SQL2008的Change Data Capture功能(3)_Mssql數(shù)據(jù)庫教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:如何使用SQL Server嵌套子查詢
      很多SQL Server程序員對子查詢(subqueries)的使用感到困惑,尤其對于嵌套子查詢(即子查詢中包含一個子查詢)。現(xiàn)在,就讓我們追本溯源地探究這個問題。 有兩種子查詢類型:標準和相關(guān)。標

      11、最后試一下DROP命令

      DROP TABLE dbo.Product;

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

      12. 評估結(jié)束。一定有人問,捕獲到的更新怎么用呢,還有一堆系統(tǒng)函數(shù)和存儲過程可以幫助用戶,但是那段測試的過程就不詳細寫了。

      其中最重要的應(yīng)該就是cdc.fn_cdc_get_all_changes_和cdc.fn_cdc_get_net_changes_兩個函數(shù)了,這兩個函數(shù)可以幫助我們獲取dbo_Product_CT表中數(shù)據(jù),其中cdc.fn_cdc_get_all_changes_是用于獲取所有更新,而cdc.fn_cdc_get_net_changes_則是用于獲取精簡后的更新,在精簡的更新中有一些重復(fù)的更新就會被合并成一條記錄,比如說我們把產(chǎn)品類型由A改為B,然后又改回A,在cdc.fn_cdc_get_all_changes_中應(yīng)該有3條記錄,而在cdc.fn_cdc_get_net_changes_中則只有1條記錄。兩個函數(shù)的范例如下(你會發(fā)現(xiàn)精簡結(jié)果集的函數(shù)運算相當慢,至少在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功能是會產(chǎn)生一定的IO和存儲開銷的,為了評估CDC功能產(chǎn)生的這些開銷。我又進行了一段評測。

      整個評估的思路是這樣的:


      1、創(chuàng)建兩個數(shù)據(jù)庫
      2、在兩個數(shù)據(jù)庫中分別創(chuàng)建一張結(jié)構(gòu)完全相同的表,一個數(shù)據(jù)庫啟用CDC功能,而另外一個禁用CDC功能
      3、向兩張表中寫入相同行數(shù)的數(shù)據(jù)
      4、視圖sys.dm_io_virtual_file_stats來獲得兩個數(shù)據(jù)庫文件上的
      5、利用sysindexes來獲得兩個數(shù)據(jù)庫中數(shù)據(jù)表的存儲消耗情況


      因為是在虛擬機中進行的測試,所以選取了比較小的數(shù)據(jù)表(AdventureWorks數(shù)據(jù)庫中的SalesOrderDetails),大約有12萬行數(shù)據(jù)。

      評估的結(jié)果如下:

      圖2

      從上面兩張表中可以看到,CDC激活后日志文件的讀會顯著增加。原因是CDC在寫更新跟蹤表時,需要讀取日志。

      圖3
      圖4

      分享:SQL多表格查詢合并至單一聲明的常用方式
      在對跨多個表格的數(shù)據(jù)進行組合時,有時很難搞清楚要使用哪一個SQL句法。我將在這里對將多個表格中的查詢合并至單一聲明中的常用方式進行闡述。 在這篇文章中的樣本查詢符合SQL92 ISO標準。不

      來源:模板無憂//所屬分類:Mssql數(shù)據(jù)庫教程/更新時間:2008-08-22
      相關(guān)Mssql數(shù)據(jù)庫教程