Sql 未刪除的臨時表是否會導致SQL 內存消耗失控?
sql---2008
Sql 未刪除的臨時表是否會導致SQL 內存消耗失控?,sql-,sql--2008,Sql ,Sql 2008,假設我們有一些寫得很差的SQL,在完成時不會釋放臨時表,或者寫得很好的SQL在創建臨時表之后但在刪除臨時表之前被殺死這是否會導致SQL 實例占用大量內存而不釋放內存?如何回收此內存?臨時表超出范圍后將被刪除…我這里說的是本地臨時表,而不是帶有2磅符號的全局臨時表SQL 總是會占用大量內存,它會將盡可能多的數據放在緩存中,從RAM獲取數據的速度是從磁盤獲取數據的1000倍在SSMS中運行此命令 TABLE #(id INT)
假設我們有一些寫得很差的SQL,在完成時不會釋放臨時表數據庫置疑會導致臨時表無法刪除嗎,或者寫得很好的SQL在創建臨時表之后但在刪除臨時表之前被殺死
這是否會導致SQL 實例占用大量內存而不釋放內存?如何回收此內存?
臨時表超出范圍后將被刪除…我這里說的是本地臨時表,而不是帶有2磅符號的全局臨時表
SQL 總是會占用大量內存,它會將盡可能多的數據放在緩存中,從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%'
桌子還在嗎
如果表是在過程中創建的,則在過程完成時它不在那里
CREATE PROCEDURE prtestTemp
AS
CREATE TABLE #temp(id INT)
SELECT * FROM tempdb.sys.tables
WHERE name LIKE '#Temp%'
GO
運行程序
EXEC prtestTemp
現在運行這個,表不在那里
SELECT * FROM #temp
SELECT * FROM tempdb.sys.tables
WHERE name LIKE '#Temp%'
臨時表在超出范圍后將被刪除…我這里說的是本地臨時表,而不是帶有2磅符號的全局臨時表
SQL 總是會占用大量內存,它會將盡可能多的數據放在緩存中,從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%'
桌子還在嗎
如果表是在過程中創建的,則在過程完成時它不在那里
CREATE PROCEDURE prtestTemp
AS
CREATE TABLE #temp(id INT)
SELECT * FROM tempdb.sys.tables
WHERE name LIKE '#Temp%'
GO
運行程序
EXEC prtestTemp
現在運行這個,表不在那里
SELECT * FROM #temp
SELECT * FROM tempdb.sys.tables
WHERE name LIKE '#Temp%'
關于全球表格有什么想法嗎?我知道文檔中說,全局臨時表在創建后對任何用戶和任何連接都可見,并且在所有引用該表的用戶斷開與SQL 實例的連接時都會被刪除。但這似乎是錯誤的,當AFAIK和我沒有真正使用全局臨時表時數據庫置疑會導致臨時表無法刪除嗎,它們將一直存在,直到你重新啟動或表被刪除。馬丁,我剛剛測試,我在一個窗口中創建了一個臨時表,關閉了窗口,打開了另一個窗口,從臨時表中選擇了*并得到了這個..Msg 208,16級,狀態0,第1行對象名稱“temp”無效。不記得以前是這樣的嗎?全球表格上有什么想法嗎?我知道文檔中說,全局臨時表在創建后對任何用戶和任何連接都可見,并且在所有引用該表的用戶斷開與SQL 實例的連接時都會被刪除。但這似乎是錯誤的,當AFAIK和我沒有真正使用全局臨時表時,它們將一直存在,直到你重新啟動或表被刪除。馬丁,我剛剛測試,我在一個窗口中創建了一個臨時表,關閉了窗口,打開了另一個窗口,從臨時表中選擇了*并得到了這個..Msg 208,16級,狀態0,第1行對象名稱“temp”無效。不記得以前是這樣的