6
votes

Comment récupérer une série de résultats de toutes les tables de la DB avec leur utilisation de l'espace disque

Y a-t-il une requête T-SQL, je peux exécuter une base de données qui fournira une liste de toutes tables dans cette base de données ainsi que de leur utilisation actuelle de l'espace disque? Je sais que je peux le regarder dans SSMS avec la boîte de dialogue "Propriétés", et je sais utiliser la SPROP SP_SPACACEUSÉE ​​pour le voir une table à la fois, mais j'aimerais évaluer l'utilisation de l'espace disque de toutes mes tables, commandé par une utilisation de l'espace disque la plus basse au plus bas. Nous devons réduire considérablement notre taille de données de données afin que j'aimerais voir quelles tables sont les pires délinquants.


0 commentaires

3 Réponses :


0
votes

Avez-vous consulté le Rapport de synthèse de l'utilisation du disque ?

"Pour afficher le rapport, développez le dossier de gestion, cliquez avec le bouton droit de la souris sur la collecte de données, pointez sur les rapports, pointez sur l'entrepôt de données de gestion, puis cliquez sur Résumé de l'utilisation du disque"

Le rapport de définition de la collection d'utilisation du disque fournit une vue d'ensemble de l'espace disque utilisé pour toutes les bases de données de l'instance de SQL Server et des tendances de la croissance pour les fichiers de données et de journaux pour chacune de ces bases de données.
- Le tableau récapitulatif affiche la taille de début (en mégaoctets) et la taille actuelle de toutes les bases de données installées sur le serveur surveille que le collecteur de données est surveillé.
- Les informations de croissance et de croissance moyennes sont présentées graphiquement et numériquement pour les fichiers de données et de journaux.


0 commentaires

5
votes

sys.allOcit_units , look au total_pages. Chaque rangée (partition d'un index) comporte 3 unités d'allocation (données, slob and lob), voir Organisation de table et d'index . Rejoindre avec sys.partitions pour obtenir le objet_id et l'index_id. Index_Id 0is Le tas d'une table non ordonnée, l'index ID 1 est l'index en cluster. Chaque table (index) a au moins une partition, si elle n'est pas partitionnée: xxx


1 commentaires

+1 semble beaucoup plus facile et plus agréable que la réponse de Joe Stefanelli!



11
votes
create table #Temp (
    name nvarchar(128),
    [rows] char(11),
    reserved varchar(18),
    data varchar(18),
    index_size varchar(18),
    unused varchar(18)
)

insert into #Temp
    exec sp_msforeachtable 'sp_spaceused ''?'''

select * from #Temp order by cast(replace(reserved,' kb','') as int) desc

3 commentaires

En ce qui concerne la définition de la procréation, il est tiré à partir de la colonne row_count dans sys.dm_db_partition_stats . Je pense que je me souviens de regarder cela avant et qu'il inclut des lignes modifiées par des transactions non engagées.


@Martin: Merci de vérifier.


Le rang_count sur un tas peut également inclure des enregistrements transférés