web-dev-qa-db-fra.com

Déplacement et création de nouveaux fichiers tempdb en toute sécurité

J'aimerais savoir deux choses:

  • comment déplacer en toute sécurité tempdb avec un temps d'arrêt minimal?
  • de combien de fichiers tempdb avez-vous besoin?

S'agit-il d'un fichier par cœur? Donc, quad-core = 4 fichiers tempdb, en créant trois nouveaux?

22
Stuart Blackler

Pour déplacer des fichiers tempdb, il vous suffit de procéder comme suit:

alter database tempdb
modify file
(
    name = tempdev,
    filename = 'C:\YourNewTempdbDir\tempdb.mdf'
)
go

alter database tempdb
modify file
(
    name = templog,
    filename = 'C:\YourNewTempdbDir\templog.ldf'
)
go

Si vous souhaitez ajouter un nouveau fichier à tempdb, il vous suffit de procéder comme suit (à condition de l'ajouter au groupe de fichiers PRIMARY ou de créer le vôtre):

alter database tempdb
add file
(
    name = tempdb2,
    filename = 'C:\YourNewTempdbDir\Tempdb2.ndf'
)
go

Pour que ces modifications prennent effet, vous devrez redémarrer le service SQL Server. Donc en ce qui concerne la minimisation des temps d'arrêt, vous êtes contraint au temps qu'il faudra pour le redémarrage du service . Vous n'avez pas à vous soucier du déplacement des fichiers de base de données tempdb préexistants, car SQL Server recrée toujours les fichiers et les nouveaux emplacements/fichiers seront créés au démarrage du service.

Quant au "1 fichier de données tempdb par cœur", c'est largement un mythe. L'approche correcte consiste à surveiller les conflits de fichiers tempdb pour les pages PFS (Page Free Space), Global Allocation Map (GAM) et Shared Global Allocation Map (SGAM). Veuillez faire référence cet article pour obtenir une requête(lien alternatif) qui parcourt le sys.dm_os_waiting_tasks DMV pour voir combien tempdb contention de fichier existe. Ensuite, vous devez désactiver cela, au lieu de simplement masquer tempdb avec la même quantité de fichiers qu'il y a de cœurs. C'est l'approche la plus recommandée.

22
Thomas Stringer
  1. Pour déplacer tempdb, exécutez:

    ALTER DATABASE tempdb 
    MODIFY FILE ( name=tempdev, filename='D:\Newpath\tempdb.mdf') 
    GO
    ALTER DATABASE tempdb 
    MODIFY FILE ( name=templog, filename='D:\Newpath\templog.ldf') 
    GO
    

    Redémarrez ensuite votre service SQL Server (MSSQLServer).

  2. Nombre de fichiers dans tempdb - voir l'article de Paul Randall: n mythe SQL Server DBA par jour: (12/30) tempdb doit toujours avoir un fichier de données par cœur de processeur

8
jl01

De conseil de Microsoft :

En règle générale, si le nombre de processeurs logiques est inférieur ou égal à 8, utilisez le même nombre de fichiers de données que les processeurs logiques.

Si le nombre de processeurs logiques est supérieur à 8, utilisez 8 fichiers de données, puis si le conflit persiste, augmentez le nombre de fichiers de données par multiples de 4 (jusqu'au nombre de processeurs logiques) jusqu'à ce que le conflit soit réduit à des niveaux acceptables ou modifications de la charge de travail/du code.

Le déplacement des fichiers TempDB est un processus en 2 étapes:

  1. Dites à SQL vous voulez que vos nouveaux fichiers TempDB aillent (cela n'a pas de temps d'arrêt)
  2. Redémarrez le SQL Server service pour que la modification prenne effet (il s'agit du temps d'arrêt minimum dont vous avez besoin)

Pour indiquer à SQL où créer les nouveaux fichiers TempDB, vous pouvez utiliser:

DECLARE @newDriveAndFolder VARCHAR(8000);

SET @newDriveAndFolder = 'Z:\YourTempDBfolder';

SELECT [name] AS [Logical Name]
    ,physical_name AS [Current Location]
    ,state_desc AS [Status]
    ,size / 128 AS [Size(MB)] --Number of 8KB pages / 128 = MB
    ,'ALTER DATABASE tempdb MODIFY FILE (NAME = ' + QUOTENAME(f.[name])
    + CHAR(9) /* Tab */
    + ',FILENAME = ''' + @newDriveAndFolder + CHAR(92) /* Backslash */ + f.[name]
    + CASE WHEN f.[type] = 1 /* Log */ THEN '.ldf' ELSE '.mdf' END  + ''''
    + ');'
    AS [Create new TempDB files]
FROM sys.master_files f
WHERE f.database_id = DB_ID(N'tempdb')
ORDER BY f.[type];

Cela générera les instructions T-SQL que vous devez exécuter pour déplacer les fichiers vers le nouveau drive:\folder tu veux. (cliquez sur l'image pour agrandir)

Image showing 2 rows with details on TempDB files and T-SQL statements to move them

Lorsque vous avez exécuté vos instructions mobiles, vous pouvez réexécuter la requête ci-dessus pour vérifier que le Current Location la colonne affiche maintenant votre nouveau drive:\folder.

Image showing TempDB files' new locations

Une fois que vous êtes satisfait de vos modifications, redémarrez le service SQL Server .

5
Oreo