Auto Shrink = True

Oopps! Upgrade your browser pretty please.Oopps! Upgrade your browser pretty please.

Som jag skrivit tidigare så skall man aldrig ha Auto Shrink aktiverat för någon databas i sin SQL Server miljö. Hur detta kan slå i kombination med Auto Grow visar jag längre ned detta blogginlägg. Att Auto Shrink överhuvudtaget finns kvar brukar man säga beror på bakåtkompatibilitet med tidigare SQL Server versioner. Det är också sällan man hör någon vara så missnöjd men sin kod som Paul Randal är över Auto Shrink. För att konstatera om någon databas har Auto Shrink aktiverat kan man använda denna SQL: SELECT name, is_auto_shrink_on FROM sys.databases WHERE is_auto_shrink_on = 1

Skulle så vara fallet så ändrar man detta med : ALTER DATABASE [databasnamn] SET AUTO_SHRINK OFF WITH NO_WAIT

Nu till vilka följder detta kan få. Ett enkelt sätt att se historiks hur data/loggfilerna växt/krympt är att att använda standardrapporten Disk Usage i Management Studio. 

Dock är det så att denna rapport inte att går att köra om man har en databas i komptabilitetslägen 80, dvs SQL Server 2000.

I stället kan man använda nedanstående SQL. exec sp_executesql @stmt=N’begin try if (select convert(int,value_in_use) from sys.configurations where name = ”default trace enabled” ) = 1 begin declare @curr_tracefilename varchar(500) ; declare @base_tracefilename varchar(500) ; declare @indx int ; select @curr_tracefilename = path from sys.traces where is_default = 1 ; set @curr_tracefilename = reverse(@curr_tracefilename); select @indx = patindex(”%%”, @curr_tracefilename) ; set @curr_tracefilename = reverse(@curr_tracefilename) ; set @base_tracefilename = left( @curr_tracefilename,len(@curr_tracefilename) – @indx) + ”log.trc” ; select case convert(int, EventClass) when 92 then ”Data File Auto Grow” when 93 then ”Log File Auto Grow” when 94 then ”Data File Auto Shrink” when 95 then ”Log File Auto Shrink” end as EventClass , (Duration/1000) as Duration , StartTime , EndTime , (IntegerData*8.0/1024) as ChangeInSize from ::fn_trace_gettable( @base_tracefilename, default ) where EventClass >= 92 and EventClass order by StartTime desc ; end else select -1 as l1, 0 as EventClass, 0 DatabaseName, 0 as Filename, 0 as Duration, 0 as StartTime, 0 as EndTime,0 as ChangeInSize end try begin catch select -100 as l1 , ERROR_NUMBER() as EventClass , ERROR_SEVERITY() DatabaseName , ERROR_STATE() as Filename , ERROR_MESSAGE() as Duration , 1 as StartTime, 1 as EndTime,1 as ChangeInSize end catch’,@params=N” Till slut kommer här en av anledningarna till varför man inte skall sätta Auto Shrink = True. Som ni kan se av bilden nedan är det rätt avsevärd tid som går åt för att loggfilen i det här fallet skall växa och därefter krympa i ett snurrande ekorrhjul.