2015-09-14 2 views
0

n'importe quel script dans le serveur SQL pour trouver l'espace utilisé par les tables temporaires + le nom de la base de données où cette table temporaire a été créée dans tempdb?Désallouer l'espace inutilisé dans le serveur tempdb sql

La taille de mon tempDb a augmenté jusqu'à 100 Go et je ne suis pas en mesure de récupérer l'espace et je ne sais pas ce qui occupe autant d'espace.

Merci pour toute aide.

Répondre

3

tables temporaires toujours est créé dans tempdb. Cependant, il n'est pas nécessaire que la taille de TempDb soit uniquement due aux tables temporaires. Tempdb est utilisé de différentes façons

  1. objets internes (Trier & bobine, CTE, Reconstruire l'index, jointure de hachage etc.)
  2. objets utilisateur (table temporaire, les variables de table)
  3. magasin version (APRÈS/INSTEAD OF déclenche, MARS)

alors, comme il est clair qu'il est d'être utilisé dans diverses opérations SQL pour que leur taille peut se développer en raison d'autres raisons aussi

Vous pouvez vérifier wh à est à l'origine TEMPDB croître sa taille avec ci-dessous requête

SELECT 
SUM (user_object_reserved_page_count)*8 as usr_obj_kb, 
SUM (internal_object_reserved_page_count)*8 as internal_obj_kb, 
SUM (version_store_reserved_page_count)*8 as version_store_kb, 
SUM (unallocated_extent_page_count)*8 as freespace_kb, 
SUM (mixed_extent_page_count)*8 as mixedextent_kb 
FROM sys.dm_db_file_space_usage 

si ci-dessus montre la requête,

  • Un plus grand nombre d'objets utilisateur, cela signifie qu'il ya plus d'utilisation des tables temporaires, curseurs ou variables temporaires
  • Un nombre plus élevé d'objets internes indique que le plan de requête utilise beaucoup de base de données. Ex: tri, groupe par etc.
  • Augmentation du nombre de magasins de version montre longue transaction en cours d'exécution ou le débit élevé de transactions

basé sur ce que vous pouvez configurer la taille du fichier tempdb. J'ai récemment écrit un article sur les meilleures pratiques de configuration de TempDB. Vous pouvez lire cela here

+0

Merci pour l'info détaillée Anuj, c'était vraiment instructif. La temp db dans mon cas grandissait en cours d'exécution d'un script qui avait une instruction join avec une table où il y avait des entrées en double. Il doit avoir augmenté le nombre d'objets internes que vous avez mentionnés. – pso

0

Peut-être que vous pouvez utiliser suivant la commande SQL sur les fichiers db temp séparement

DBCC SHRINKFILE 

S'il vous plaît se référer à https://support.microsoft.com/en-us/kb/307487 pour plus d'informations

+0

Merci Eralper, mais je voudrais connaître les tailles de chaque tables temporaires d'abord et aussi ce qui crée ces tables. – pso

+0

Veuillez consulter le didacticiel suivant http://www.kodyaz.com/articles/sql-server-exec-sp_msforeachdb-sp_msforeachtable-example-tsql-code.aspx Il existe déjà un code généré qui exécute sp_MSForEachTable avec sp_spaceused pour toutes les tables d'un base de données. Mais je ne suis pas sûr que vous pouvez trouver ce qui provoque les tables temporaires – Eralper