Blog > Mars 2016
Evaluer la volumétrie d'une base de données


Voici une petite requête pour évaluer quelles tables prennent le plus de place dans une base de données. Très pratique lorsque l'on cherche à réduire la volumétrie.
SELECT  [Nom de la table] = OBJECT_NAME(p.object_id) 
       ,[Nombre de lignes] = SUM(CASE WHEN (p.[index_id] < 2) AND (a.[type] = 1) THEN p.[rows] ELSE 0 END)
       ,[Volume alloué (kb)] = (SUM(a.total_pages) * 8192 / 1024)
       ,[Volume utilisé par les données (kb)] = (SUM(CASE WHEN a.[type] <> 1 THEN a.[used_pages] WHEN p.[index_id] < 2 THEN a.[data_pages] ELSE 0 END) * 8192 / 1024)
       ,[Volume utilisé par les indexs (kb)] = ((SUM(a.[used_pages]) - SUM(CASE WHEN a.[type] <> 1 THEN a.[used_pages] WHEN p.[index_id] < 2 THEN a.[data_pages] ELSE 0 END)) * 8192 / 1024) 
    FROM sys.partitions p
	INNER JOIN sys.allocation_units a ON p.[partition_id] = a.[container_id]
	INNER JOIN sys.sysobjects s ON p.[object_id] = s.[id]
    WHERE s.[type] = 'U'    -- On ne conserve que les tables Utilisateur (exclusion des tables système)
    GROUP BY p.[object_id]
    ORDER BY [Volume alloué (kb)] DESC, object_name(p.[object_id])