229 lines
7.6 KiB
Transact-SQL
229 lines
7.6 KiB
Transact-SQL
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
|
|
|
|
|
|
|