use tempdb SET NOCOUNT ON DBCC SHRINKDATABASE (tempdb, 0) SELECT TempDataSize = TD.F,TempLogSize = TL.F FROM (SELECT size*8 F FROM dbo.sysfiles WHERE (status & 0x40) = 0) TD ,(SELECT size*8 F FROM dbo.sysfiles WHERE (status & 0x40) <> 0) TL SELECT GETDATE() declare @table TABLE (f1 CHAR(8000) NULL) insert into @table values('') declare @i INT select @i=0 while @i<12 begin insert into @table SELECT*FROM @table select @i=@i+1 end SELECT TempDataSize = TD.F,TempLogSize = TL.F FROM (SELECT size*8 F FROM dbo.sysfiles WHERE (status & 0x40) = 0) TD ,(SELECT size*8 F FROM dbo.sysfiles WHERE (status & 0x40) <> 0) TL SELECT GETDATE() -- with go release the variables go SELECT 'end after release',GETDATE() SELECT TempDataSize = TD.F,TempLogSize = TL.F FROM (SELECT size*8 F FROM dbo.sysfiles WHERE (status & 0x40) = 0) TD ,(SELECT size*8 F FROM dbo.sysfiles WHERE (status & 0x40) <> 0) TL RETURN -- on my pc: -- total time = 37s -- release time = 60ms -- tempdb size increment = data : 50624-8192=33280 KB Log : 20096-512 = 19584 KBThis uses DELETE
use tempdb SET NOCOUNT ON DBCC SHRINKDATABASE (tempdb, 0) SELECT TempDataSize = TD.F,TempLogSize = TL.F FROM (SELECT size*8 F FROM dbo.sysfiles WHERE (status & 0x40) = 0) TD ,(SELECT size*8 F FROM dbo.sysfiles WHERE (status & 0x40) <> 0) TL -- Now redo the operation with delete @table declare @table TABLE (f1 CHAR(8000) NULL) insert into @table values('') declare @i INT select @i=0 while @i<12 begin insert into @table SELECT*FROM @table select @i=@i+1 end SELECT TempDataSize = TD.F,TempLogSize = TL.F FROM (SELECT size*8 F FROM dbo.sysfiles WHERE (status & 0x40) = 0) TD ,(SELECT size*8 F FROM dbo.sysfiles WHERE (status & 0x40) <> 0) TL SELECT GETDATE() DELETE @table SELECT 'end after release',GETDATE() SELECT TempDataSize = TD.F,TempLogSize = TL.F FROM (SELECT size*8 F FROM dbo.sysfiles WHERE (status & 0x40) = 0) TD ,(SELECT size*8 F FROM dbo.sysfiles WHERE (status & 0x40) <> 0) TL RETURN -- total time = 54s -- delete time = 16s and a Log increment of 56MB !!!! -- tempdb size increment = data : 50624-8192=33280 KB Log : 76736-512 = 76224 KB !!!!!!This uses a temporary table with DROP
use tempdb SET NOCOUNT ON DBCC SHRINKDATABASE (tempdb, 0) SELECT TempDataSize = TD.F,TempLogSize = TL.F FROM (SELECT size*8 F FROM dbo.sysfiles WHERE (status & 0x40) = 0) TD ,(SELECT size*8 F FROM dbo.sysfiles WHERE (status & 0x40) <> 0) TL SELECT GETDATE() create table #table ( f1 CHAR(8000) NULL) insert into #table values('') declare @i INT select @i=0 while @i<12 begin insert into #table SELECT * FROM #table select @i=@i+1 end SELECT TempDataSize = TD.F,TempLogSize = TL.F FROM (SELECT size*8 F FROM dbo.sysfiles WHERE (status & 0x40) = 0) TD ,(SELECT size*8 F FROM dbo.sysfiles WHERE (status & 0x40) <> 0) TL SELECT GETDATE() DROP TABLE #table SELECT 'end after release',GETDATE() SELECT TempDataSize = TD.F,TempLogSize = TL.F FROM (SELECT size*8 F FROM dbo.sysfiles WHERE (status & 0x40) = 0) TD ,(SELECT size*8 F FROM dbo.sysfiles WHERE (status & 0x40) <> 0) TL RETURN -- total time = 37s -- drop time = 10ms -- tempdb size increment = data : 50624-8192=33280 KB Log : 20096-512 = 19584 KBThis uses a temporary table with DELETE
use tempdb SET NOCOUNT ON DBCC SHRINKDATABASE (tempdb, 0) SELECT TempDataSize = TD.F,TempLogSize = TL.F FROM (SELECT size*8 F FROM dbo.sysfiles WHERE (status & 0x40) = 0) TD ,(SELECT size*8 F FROM dbo.sysfiles WHERE (status & 0x40) <> 0) TL SELECT GETDATE() create table #table ( f1 CHAR(8000) NULL) insert into #table values('') declare @i INT select @i=0 while @i<12 begin insert into #table SELECT * FROM #table select @i=@i+1 end SELECT TempDataSize = TD.F,TempLogSize = TL.F FROM (SELECT size*8 F FROM dbo.sysfiles WHERE (status & 0x40) = 0) TD ,(SELECT size*8 F FROM dbo.sysfiles WHERE (status & 0x40) <> 0) TL SELECT GETDATE() DELETE #table SELECT 'end after delete #table',GETDATE() SELECT TempDataSize = TD.F,TempLogSize = TL.F FROM (SELECT size*8 F FROM dbo.sysfiles WHERE (status & 0x40) = 0) TD ,(SELECT size*8 F FROM dbo.sysfiles WHERE (status & 0x40) <> 0) TL DROP TABLE #table RETURN -- total time = 37s -- drop time = 16s -- tempdb size increment = data : 50624-8192=33280 KB Log : 76736-512 = 76224 KB This is expectedYou see that a go free the @TableVar in a flash, and free the Tempdb allocated pages.