107 votes

Comment savoir quelles tables occupent le plus d’espace dans une base de données SQL Server 2005?

Comment pouvez-vous dire ce que les Tables prennent le plus d'espace dans une Base de données SQL Server 2005?

Je suis sûr qu'il y est un Système de Procédure Stockée qui affiche cette information.

J'ai une base de données de TEST qui est passé de 1 to à 23tb. Nous sommes actuellement en train de faire beaucoup de client de conversion de test dans la base de données, ce qui implique l'exécution de la même conversion de la Procédure Stockée à plusieurs reprises. Il ne Supprime dont je suis sûr, c'est l'augmentation du Journal des Transactions. Mais cela m'a fait penser à poser cette question.

Merci à l'avance.

238voto

marc_s Points 321990

Essayez ce script - il listera le nombre de lignes et l'espace utilisé par les lignes de données (et l'espace total utilisé) pour toutes les tables de votre base de données:

 SELECT 
 t.NAME AS TableName,
 i.name AS indexName,
 SUM(p.rows) AS RowCounts,
 SUM(a.total_pages) AS TotalPages, 
 SUM(a.used_pages) AS UsedPages, 
 SUM(a.data_pages) AS DataPages,
 (SUM(a.total_pages) * 8) / 1024 AS TotalSpaceMB, 
 (SUM(a.used_pages) * 8) / 1024 AS UsedSpaceMB, 
 (SUM(a.data_pages) * 8) / 1024 AS DataSpaceMB
FROM 
 sys.tables t
INNER JOIN  
 sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN 
 sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
INNER JOIN 
 sys.allocation_units a ON p.partition_id = a.container_id
WHERE 
 t.NAME NOT LIKE 'dt%' AND
 i.OBJECT_ID > 255 AND  
 i.index_id <= 1
GROUP BY 
 t.NAME, i.object_id, i.index_id, i.name 
ORDER BY 
 OBJECT_NAME(i.object_id) 
 

37voto

Barry Points 18913

Utilisez sp_spacedUsed

Exec sp_spaceused N'YourTableName'

Ou si vous souhaitez exécuter le sp_spaceused pour chaque table de votre base de données, vous pouvez utiliser ce code SQL:

 set nocount on
create table #spaceused (
  name nvarchar(120),
  rows char(11),
  reserved varchar(18),
  data varchar(18),
  index_size varchar(18),
  unused varchar(18)
)

declare Tables cursor for
  select name
  from sysobjects where type='U'
  order by name asc

OPEN Tables
DECLARE @table varchar(128)

FETCH NEXT FROM Tables INTO @table

WHILE @@FETCH_STATUS = 0
BEGIN
  insert into #spaceused exec sp_spaceused @table
  FETCH NEXT FROM Tables INTO @table
END

CLOSE Tables
DEALLOCATE Tables 

select * from #spaceused
drop table #spaceused

exec sp_spaceused
 

Le SQL ci-dessus est d' ici

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X