IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Set_TempDB]') AND type in (N'P', N'PC')) DROP PROCEDURE [dbo].[Set_TempDB] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE [dbo].[Set_TempDB] @in_debug int = null, @in_Entity varchar(4), @in_Mode smallint = 1 AS /*============================================================================= Explication du traitement realise par la SP ------------------------------------------- Cette SP sert à paramètrer les fichiers de tempDB et les resizer correctement en fonction du nombre de CPU Contexte d'utilisation ---------------------- Cette SP peut être appelé dans SSMS pour l'initalisation de tempDB Cette SP est appelé par le job _9402X - FLA -Redefine TempDB file Size Parametres ---------- @in_debug : affiche les commandes qui vont être executées @in_Entity : SUN, AMA, AAI, CVI, RUEG @in_Mode : 0 = init de tempDB, 1 = Mise à jour de la taille des fichiers de tempDB Creation : 01.11.16 / FLA Modifications : 09.01.2017 / FLA : Ajout de CVI 07.02.2017 / RTC : Update AAI initial file size 13.03.2017 / RTC : Update initial file size for AAI from 256 to 384. 29.03.2017 / RTC : Update initial file size for AAI to 512 and auto growth to 128. 20.12.2018 / SPE : #TFS49408# Migrate identification table [master].[cfg].[Identity] 02.10.2019 / SPE : #TFS55659# change tempdb initial size 1056 16.10.2019 / SPE : #TFS55659# change tempdb initial size 1152 23.10.2019 / SPE : #TFS55659# change tempdb initial size 1280 (GC) 1024 (AAI) 09.12.2019 / SPE : Change templog initial size to 2048 for GC =============================================================================*/ set nocount on; /*------------------- Declaration des variables --------------------*/ declare @NbCPU INT, @AutoGrow INT, @FileSize INT, @LogicalName VARCHAR(255), @PhysicalName VARCHAR(255), @FilePath VARCHAR(255), @i INT, @sql VARCHAR(255), @file_id INT, @FileName VARCHAR(255), @LogAutoGrow INT, @LogFileSize INT, @cmd varchar(200); /*------------ Affectation des parametres aux variables ------------*/ IF ((@in_Entity = 'AAI') or (@in_Entity = 'RUEG')) BEGIN /*in MB */ SET @AutoGrow = 128; SET @FileSize = 1024; SET @LogFileSize = 1024; SET @LogAutoGrow = 128; END ELSE BEGIN /*in MB */ SET @AutoGrow = 128; SET @FileSize = 1280; SET @LogFileSize = 2048; SET @LogAutoGrow = 256; END SET @i = 2; /*-------------------------- Traitement ---------------------------*/ BEGIN TRY IF (SELECT ((size*8)/1024) as SIZE_IN_MB from sys.master_files where database_id=2 and Name = 'tempdev') > @FileSize BEGIN PRINT 'Current tempdb FileSize is larger than the variable @FileSize! Leave this SP.' RETURN END IF @in_Mode = 0 BEGIN /*********************************************************************************************************************************/ /* Ce script créer automatiquement des fichiers tempDB sizé à l'identique en fonction du nombre de CPU, de l'espace disk etc... */ /*********************************************************************************************************************************/ /* Check if tempDB is already sized*/ IF (select count(file_id) FROM tempdb.sys.dm_db_file_space_usage) <= 1 BEGIN /* Get get actual tempDB file size and path for tempDB file*/ SELECT @PhysicalName = physical_name, @LogicalName = name FROM tempdb.sys.database_files WHERE type = 0 SET @FilePath = REVERSE(RIGHT(REVERSE(@PhysicalName),(LEN(@PhysicalName)-CHARINDEX('\', REVERSE(@PhysicalName),1))+1)); SET @PhysicalName = SUBSTRING(@PhysicalName,LEN(@FilePath)+1,LEN(@PhysicalName)-LEN(@FilePath)-4); /* Get number of CPU */ SELECT @NbCPU = cpu_count FROM sys.dm_os_sys_info /* Check if CPU >= 8 */ IF @NbCPU >= 8 BEGIN SET @NbCPU = 8 END WHILE (@i <= @NbCPU) BEGIN SET @sql = 'ALTER DATABASE [tempdb] ADD FILE ( NAME = N'''+ @LogicalName + CONVERT(VARCHAR(1),@i)+''' , FILENAME = N'''+ @FilePath + @PhysicalName +CONVERT(VARCHAR(1),@i)+'.ndf'', SIZE = '+ CONVERT(VARCHAR(20),@FileSize) +' , FILEGROWTH = '+ CONVERT(VARCHAR(20),@AutoGrow) +')' IF @in_debug = 1 PRINT @sql ELSE EXEC(@sql) SET @i = @i+1 END END ELSE PRINT 'TempDB is already sized'; /*********************************************************************************************************************************/ /* Ce script shrink et resize automatiquement le fichiers de log de tempDB en fonction des paramètres en entrée */ /*********************************************************************************************************************************/ /* Get File id and file path of tempDB log file */ SELECT @file_id = file_id, @FilePath = physical_name, @FileName = name FROM tempdb.sys.database_files WHERE type = 1 SET @cmd = 'USE tempDB; /* SHRINK the tempDB file log */ DBCC SHRINKFILE ('+CAST(@file_id as varchar(3))+') WITH NO_INFOMSGS'; EXEC (@cmd) /* Change the size of tempDB log file */ SET @sql = 'ALTER DATABASE [tempdb] MODIFY FILE ( NAME = N'''+ @FileName + ''', FILENAME = N'''+ @FilePath + ''', SIZE = '+ CONVERT(VARCHAR(20),@LogFileSize) +' , FILEGROWTH = '+ CONVERT(VARCHAR(20),@LogAutoGrow) +')' IF @in_debug = 1 PRINT @sql ELSE EXEC(@sql) END ELSE IF @in_Mode = 1 BEGIN DECLARE c_Files CURSOR FOR SELECT file_id, physical_name, name FROM tempdb.sys.database_files WHERE type = 0 open c_Files FETCH NEXT FROM c_Files into @file_id, @FilePath, @FileName WHILE @@FETCH_STATUS = 0 BEGIN SET @cmd = 'USE tempDB; /* SHRINK the tempDB file log */ DBCC SHRINKFILE ('+CAST(@file_id as varchar(3))+') WITH NO_INFOMSGS'; EXEC (@cmd) /* Change the size of tempDB file */ SET @sql = 'ALTER DATABASE [tempdb] MODIFY FILE ( NAME = N'''+ @FileName + ''', FILENAME = N'''+ @FilePath + ''', SIZE = '+ CONVERT(VARCHAR(20),@FileSize) +' , FILEGROWTH = '+ CONVERT(VARCHAR(20),@AutoGrow) +')' IF @in_debug = 1 PRINT @sql ELSE EXEC(@sql) FETCH NEXT FROM c_Files into @file_id, @FilePath, @FileName END CLOSE c_Files DEALLOCATE c_Files IF @in_Entity = 'SUN' EXEC msdb.dbo.sp_update_job @job_name='_94021 - Redefine TempDB file Size',@enabled = 0 IF @in_Entity = 'AMA' EXEC msdb.dbo.sp_update_job @job_name='_94022 - Redefine TempDB file Size',@enabled = 0 IF @in_Entity = 'AAI' EXEC msdb.dbo.sp_update_job @job_name='_94023 - Redefine TempDB file Size',@enabled = 0 IF @in_Entity = 'RUEG' EXEC msdb.dbo.sp_update_job @job_name='_94023 - Redefine TempDB file Size',@enabled = 0 IF @in_Entity = 'CVI' EXEC msdb.dbo.sp_update_job @job_name='_94024 - Redefine TempDB file Size',@enabled = 0 END /*---------------------- Traitement des erreurs ----------------------*/ END TRY BEGIN CATCH /* Traitement des erreurs (avec RaiseError) */ EXEC dbo.get_Error_Info; END CATCH GO