web-dev-qa-db-fra.com

Les fichiers de données TEMPDB ne rétrécissent pas bien sur SQL 2008

Donc, idéalement, vous souhaitez pré-dimpliquer vos données TEMPDB et vos fichiers journaux de manière appropriée afin que cela ne soit pas une préoccupation, mais parfois un développeur de voyous dirige une énorme requête folle sur un serveur de production pendant les heures de travail, ce qui entraîne une explosion des fichiers de données TEMPDB. énorme.

Si Tempdb était littéralement la seule chose sur le lecteur, je pouvais probablement simplement le laisser comme ça, mais sur certains serveurs, j'ai plusieurs instances SQL que tous partagent le même lecteur tempdb.

Alors, comment puis-je réduire ces fichiers de données tempdb sans redémarrer l'instance?

J'essaie normalement:

DBCC SHRINKFILE (name = 'tempdev', size = 5000)

Cela a fonctionné assez systématiquement dans SQL 2000 et 2005 (en supposant que l'activité TEMPDB est effilée), mais semble non Travail très souvent en 2008 (sur mon serveur actuel, il n'a fonctionné que sur 1 de 4 données fichiers, les autres continuent de rester 2-3x plus grand).

5
BradC

Vous avez deux questions différentes ici:

Q: Parfois, un développeur de voyous dirige une énorme requête folle sur un serveur de production pendant les heures de travail, ce qui entraîne une explosion des fichiers de données TEMPDB.

R: Lorsque cela se produit, tous les fichiers de données TEMPDB augmenteront de manière approximativement égale, de sorte que vous n'aurez pas à vous soucier de la rétrécissement des êtres spécifiques. Franchement, vous ne voulez pas les réduire - si vous avez un espace de conduite mis de côté pour Tempdb, laissez simplement ces fichiers en place. Pourquoi continuer à re-combattre la même bataille? Vous aurez un développeur de voyous exécutant une autre requête dans quelques semaines. Juste laisser cela en place. Vous n'êtes pas bon marché en fonction de l'espace disque vide.

Maintenant, après avoir dit que si vous avez des données et des fichiers journaux de TEMPDB sur le même volume que vos bases de données utilisateur (ou le Heaven interdisent, le lecteur de démarrage), alors c'est la cause racine réelle et vous devez résoudre ce problème. Même si vous ne les mettez pas sur des broches séparées, TEMPDB devrait être sur un volume logique séparé pour atténuer ce problème exact. Lorsqu'il se remplit, il se remplit - mais cela ne prend pas de bases de données utilisateur (ou du serveur entier, en cas de lecteur complet) hors ligne.

Q: (DBCC Shrinkfile) semble ne pas fonctionner très souvent en 2008

Il s'agit davantage de la manière dont SQL Server s'appuie de plus en plus sur TEMPDB dans chaque version. Lorsque quelque chose est actif dans TEMPDB, vous ne pouvez pas déplacer ses données autour et chaque nouvelle version de SQL Server fonctionne davantage dans TEMPDB. Par exemple, lorsque vous activez l'isolement de l'instantané instantané de lecture, la version de la version utilise des vies dans TEMPDB. Lorsque vous utilisez des groupes de disponibilité TOMAINON, il suit également les statistiques de la base de données utilisateur dans TEMPDB. Il s'agit simplement d'une autre raison pour laquelle vous mettez de côté un volume logique pour TEMPDB, de la taille des fichiers de données à remplir, puis de partir - votre travail ici est fait et n'essayez pas de réduire ces fichiers.

5
Brent Ozar