未删除的临时表是否会导致SQL Server中的内存消耗?

时间:2011-04-06 16:02:33

标签: sql-server sql-server-2008

假设我们有一些编写得不好的SQL,在完成时不会释放临时表,或者编写好的SQL会在创建临时表之后被杀死 之前它会丢弃它们

这是否会导致SQL Server实例吸收大量内存而不释放内存?我该如何收回这段记忆?

1 个答案:

答案 0 :(得分:4)

临时表在超出范围后将被删除...我在谈论的是一个本地临时表,而不是全局临时表(带有2磅标记)

SQL Server将总是吸收大量内存,它会尽可能多地将数据放入缓存中,从RAM获取数据的速度比从磁盘获取数据快1000倍

在SSMS中运行

CREATE TABLE #MyTemp(id INT)
GO
SELECT * FROM tempdb.sys.tables
WHERE name LIKE '#MyTemp%'

现在在SSMS中关闭该窗口

在另一个窗口中运行

SELECT * FROM tempdb.sys.tables
WHERE name LIKE '#MyTemp%'

桌子还在吗?

如果表是在proc中创建的,则在proc完成时它不存在

CREATE PROCEDURE prtestTemp
AS 
CREATE TABLE #temp(id INT)

SELECT * FROM tempdb.sys.tables
WHERE name LIKE '#Temp%'

GO

运行proc

EXEC prtestTemp

现在运行它,表不存在

SELECT * FROM #temp

SELECT * FROM tempdb.sys.tables
WHERE name LIKE '#Temp%'