Heim  >  Artikel  >  Datenbank  >  SQLServer Temp tables 数据疑问

SQLServer Temp tables 数据疑问

WBOY
WBOYOriginal
2016-06-07 15:44:38973Durchsuche

1. 现象 使用Cacti监控,有关于临时表的一个图形 可以看到正在使用的临时表Active Temp Tables的数量非常大,并且在非工作时间,也维持在400个左右。感觉非常奇怪,所以追查下! 2. 探索 首先,先验证下Cacti数据是否准确,已知Cacti数据是从SQLServer的sys.

1. 现象

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

SQLServer Temp tables 数据疑问

可以看到正在使用的临时表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:

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

查询结果如下:

SQLServer Temp tables 数据疑问

可以得出如下结论:

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

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

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

3.未解谜题

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

 

20140701补充:

 

4.问题答案

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

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

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

再次谢谢笑东风的回复!

 

 

 

 

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn