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

           在变更数据量万级的情况下,可以很快地响应跟踪结果并提取出所需要的数据。
  • 相关阅读:
    Perl字符集就是方括号(或称中括号)里一连串可能的字符,只匹配单一字符,该单一字符可以是字符集里的任何一个,“-”在字符集里有特殊含义:表示某个范围的字符。而字符集意外的连字符不具有特殊意义。
    为什么 [00-177]匹配任意7bit ascii码 ?
    用字符串对列表赋值,一个字符串对应一个列表元素,eg: my @escaped = "asteriskasterisk hash access unpack_func";
    正则-量词,匹配的个数
    TCP/IP网络编程 读书笔记1
    LeetCode75 Sort Colors
    LeetCode74 Search a 2D Matrix
    LeetCode73 Set Matrix Zeroes
    LeetCode Weekly Contest 6
    LeetCode72 Edit Distance
  • 原文地址:https://www.cnblogs.com/cl1024cl/p/6204805.html
Copyright © 2011-2022 走看看