sp_spaceused - Comment mesurer la taille en GO dans toutes les tables dans SQL
À la suite de la discussion en Comment mesurer la taille de la table de GO dans une table SQL, je suis à la recherche d'une solution à la mesure de l'espace utilisé par toutes les tables de SQL Server individuellement à l'aide de la procédure stockée sp_spaceused
.
Avez-vous besoin de ce pour TOUTES les bases de données, un ensemble de bases de données, ou tout simplement la base de données actuelle? Ma réponse, comme les autres, fonctionne sur la base de données actuelle, mais je pourrais facilement l'adapter pour faire toutes ou "certaines" bases de données si c'est le vrai besoin.
Nicolas: Avez-vous la réponse dont vous avez besoin à partir de cette question? Si non, avez-vous besoin de travailler à travers toutes les bases de données, ou juste l'actuel?
Nicolas: Avez-vous la réponse dont vous avez besoin à partir de cette question? Si non, avez-vous besoin de travailler à travers toutes les bases de données, ou juste l'actuel?
OriginalL'auteur Nicolas C | 2014-10-03
Vous devez vous connecter pour publier un commentaire.
Suivants de la base de la requête fonctionne. Il obtient le même résultat que
sp_spaceused
, en utilisant le même algorithme, mais beaucoup plus efficacement. S'il vous plaît ne pas utiliser leCURSOR
+sp_spaceused
méthode; il n'y a absolument aucune raison de le faire. Et un problème potentiel avec l'aide desp_spaceused
est qu'il est destiné à être un rapport proc donc la sortie est tout le texte, pas les chiffres réels, et l'analyse qu'en arrière dans les nombres peuvent être sujettes à l'erreur.Il est également préférable de ne pas utiliser
sys.tables
ousp_msforeachtable
qu'ils excluent les vues indexées.Ce qui suit est exactement le même que sp_spaceused en termes de:
Si vous avez besoin de travailler pour toutes les bases de données, il peut être facilement adapté pour cela.
Si vous avez besoin de ces données ventilées par l'index, j'ai adapté la requête suivante en réponse à cette question sur DBA.StackExchange: l'utilisation de l'espace sur sys.allocation_units et sp_spaceused
Je l'ai vérifié sur ma propre base de données et il fonctionne très bien avec le 'sit.[object_id]'. Avez-vous eu la chance de consulter les index de texte intégral?
Merci pour les tests. Non, j'ai vérifié avec les index XML. Mais pour être clair, même si elle travaille avec "object_id", plus qu'elle ne fonctionne pas avec "parent_id" pour FT indices? Si oui, alors
sp_spaceused
ne fonctionne pas non plus.sp_speceused fonctionne ok. La différence est dans [Lignes] colonne. Ce qui vient de manière incorrecte. CREATE TABLE [dbo].[test]( [test] [nvarchar](100) not NULL ) GO CREATE UNIQUE INDEX non-CLUSTER [test] SUR [dbo].[test] ([test] ASC) ALLEZ CRÉER de CATALOGUE de texte intégral [ft] COMME valeur par DÉFAUT; ALLEZ CRÉER des INDEX de texte intégral SUR le test(test) de l'INDEX de CLÉ de test AVEC la liste de mots VIDES = SYSTÈME ; INSERT INTO [dbo].[test] VALUES('test test test1') ALLER
Fixe. S'il vous plaît vérifier à nouveau. J'ai testé avec d'index de Texte Intégral, index XML, de la vue indexée, etc. Merci encore pour souligner ce point :). Désolé, je n'ai pas compris ce que tu disais au début.
OriginalL'auteur Solomon Rutzky
Je sais que ce n'est pas exactement ce que vous demandez comme il N'utilise PAS sp_spaceused mais ce sera fournir les résultats que vous êtes après.
Laissez-moi savoir si vous avez vraiment besoin d'utiliser sp_spaceused.
sp_spaceused
, c'était pour la suite de la question liée. Votre solution fonctionne bien, sauf que je l'ai eu en double de chaque ligne (ce qui signifie que chaque tableau est ici deux fois). Quand j'enlèveWITH ROLLUP
, les doublons ont disparu.en gardant le "with ROLLUP" ne donne pas vraiment dupes. si vous utilisez les schémas avec vos tables, ce qui vous donnera l'espace de la table par le schéma ainsi que la table de base de données de l'espace. Et aussi obivously donne par table. Mais oui, vous pouvez l'utiliser avec ou sans, en fonction de vos besoins.
OriginalL'auteur Dbloch
Il ya un couple d'options ici:
sp_msforeachtable
Tout sp_msforeachtable peut être utilisé pour cela est a quelques limitations:
Synthèse des résultats
Avec un peu plus de travail, nous pouvons rassembler tous les résultats en un seul ensemble de données, en évitant de ces limitations. Le motif de cette solution est similaire à chaque fois qu'il est nécessaire d'exécuter une procédure stockée un tas de fois avec des paramètres différents et de rassembler les résultats de ces pistes.
Je préfère utiliser des tableaux de variables pour cela, mais un curseur/temp table peut être utilisée aussi bien.
sp_msforeachtable 'exec sp_spaceused [?]'
est un très élégant solution, mais comme vous l'avez dit, douloureux à travaille avec. +1 pour l'explication générale sur l'appel d'une procédure stockée un tas de fois.OriginalL'auteur Jon Egerton
Je suis en supposant que vous essayez d'utiliser sp_spaceused pour trouver la taille de TOUTES les tables dans une base de données?
Si oui, vous pouvez faire ceci:
OriginalL'auteur Arun