SQL2008的数据更新跟踪测试

最近一个项目中需要监测SQLServer数据库中某些表的数据更新情况,于是做了一番POC测试和简单性能的评估.这里使用的是 SQLServer2008的更改跟踪.因为需求原因,没有考虑使用进一步的变更数据捕获.

POC过程如下:
 


--------------------------------------------------------------------------------


这里我们建立一个测试环境,模拟数据在 Insert , Update 和 Delete 情况下的跟踪效果。
 
1 、测试脚本的准备,下面脚本建立一个新的数据库环境,并作相应的跟踪配置后向表中添加删除更改数据。
 

--------------------------------------------------------------------------------

Usemaster

go

/***

1 、建立测试环境:生成一个带主键的测试表 T_Trace

*/

if ( DB_ID ( 'db_Trace_test' ) isnotnull ) dropdatabasedb_Trace_test

go

CreateDataBasedb_Trace_test

go

usedb_Trace_test

go

CreateTableT_Trace ( idintnotnull ,namevarchar ( 100 )

CONSTRAINT[ PK_T_Trace ]PRIMARYKEYCLUSTERED ( [ id ]ASC )

 )

go

/***

2 、配置数据库和表的更改跟踪参数

*/

ALTERDATABASEdb_Trace_testSET

    CHANGE_TRACKING=ON (

             AUTO_CLEANUP=ON,            -- 打开自动清理选项

            CHANGE_RETENTION=1HOURS    -- 数据保存期为时

    );

ALTERTABLEdbo.T_TraceENABLECHANGE_TRACKING

go

/***

3 、向表中增加修改删除数据

*/

insertintoT_Tracevalues ( 1 ,' 上海 '),(2 ,' 北京 '),(3 ,' 广州 ' )

deletefromT_Tracewhereid=3


updateT_Tracesetname=' 天津 'whereid=1


--------------------------------------------------------------------------------


2 、跟踪分析,测试脚本和效果如下
 

--------------------------------------------------------------------------------

/***

4 、获取更改过的数据

*/

SELECT

    CHG.Sys_Change_Versionas序 列,idas主键,Sys_change_Operationas操 作

FROMCHANGETABLE ( CHANGESdbo.T_Trace,0 ) CHG

orderbyCHG.Sys_Change_Version

/*


其中,测试脚本中函数 CHANGETABLE 的第二个参数 0 代表查询开始的事物操作序列,这三条数据分别表示两个插入( I )和一个删除( D )操作并且用主键 ID 标识出来。
 
* 这里主键为 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 、测试评估:
       在变更数据量万级的情况下,可以很快地响应跟踪结果并提取出所需要的数据。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/jinjazz/archive/2010/04/17/5495955.aspx

发布了65 篇原创文章 · 获赞 16 · 访问量 56万+

猜你喜欢

转载自blog.csdn.net/jackmacro/article/details/6405996