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

21

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?

Stuart Blackler
la source

Réponses:

22

Pour déplacer des tempdbfichiers, 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 PRIMARYfichiers 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. En ce qui concerne la minimisation des temps d'arrêt, vous êtes limité par le temps nécessaire au redémarrage du service . Vous n'avez pas à vous soucier de déplacer les tempdbfichiers de base de données 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 tempdbles conflits de fichiers pour les pages Espace libre de page (PFS), Global Allocation Map (GAM) et Shared Global Allocation Map (SGAM). Veuillez consulter cet article pour obtenir une requête (lien alternatif) qui parcourt le sys.dm_os_waiting_tasksDMV pour voir la tempdbcontention de fichiers. Ensuite, vous devez vous en passer, au lieu de simplement couvrir tempdbavec la même quantité de fichiers qu'il y a de cœurs. C'est l'approche la plus recommandée.

Thomas Stringer
la source
8
  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: Un mythe SQL Server DBA par jour: (12/30) tempdb doit toujours avoir un fichier de données par cœur de processeur

jl01
la source
4

D'après les conseils 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 Serverservice pour que la modification prenne effet (c'est le 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 que drive:\foldervous souhaitez. (cliquez sur l'image pour agrandir)

Image montrant 2 lignes avec des détails sur les fichiers TempDB et les instructions T-SQL pour les déplacer

Une fois que vous avez exécuté vos instructions mobiles, vous pouvez réexécuter la requête ci-dessus pour vérifier que la Current Locationcolonne affiche désormais votre nouvelle requête drive:\folder.

Image montrant les nouveaux emplacements des fichiers TempDB

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

Oreo
la source