• SQLServer Temp tables 数据疑问


    1. 现象

    使用Cacti监控,有关于临时表的一个图形

    可以看到正在使用的临时表Active Temp Tables的数量非常大,并且在非工作时间,也维持在400个左右。感觉非常奇怪,所以追查下!

    2. 探索

    首先,先验证下Cacti数据是否准确,已知Cacti数据是从SQLServer的sys.dm_os_performance_counters 计数器DMV中取数的。所以查询下数据:

    select * 
    from sys.dm_os_performance_counters 
    where counter_name ='Active Temp Tables'
    

    查询结果和图中展示数据没有差别

    然后,查询下目前的临时表究竟有哪些。使用如下SQL:

    use tempdb
    go 
    select * 
    from sys.objects 
    where name like '#%' 
    order by create_date asc 

    查询结果如下:

    可以得出如下结论:

    1) 临时表的数量与Cacti图中的数量基本一致

    2)从临时表的命名来看,基本为表变量对应的临时表。因为若是创建的临时表,命名为#temp_xxxx_随机标识

    3)很多临时表,基本是表变量对应的,创建日期为十几天前,且最近并未更改,但SQLServer一直为销毁

    3.未解谜题

    按照已有的知识,表变量在所在批处理语句结束后,就会释放掉,为什么会有如此的temp tables 未被销毁呢?

    20140701补充:

    4.问题答案

    见这篇博文 TempDB--临时表的缓存

    解决问题的思路上,我之前也想过要查看临时表的内容,但临时表只在所属的会话内有效,无法查看内容,所以问题卡在这里。

    上文给了一个思路是通过查看临时表中包含的列,通过表中列的内容,可以继续下一步的分析,直至问题的解决~

    再次谢谢笑东风的回复!

  • 相关阅读:
    对C#下函数,委托,事件的一点理解!
    Firefox XPI插件安装方法
    assert()函数用法总结
    Linux下rsync的用法
    windows XP下如何切换用户到Administrator
    预编译命令#pragma once与 #ifndef的区别
    DOS命令下获取远程主机MAC地址的三种方法
    net send命令详解
    Linux守护进程详解(init.d和xinetd)
    如何在真机上调试Android应用程序(图文详解)
  • 原文地址:https://www.cnblogs.com/JentleWang/p/3816735.html
Copyright © 2020-2023  润新知