A couple weeks ago, I participated in T-SQL Tuesday #26 with a trick to dynamically build a script for doing your restores. In the spirit of that laziness, I wanted to share with you another script I have for configuring Tempdb. There’s not much special here and you could use any other scripting language to get the same result, but the idea is to automate the bulk of the task so that you can save yourself some work as well as creating consistent processes for your database configurations.
--Configure TempDB --Turn off nasty rowcount SET NOCOUNT ON --Declare some variables declare @files int, @path varchar(max), @totalsize_gb float, @v_sql varchar(max), @filesize_mb int, @logsize_mb int, @currfile int --Set these to configure tempdb set @files = 8 set @path = 'T:\TempDB\' set @totalsize_gb = 40 --script calculates individual file sizes select @filesize_mb=FLOOR((@totalsize_gb*1024)/(@files)),@logsize_mb = FLOOR(@totalsize_gb*1024)* .25 --Build your config script set @v_sql ='use tempdb dbcc shrinkfile (tempdev,100) alter database tempdb modify file (NAME=tempdev, FILENAME='''+@path+'tempdb.mdf'', SIZE='+CONVERT(nvarchar(10),@filesize_mb)+'MB, FILEGROWTH=512MB, MAXSIZE=UNLIMITED) alter database tempdb modify file (NAME=templog, FILENAME='''+@path+'templog.ldf'', SIZE='+CONVERT(nvarchar(10),@logsize_mb)+'MB, FILEGROWTH=512MB, MAXSIZE=UNLIMITED) ' set @currfile = 1 while @currfile < @files begin set @v_sql = @v_sql + 'alter database tempdb add file (NAME=tempdb'+CONVERT(nvarchar(10),@currfile)+', FILENAME='''+@path+'tempdb'+CONVERT(nvarchar(10),@currfile)+'.ndf'', SIZE='+CONVERT(nvarchar(10),@filesize_mb)+'MB, FILEGROWTH=512MB, MAXSIZE=UNLIMITED) ' set @currfile = @currfile+1 end select @v_sql = @v_sql + char(10)+'--Verify your configuration!'+char(10) + 'select name,size/128.0 [size_mb],physical_name from sys.database_files' print(@v_sql) PRINT '/***RESTART SERVER***/'
There are three things we want to declare up near the top, and that is number of files, location of the files, and total size of the files. Without getting into the larger discussion of how many files you should have (for those wondering, start at Paul Randal’s(b|t) blog post on it), this script will help you make all your files consistent.
Some other notes about things I have set:
- The total file size is total data file size. Log file size is in addition to this, so plan accordingly.
- I’ve got the log file calculation to size to 25% of the total data files.
- I’ve got autogrowth on all files set to half a GB (512 MB).
These settings are completely personal preference, so your miles may vary. If you have different practices, by all means implement those. The point here, as with my RESTORE script, it to pre-build most of your configuration script so that you only have to tweak a couple things.
P.S. It should be noted that I call out a DBCC SHRINKFILE on tempdb. The idea of this script is your running it either while configuring a server or during a maintenance period. Shrinking a live tempdb can cause corruption, so only execute this script when you’re planning on restarting the server and rebuilding tempdb as part of your configuration. (Thanks to Vicky Harp (b) for reminding me about that.)