使用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--臨時表的緩存》
解決問題的思路上,我之前也想過要查看臨時表的內容,但臨時表只在所屬的會話內有效,無法查看內容,所以問題卡在這里。
上文給了一個思路是通過查看臨時表中包含的列,通過表中列的內容,可以繼續下一步的分析,直至問題的解決~
再次謝謝笑東風的回復!
新聞熱點
疑難解答