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 未被销毁呢?
请指教!谢谢~