Meilleure pratique pour réduire Tempdb dans un environnement de production

24

Quelle est la meilleure pratique à utiliser lors de la réduction de la base de données temporaire dans SQL Server 2008?

Est-il risqué d'utiliser les éléments suivants?

use tempdb
GO

DBCC FREEPROCCACHE -- clean cache
DBCC DROPCLEANBUFFERS -- clean buffers
DBCC FREESYSTEMCACHE ('ALL') -- clean system cache
DBCC FREESESSIONCACHE -- clean session cache
DBCC SHRINKDATABASE(tempdb, 10); -- shrink tempdb
dbcc shrinkfile ('tempdev') -- shrink db file
dbcc shrinkfile ('templog') -- shrink log file
GO

-- report the new file sizes
SELECT name, size
FROM sys.master_files
WHERE database_id = DB_ID(N'tempdb');
GO
Mcol
la source
La meilleure pratique consiste à déterminer ce qui la fait grandir et à y remédier. Si vous le rétrécissez, il suffit de grandir à nouveau et cela prend du temps et des E
Nick.McDermaid
Oui je sais. Mais quand je dois le faire, il est trop tard pour être proactif :) Est-ce la meilleure solution?
Désolé, je ne peux pas vous aider.
Nick.McDermaid

Réponses:

11

Il est recommandé de surveiller de manière proactive l'utilisation normale de Tempdb et de définir la taille en conséquence. S'il s'agit d'un cas où la Tempdb a atteint une telle taille et son environnement PROD, je redémarrerais les services SQL Server pendant la maintenance hebdomadaire. Là, Tempdb reviendrait à sa taille configurée.

La réduction du fichier est correcte tant que Tempdb n'est pas utilisé, sinon les transactions existantes peuvent être affectées du point de vue des performances en raison de blocages et de blocages.

Le nettoyage des caches de procédures, des caches tampons, etc. aura un impact négatif sur les performances de la base de données elle-même jusqu'à ce qu'ils ne soient pas recréés. Je ne ferais pas ça sur PROD.

J'espère que ça t'as aidé!


la source
Merci pour votre contribution. Est-il suffisant de vérifier avec sp_who les processus dans tempdb?
1
Je ne pense pas que ce soit un moyen fiable de savoir si la base de données temporaire est utilisée. Je pense que cela n'apparaîtrait que si quelqu'un crée directement une table temporaire directement dans SSMS. Mais si la même chose est effectuée à la suite d'une opération de requête en raison d'un déversement de mémoire, etc., elle n'apparaîtra pas dans sp_who2. Cette question serait en fait un fil séparé. Veuillez créer cela car il s'agit d'une discussion distincte. Si la réponse précédente vous a aidé, veuillez l'indiquer comme réponse. Cela aidera d'autres personnes dans une situation similaire.