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;
- 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