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. 

Comments

Popular posts from this blog

DBA - Check health and status of Always On or Availability Group using DMVs

DBA - Script out the Linked server objects.

SQLDBA_ Failover -Registry Check Pointing a Windows Cluster to Bring SQL Server Online