Recomanació de número d’arxius

DECLARE @check BIT
 
SET @check = 0 --For information set 0, for change 1
 
DECLARE @BASEPATH NVARCHAR(300)
DECLARE @SQL_SCRIPT NVARCHAR(1000)
DECLARE @CORES INT
DECLARE @FILECOUNT INT
DECLARE @SIZE INT
DECLARE @GROWTH INT
DECLARE @ISPERCENT INT
 
-- TempDB mdf count equal logical cpu count
SELECT @CORES = cpu_count FROM sys.dm_os_sys_info
 
PRINT 'Logical CPU count ' + CAST(@CORES AS NVARCHAR(100))
 
IF @CORES BETWEEN 9 AND 31 SET @CORES = @CORES / 2
IF @CORES >= 32 SET @CORES = @CORES / 4
 
--Check and set tempdb files count are multiples of 4
IF @CORES > 8 SET @CORES = @CORES - (@CORES % 4)
 
SET @BASEPATH = (SELECT SUBSTRING(physical_name, 1, CHARINDEX(N'tempdb.mdf', LOWER(physical_name)) - 1) DataFileLocation
FROM master.sys.master_files
WHERE database_id = 2 AND FILE_ID = 1)
 
SET @FILECOUNT = (SELECT COUNT(*)
FROM master.sys.master_files
WHERE database_id = 2 AND TYPE_DESC = N'ROWS')
 
SELECT @SIZE = size FROM master.sys.master_files WHERE database_id = 2 AND FILE_ID = 1
SET @SIZE = @SIZE / 128
 
SELECT @GROWTH = growth FROM master.sys.master_files WHERE database_id = 2 AND FILE_ID = 1
SELECT @ISPERCENT = is_percent_growth FROM master.sys.master_files WHERE database_id = 2 AND FILE_ID = 1
 
IF @ISPERCENT = 0 SET @GROWTH = @GROWTH * 8
 
--Current situation
PRINT 'Needed ' + CAST(@CORES AS NVARCHAR(100)) + ' TempDB data files, now there is ' + CAST(@FILECOUNT AS NVARCHAR(100)) + CHAR(10) + CHAR(13)
 
IF @check = 1 AND @CORES > @FILECOUNT PRINT 'Commands listed below will be executed' + CHAR(10) + CHAR(13)
IF @check = 0 AND @CORES > @FILECOUNT PRINT 'Commands listed below will NOT be executed' + CHAR(10) + CHAR(13)
 
WHILE @CORES > @FILECOUNT
BEGIN
                SET @SQL_SCRIPT = N'ALTER DATABASE tempdb
                ADD FILE (
                               FILENAME = ''' + @BASEPATH + 'tempdb' + RTRIM(CAST(@CORES AS NCHAR)) + '.ndf'',
                               NAME = tempdev' + RTRIM(CAST(@CORES AS NCHAR)) + ',
                               SIZE = ' + RTRIM(CAST(@SIZE AS NCHAR)) + 'MB,
                               FILEGROWTH = ' + RTRIM(CAST(@GROWTH AS NCHAR))
                IF @ISPERCENT = 1 SET @SQL_SCRIPT = @SQL_SCRIPT + '%' ELSE SET @SQL_SCRIPT = @SQL_SCRIPT + 'KB'         
                SET @SQL_SCRIPT = @SQL_SCRIPT + ')'
                IF @check = 1 EXEC(@SQL_SCRIPT)      
                PRINT @SQL_SCRIPT
                SET @CORES = @CORES - 1
END