首页 > 开发 > 综合 > 正文

SQLServer Temp tables 数据疑问

2024-07-21 02:49:50
字体:
来源:转载
供稿:网友
SQLServer Temp tables 数据疑问 2014-06-30 15:52 by JentleWang, ... 阅读, ... 评论, 收藏, 编辑 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 tempdbgo 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--临时表的缓存》

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

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

再次谢谢笑东风的回复!


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表