SQL2008的数据更新跟踪测试

系统 1503 0

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

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

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

/*
其中,测试脚本中函数 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、硬件测试环境:


<!-- [if gte vml 1]><v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"> <v:stroke joinstyle="miter"/> <v:formulas> <v:f eqn="if lineDrawn pixelLineWidth 0"/> <v:f eqn="sum @0 1 0"/> <v:f eqn="sum 0 0 @1"/> <v:f eqn="prod @2 1 2"/> <v:f eqn="prod @3 21600 pixelWidth"/> <v:f eqn="prod @3 21600 pixelHeight"/> <v:f eqn="sum @0 0 1"/> <v:f eqn="prod @6 1 2"/> <v:f eqn="prod @7 21600 pixelWidth"/> <v:f eqn="sum @8 21600 0"/> <v:f eqn="prod @7 21600 pixelHeight"/> <v:f eqn="sum @10 21600 0"/> </v:formulas> <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/> <o:lock v:ext="edit" aspectratio="t"/> </v:shapetype><v:shape id="图片_x0020_11" o:spid="_x0000_i1025" type="#_x0000_t75" style='width:415.5pt;height:65.25pt;visibility:visible;mso-wrap-style:square'> <v:imagedata src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image001.png" o:title=""/> </v:shape><![endif]--><!-- [if !vml]--><!-- [endif]-->

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 、测试评估:

在变更数据量万级的情况下,可以很快地响应跟踪结果并提取出所需要的数据。

SQL2008的数据更新跟踪测试


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论