POC過程如下:
這里我們建立一個測試環境,模擬數據在 Insert , Update 和 Delete 情況下的跟蹤效果。
1 、測試腳本的准備,下面腳本建立一個新的數據庫環境,並作相應的跟蹤配置后向表中添加刪除更改數據。
Use master
go
/***
1 、建立測試環境:生成一個帶主鍵的測試表 T_Trace
*/
if ( DB_ID ( 'db_Trace_test' ) is not null ) drop database db_Trace_test
go
Create DataBase db_Trace_test
go
use db_Trace_test
go
Create Table T_Trace ( id int not null , name varchar ( 100 )
CONSTRAINT [ PK_T_Trace ] PRIMARY KEY CLUSTERED ( [ id ] ASC )
)
go
/***
2 、配置數據庫和表的更改跟蹤參數
*/
ALTER DATABASE db_Trace_test SET
CHANGE_TRACKING = ON (
AUTO_CLEANUP = ON , -- 打開自動清理選項
CHANGE_RETENTION = 1 HOURS -- 數據保存期為時
);
ALTER TABLE dbo . T_Trace ENABLE CHANGE_TRACKING
go
/***
3 、向表中增加修改刪除數據
*/
insert into T_Trace values ( 1 , ' 上海 ' ),( 2 , ' 北京 ' ),( 3 , ' 廣州 ' )
delete from T_Trace where id = 3
update T_Trace set name = ' 天津 ' where id = 1
go
/***
1 、建立測試環境:生成一個帶主鍵的測試表 T_Trace
*/
if ( DB_ID ( 'db_Trace_test' ) is not null ) drop database db_Trace_test
go
Create DataBase db_Trace_test
go
use db_Trace_test
go
Create Table T_Trace ( id int not null , name varchar ( 100 )
CONSTRAINT [ PK_T_Trace ] PRIMARY KEY CLUSTERED ( [ id ] ASC )
)
go
/***
2 、配置數據庫和表的更改跟蹤參數
*/
ALTER DATABASE db_Trace_test SET
CHANGE_TRACKING = ON (
AUTO_CLEANUP = ON , -- 打開自動清理選項
CHANGE_RETENTION = 1 HOURS -- 數據保存期為時
);
ALTER TABLE dbo . T_Trace ENABLE CHANGE_TRACKING
go
/***
3 、向表中增加修改刪除數據
*/
insert into T_Trace values ( 1 , ' 上海 ' ),( 2 , ' 北京 ' ),( 3 , ' 廣州 ' )
delete from T_Trace where id = 3
update T_Trace set name = ' 天津 ' where id = 1
2 、跟蹤分析,測試腳本和效果如下
/***
4 、獲取更改過的數據
*/
SELECT
CHG . Sys_Change_Version as 序 列 , id as 主鍵 , Sys_change_Operation as 操 作
FROM CHANGETABLE ( CHANGES dbo . T_Trace , 0 ) CHG
order by CHG . Sys_Change_Version
/*
4 、獲取更改過的數據
*/
SELECT
CHG . Sys_Change_Version as 序 列 , id as 主鍵 , Sys_change_Operation as 操 作
FROM CHANGETABLE ( CHANGES dbo . T_Trace , 0 ) CHG
order by CHG . Sys_Change_Version
/*

其中,測試腳本中函數 CHANGETABLE 的第二個參數 0 代表查詢開始的事物操作序列,這三條數據分別表示兩個插入( I )和一個刪除( D )操作並且用主鍵 ID 標識出來。
* 這里主鍵為 1 的數據標志為插入,是因為 Insert 和 Update 是在同一個跟蹤事務中查詢出來的。
* 這里主鍵為 1 的數據標志為插入,是因為 Insert 和 Update 是在同一個跟蹤事務中查詢出來的。
3 、調整跟蹤范圍參數,我們從序列為 2 的操作開始跟蹤,這樣可以跟蹤到測試數據的 Update 語句:
SELECT
CHG . Sys_Change_Version as 序列 , id as 主鍵 , Sys_change_Operation as 操作
FROM CHANGETABLE ( CHANGES dbo . T_Trace , 2) CHG
order by CHG . Sys_Change_Version

這個結果則表示,主鍵為 1 的數據數據執行過更新操作 (U)
1、硬件測試環境:
2 、軟件測試環境:
Windows 2008Server , SQLServer2008
3 、樣本數據:
/--**--/
4 、測試結果:其中判斷和提取更新表示查詢時間,包含了返回到 SQLServer 客戶端的傳輸時間。
序列 |
源表數據 |
操作 |
判斷更新 |
提取更新 |
1 |
1000 條 |
Delete 語句刪除 1000 條 |
0 秒 |
無 |
2 |
0 條 |
Insert 語句插入 100 條 |
0 秒 |
0 秒 |
3 |
100 條 |
Insert 語句插入 1000 條 |
0 秒 |
0 秒 |
4 |
1100 條 |
Insert 語句插入 10000 條 |
0 秒 |
0 秒 |
5 |
11100 條 |
Insert 語句插入 100000 條 |
3 秒 |
4 秒 |
6 |
111100 條 |
Insert 語句插入 100000 條 |
6 秒 |
7 秒 |
7 |
211100 條 |
Insert 語句插入 100000 條 |
7 秒 |
11 秒 |
8 |
311100 條 |
Delete 語句刪除 100 條 |
0 秒 |
無 |
9 |
311100 條 |
Update 語句更新 100 條 |
0 秒 |
0 秒 |
10 |
311100 條 |
Update 語句更新 1000 條 |
0 秒 |
0 秒 |
11 |
311100 條 |
Update 語句更新 10000 條 |
0 秒 |
0 秒 |
5 、測試評估:
在變更數據量萬級的情況下,可以很快地響應跟蹤結果並提取出所需要的數據。