MSSQL如何定位大量占用tempdb的SQL语句

0    18    1

Tags:

👉 本文共约1131个字,系统预计阅读时间或需5分钟。

简介

有时会收到tempdb日志文件使用率超过90%的告警,最准确的处理方式是直接登上去看有哪些长时间运行且会大量消耗tempdb的语句在执行,但有时刚好不方便操作,在登录查看时sql已经执行完了,事后难判断。
查询文章发现还可以通过tempdb分配情况去分析,不过要注意这种方法找到的只是问题会话,未必能找到导致问题的sql,感觉配合扩展事件的慢sql监控应该能解决这个问题。

查看tempdb记录的分配情况

如果查询上面的DMV距事件发生时间太久,可能就查不到了,要尽快查看

本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!

MSSQL如何定位大量占用tempdb的SQL语句

有四个关键信息:

  • session_id:可以查询该session的相关信息
  • internal_objects_alloc_page_count:分配给session内部对象的数据页
  • internal_objects_dealloc_page_count:已经释放的数据页
  • login_name:该session的登录名
    1. 从internal_objects_alloc_page_count可以看出,给session分配了133200页,计算一下大约是1G,假如和告警时tempdb增长的大小一致,执行时间也接近,基本就可以断定是这个session引起的。
    2. 从internal_objects_dealloc_page_count可以看到占用tempdb的数据已经释放了。
    3. 从login_name可知道操作人(这就是实名用户的好处之一,可以很快追踪使用者,是内部人员操作)。
    4. 从session_id可以查询最后一条执行的语句。

最后查出来这是一个select into的语句
MSSQL如何定位大量占用tempdb的SQL语句

补充tempdb相关sql

tempdb空间使用跟踪(不要用sp_spaceused)

获取每个会话对TEMPDB用户对象和内部对象的使用空间

查占用 temp db的sql

参考

https://blog.csdn.net/Hehuyi_In/article/details/103149146?spm=1001.2014.3001.5502
https://blog.csdn.net/kk185800961/article/details/43530153
SQLServer · 最佳实践 · TEMPDB的设计
Track SQL Server TempDB Space Usage
https://thesqldude.com/2012/05/15/monitoring-tempdb-space-usage-and-scripts-for-finding-queries-which-are-using-excessive-tempdb-space/

标签:

头像

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复

嘿,我是小麦,需要帮助随时找我哦
  • 18509239930
  • 个人微信

  • 麦老师QQ聊天
  • 个人邮箱
  • 点击加入QQ群
  • 个人微店

  • 回到顶部
返回顶部