J'ai hérité d'une base de données SQL Server assez volumineuse. Il semble prendre plus de place que je ne le pense, compte tenu des données qu'il contient.
Existe-t-il un moyen simple de déterminer combien d'espace sur le disque chaque table consomme?
sql-server
tsql
Eric
la source
la source
Réponses:
la source
Si vous utilisez SQL Server Management Studio (SSMS), au lieu d'exécuter une requête ( qui dans mon cas a renvoyé des lignes en double ), vous pouvez exécuter un rapport standard .
Remarque: Le niveau de compatibilité de la base de données doit être défini sur 90 ou plus pour que cela fonctionne correctement. Voir http://msdn.microsoft.com/en-gb/library/bb510680.aspx
la source
sp_spaceused peut vous obtenir des informations sur l'espace disque utilisé par une table, une vue indexée ou la base de données entière.
Par exemple:
Cela rapporte les informations d'utilisation du disque pour la table ContactInfo.
Pour l'utiliser simultanément pour toutes les tables:
Vous pouvez également obtenir l'utilisation du disque à partir du clic droit sur la fonctionnalité Rapports standard de SQL Server. Pour accéder à ce rapport, accédez à l'objet serveur dans l'Explorateur d'objets, descendez jusqu'à l'objet Bases de données, puis cliquez avec le bouton droit sur une base de données. Dans le menu qui apparaît, sélectionnez Rapports, puis Rapports standard, puis "Utilisation du disque par partition: [DatabaseName]".
la source
sp_msforeachtable
SSMS puisse facilement déclencher unSystem.OutOfMemoryException
si vous avez un grand nombre de tables, il peut donc être préférable d'utiliser une table temporaire pour stocker les résultats.Voici une autre méthode: à l'aide de SQL Server Management Studio , dans l' Explorateur d'objets , accédez à votre base de données et sélectionnez Tables
Ouvrez ensuite les détails de l'explorateur d'objets (en appuyant sur F7 ou en allant dans Affichage-> Détails de l'explorateur d'objets ). Dans la page de détails de l'explorateur d'objets, cliquez avec le bouton droit sur l'en-tête de colonne et activez les colonnes que vous souhaitez voir dans la page. Vous pouvez également trier les données par n'importe quelle colonne.
la source
Après quelques recherches, je n'ai pas pu trouver un moyen facile d'obtenir des informations sur tous les tableaux. Il existe une procédure stockée pratique nommée sp_spaceused qui retournera tout l'espace utilisé par la base de données. S'il est fourni avec un nom de table, il renvoie l'espace utilisé par cette table. Toutefois, les résultats renvoyés par la procédure stockée ne sont pas triables, car les colonnes sont des valeurs de caractères.
Le script suivant générera les informations que je recherche.
la source
Pour tous les tableaux, utilisez .. (ajout des commentaires de Paul)
la source
exec sp_helpdb
ce qui ne montre rien sur les tables,exec sp_spaceused
ce qui le fait - mais seulement pour une table à la fois ... cela ne vous donne pas un aperçu de quelles tables vous avez et combien de lignes elles ont et comment beaucoup d'espace qu'ils occupent.Les requêtes ci-dessus sont utiles pour trouver la quantité d'espace utilisée par la table (index inclus), mais si vous souhaitez comparer la quantité d'espace utilisée par les index sur la table, utilisez cette requête:
la source
where [i].[is_primary_key] = 0
. Maintenant, les tailles doivent correspondre.sp_spaceused
. Je mesure les Go, donc quelques mégas qui ne correspondent pas, ce n'est pas beaucoup. Je me fiche des tailles exactes, juste une idée.Si vous devez calculer exactement les mêmes nombres, qui se trouvent sur la page 'propriétés de la table - stockage' dans SSMS, vous devez les compter avec la même méthode que celle utilisée dans SSMS (fonctionne pour SQL Server 2005 et supérieur ... et aussi fonctionne correctement pour les tables avec des champs LOB - car le simple fait de compter "used_pages" n'est pas suffisant pour afficher une taille d'index précise):
la source
Extension à la réponse @xav qui traitait les partitions de table pour obtenir la taille en Mo et Go. Testé sur SQL Server 2008/2012 (commenté une ligne où
is_memory_optimized = 1
)la source
Pour Azure, j'ai utilisé ceci:
Vous devriez avoir SSMS v17.x
J'ai utilisé;
Avec cela, comme l' a mentionné l' utilisateur Sparrow :
Ouvrez votre
Databases
> et sélectionnez Tableaux ,puis appuyez sur la touche F7 Vous devriez voir le
row count
comme:
SSMS ici est connecté aux bases de données Azure
la source
Nous utilisons le partitionnement de table et avons eu quelques problèmes avec les requêtes fournies ci-dessus en raison d'enregistrements en double.
Pour ceux qui en ont besoin, vous trouverez ci-dessous la requête exécutée par SQL Server 2014 lors de la génération du rapport «Utilisation du disque par table». Je suppose que cela fonctionne également avec les versions précédentes de SQL Server.
Il fonctionne comme un charme.
la source
la source
Un petit changement sur la réponse de Mar_c , puisque je reviens si souvent sur cette page, ordonnée par la plupart des lignes en premier:
la source
Cela vous donnera les tailles et les nombres d'enregistrements pour chaque table.
la source
{ }
) dans la barre d'outils de l'éditeur pour bien le mettre en forme et la syntaxe, mettez-le en surbrillance!Pour obtenir toutes les tailles de table dans une base de données, vous pouvez utiliser cette requête:
Et vous pouvez le changer pour insérer tout le résultat dans la table temporaire et ensuite sélectionner dans la table temporaire.
la source
À partir d'une invite de commande utilisant OSQL :
la source
Voici un moyen d'obtenir rapidement toutes les tailles de tableaux avec les étapes suivantes:
Écrivez les commandes T-SQL données pour répertorier toutes les tables de base de données:
Copiez maintenant la liste des tables de base de données et copiez-la dans une nouvelle fenêtre d'analyseur de requêtes
Dans l' analyseur de requêtes SQL , sélectionnez dans la barre d'outils supérieure l'option Résultats vers le fichier ( Ctrl+ Shift+ F).
Maintenant, appuyez enfin sur le bouton Exécuter rouge marqué dans la barre d'outils ci-dessus .
La taille de la base de données de toutes les tables est désormais stockée dans un fichier sur votre ordinateur.
la source
J'ai ajouté quelques colonnes supplémentaires au-dessus de la réponse de marc_s:
la source
Ma publication n'est pertinente que pour SQL Server 2000 et a été testée pour fonctionner dans mon environnement.
Ce code accède à toutes les bases de données possibles d'une seule instance , pas seulement à une seule base de données.
J'utilise deux tables temporaires pour aider à collecter les données appropriées, puis vider les résultats dans une table «en direct».
Les données renvoyées sont: DatabaseName, DatabaseTableName, Rows (dans le tableau), data (la taille du tableau en Ko semble-t-il), les données d'entrée (je trouve cela utile pour savoir quand j'ai exécuté le script pour la dernière fois).
La chute de ce code est que le champ «données» n'est pas stocké en tant qu'int (les caractères «KB» sont conservés dans ce champ), et cela serait utile (mais pas totalement nécessaire) pour le tri.
Espérons que ce code aide quelqu'un là-bas et lui fait gagner du temps!
Si vous avez besoin de savoir, la table rsp_DatabaseTableSizes a été créée via:
la source
En tant que simple extension de la réponse de marc_s (celle qui a été acceptée), elle est ajustée pour renvoyer le nombre de colonnes et permettre le filtrage:
la source
Riffant sur la réponse @Mark ci-dessus, a ajouté le @ updateusage = 'true' pour forcer les dernières statistiques de taille ( https://msdn.microsoft.com/en-us/library/ms188776.aspx ):
la source
Voici un exemple de requête pour obtenir des tableaux supérieurs à 1 Go classés par taille décroissante.
la source