zoukankan      html  css  js  c++  java
  • SQL2008的数据更新跟踪测试

    最近一个项目中需要监测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、硬件测试环境:


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

           在变更数据量万级的情况下,可以很快地响应跟踪结果并提取出所需要的数据。
  • 相关阅读:
    Binary Search Tree Iterator 解答
    Invert Binary Tree 解答
    Min Stack 解答
    Trapping Raining Water 解答
    Candy 解答
    Jump Game II 解答
    Implement Hash Map Using Primitive Types
    Gas Station 解答
    Bucket Sort
    HashMap 专题
  • 原文地址:https://www.cnblogs.com/cl1024cl/p/6204805.html
Copyright © 2011-2022 走看看