阅文时长 | | 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即可。