假设我们有一些编写得不好的SQL,在完成时不会释放临时表,或者编写好的SQL会在创建临时表之后被杀死 之前它会丢弃它们
这是否会导致SQL Server实例吸收大量内存而不释放内存?我该如何收回这段记忆?
答案 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%'