Thursday, 3 July 2025

SQLDBA- Get the table sizes in MB

Below query  will help to fetch the tables sizes in a data base, 

For the below query  you have to  pass the DB name from which DB table size we want know. 


USE <DB Name>   -- Pass here you DB name 

GO


SELECT 

    t.name AS TableName,

    s.name AS SchemaName,

    p.rows,

    --SUM(a.total_pages) * 8 AS TotalSpaceKB, 

    CAST(ROUND(((SUM(a.total_pages) * 8) / 1024.00), 2) AS NUMERIC(36, 2)) AS TotalSpaceMB,

    --SUM(a.used_pages) * 8 AS UsedSpaceKB, 

    CAST(ROUND(((SUM(a.used_pages) * 8) / 1024.00), 2) AS NUMERIC(36, 2)) AS UsedSpaceMB, 

    --(SUM(a.total_pages) - SUM(a.used_pages)) * 8 AS UnusedSpaceKB,

    CAST(ROUND(((SUM(a.total_pages) - SUM(a.used_pages)) * 8) / 1024.00, 2) AS NUMERIC(36, 2)) AS UnusedSpaceMB

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

LEFT OUTER JOIN 

    sys.schemas s ON t.schema_id = s.schema_id

WHERE 

    t.name NOT LIKE 'dt%' 

    AND t.is_ms_shipped = 0

    AND i.object_id > 255 

GROUP BY 

    t.name, s.name, p.rows

ORDER BY 

    TotalSpaceMB DESC, t.name 


-- Get database size (replace 'YourDatabaseName' with the actual database name)EXEC sp_spaceused;-- Get table sizeEXEC sp_spaceused 'YourTableName';-- Assume the output from sp_spaceused is in KB for simplicity-- Calculate the percentage (replace with actual values from the output)DECLARE @databaseSizeKB DECIMAL(18, 2) = 1024000; -- Example: 1000 MB = 1024000 KBDECLARE @tableSizeKB DECIMAL(18, 2) = 102400; -- Example: 100 MB = 102400 KBSELECT (@tableSizeKB / @databaseSizeKB) * 100 AS TableSizePercentage;

Important Notes:
  • The sp_spaceused procedure returns data in kilobytes (KB) by default.
  • You can adjust the calculation based on the actual units returned by sp_spaceused.
  • For more precise calculations, you might need to consider the data and index sizes separately, as they contribute differently to the overall table size. 

No comments:

Post a Comment

SQLDBA- Get the table sizes in MB

Below query  will help to fetch the tables sizes in a data base,  For the below query  you have to  pass the DB name from which DB table siz...