• MSSQL·查询T-SQL执行记录


    阅文时长 | 0.78分钟 字数统计 | 1261.6字符
    主要内容 | 1、引言&背景 2、查询最近的T-SQL执行记录 3、查询实际执行过的事务日志 4、声明与参考资料
    『MSSQL·查询T-SQL执行记录』
    编写人 | SCscHero 编写时间 | 2021/5/30 PM2:18
    文章类型 | 系列 完成度 | 已完成
    座右铭 每一个伟大的事业,都有一个微不足道的开始。

    一、引言&背景   完成度:100%

    a) 应对问题

    MSSQL数据库中如何查询T-SQL的执行记录?

    b) 应用场景

    查询T-SQL的执行记录,影响的哪些表,查询的哪些内容,查询的脚本源码等。

    c) 解决原理&方法

    有两种方式查询T-SQL执行记录。

    • 一种可以查询最近的T-SQL执行记录,信息完整可显示详细的脚本。
    • 一种可以查询实际执行过的事务日志,只能看到影响的表,进行的是什么类型的操作(SELECT,INSERT,DELETE,UPDATE)等。

    二、查询最近的T-SQL执行记录   完成度:100%

    sys.dm_exec_query_stats这个视图主要是对执行计划的统计,包含消耗成本,运行次数等等。MSSQL默认不缓存全部,所以只有部分数据。
    若要缓存全部,可通过开启跟踪,审计之类的方法,是可以记录所有操作的,但对DB有一定的开销。

    SELECT TOP 1000
           QS.creation_time,
           SUBSTRING(   ST.text,
                        (QS.statement_start_offset / 2) + 1,
                        ((CASE QS.statement_end_offset
                              WHEN -1 THEN
                                  DATALENGTH(ST.text)
                              ELSE
                                  QS.statement_end_offset
                          END - QS.statement_start_offset
                         ) / 2
                        ) + 1
                    ) AS statement_text,
           ST.text,
           QS.total_worker_time,
           QS.last_worker_time,
           QS.max_worker_time,
           QS.min_worker_time
    FROM sys.dm_exec_query_stats QS
        CROSS APPLY sys.dm_exec_sql_text(QS.sql_handle) ST
    WHERE 1 = 1
          AND QS.creation_time
          BETWEEN '2017-09-09 10:00:00' AND '2025-09-11 18:00:00'
          AND ST.text LIKE '%%'
    ORDER BY QS.creation_time DESC;
    
    

    三、查询实际执行过的事务日志   完成度:100%

    查看数据库事务日志中的记录,fn_dblog中读取。

    
    /* allocunitname常用的检索类型
    LOP_BUF_WRITE
    LOP_SET_FREE_SPACE
    LOP_LOCK_XACT
    LOP_SHRINK_NOOP
    LOP_XACT_CKPT
    LOP_PREP_XACT
    LOP_INSERT_ROWS
    LOP_MODIFY_COLUMNS
    LOP_COUNT_DELTA
    LOP_HOBT_DELTA
    LOP_MODIFY_HEADER
    LOP_COMMIT_XACT
    LOP_DELETE_SPLIT
    LOP_END_CKPT
    LOP_BEGIN_XACT
    LOP_MODIFY_ROW
    LOP_INSYSXACT
    LOP_FILE_HDR_MODIFY
    LOP_CLEAR_GAM_BITS
    LOP_FORMAT_PAGE
    LOP_BEGIN_CKPT
    LOP_SET_BITS
    */
    
    
    SELECT [Begin Time],
           [End Time],
           AllocUnitName,
           Operation,
           [RowLog Contents 0] AS r0,
           [RowLog Contents 1] AS r1,
           *
    FROM fn_dblog(NULL, NULL)
    WHERE AllocUnitName LIKE 'dbo.%' --影响的表
          AND Operation IN ( 'LOP_DELETE_ROWS' )--操作类型
    

    四、声明与参考资料   完成度:100%

    sys.dm_exec_query_stats

    原创博文,未经许可请勿转载。

    如有帮助,欢迎点赞、收藏、关注。如有问题,请评论留言!如需与博主联系的,直接博客私信SCscHero即可。

  • 相关阅读:
    第一次作业
    C语言I博客作业02
    C语言|博客作业11
    C语言I博客作业10
    C语言I博客作业09
    C语言I博客作业08
    C语言I博客作业07
    C语言I博客作业06
    C语言I博客作业05
    JDK-14 & Eclipse & Hello World!
  • 原文地址:https://www.cnblogs.com/SCscHero/p/14828181.html
Copyright © 2020-2023  润新知