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