经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » MS SQL Server » 查看文章
MSSQL·查询T-SQL执行记录
来源:cnblogs  作者:SCscHero  时间:2021/5/31 9:04:53  对本文有异议
阅文时长 | 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有一定的开销。

  1. SELECT TOP 1000
  2. QS.creation_time,
  3. SUBSTRING( ST.text,
  4. (QS.statement_start_offset / 2) + 1,
  5. ((CASE QS.statement_end_offset
  6. WHEN -1 THEN
  7. DATALENGTH(ST.text)
  8. ELSE
  9. QS.statement_end_offset
  10. END - QS.statement_start_offset
  11. ) / 2
  12. ) + 1
  13. ) AS statement_text,
  14. ST.text,
  15. QS.total_worker_time,
  16. QS.last_worker_time,
  17. QS.max_worker_time,
  18. QS.min_worker_time
  19. FROM sys.dm_exec_query_stats QS
  20. CROSS APPLY sys.dm_exec_sql_text(QS.sql_handle) ST
  21. WHERE 1 = 1
  22. AND QS.creation_time
  23. BETWEEN '2017-09-09 10:00:00' AND '2025-09-11 18:00:00'
  24. AND ST.text LIKE '%%'
  25. ORDER BY QS.creation_time DESC;

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

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

  1. /* allocunitname常用的检索类型
  2. LOP_BUF_WRITE
  3. LOP_SET_FREE_SPACE
  4. LOP_LOCK_XACT
  5. LOP_SHRINK_NOOP
  6. LOP_XACT_CKPT
  7. LOP_PREP_XACT
  8. LOP_INSERT_ROWS
  9. LOP_MODIFY_COLUMNS
  10. LOP_COUNT_DELTA
  11. LOP_HOBT_DELTA
  12. LOP_MODIFY_HEADER
  13. LOP_COMMIT_XACT
  14. LOP_DELETE_SPLIT
  15. LOP_END_CKPT
  16. LOP_BEGIN_XACT
  17. LOP_MODIFY_ROW
  18. LOP_INSYSXACT
  19. LOP_FILE_HDR_MODIFY
  20. LOP_CLEAR_GAM_BITS
  21. LOP_FORMAT_PAGE
  22. LOP_BEGIN_CKPT
  23. LOP_SET_BITS
  24. */
  25. SELECT [Begin Time],
  26. [End Time],
  27. AllocUnitName,
  28. Operation,
  29. [RowLog Contents 0] AS r0,
  30. [RowLog Contents 1] AS r1,
  31. *
  32. FROM fn_dblog(NULL, NULL)
  33. WHERE AllocUnitName LIKE 'dbo.%' --影响的表
  34. AND Operation IN ( 'LOP_DELETE_ROWS' )--操作类型

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

sys.dm_exec_query_stats

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

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

原文链接:http://www.cnblogs.com/SCscHero/p/14828181.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号