欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

MSSQL·查询T-SQL执行记录

程序员文章站 2022-06-25 12:26:06
阅文时长 | 0.78分钟 字数统计 | 1261.6字符 主要内容 | 1、引言&背景 2、查询最近的T-SQL执行记录 3、查询实际执行过的事务日志 4、声明与参考资料 『MSSQL·查询T-SQL执行记录』 编写人 | SCscHero 编写时间 | 2021/5/30 PM2:18 文章类型 ......
阅文时长 | 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%

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

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