| Lesson 3 | Monitoring database size with SQL Server Management Studio |
| Objective | Monitor the size of a database with SQL Server Management Studio |
sp_spaceused stored procedure: This system stored procedure provides detailed information about the space used and reserved by a database or a specific object within it.sp_helpdb stored procedure: Lists information about databases on the server, including their size.sys.master_files and sys.database_files catalog views: These views provide highly accurate and up-to-date information about the size of database files (data and log files) and their usage. You can query these views directly to get granular size details.This gives the overall size of the database, including all data and log files.
sp_spaceused):USE YourDatabaseName; GO EXEC sp_spaceused;
This lets you see how much space is taken by individual tables or indexes.
EXEC sp_MSforeachtable 'EXEC sp_spaceused [?]';
Or use the more detailed query:
SELECT
t.NAME AS TableName,
SUM(p.rows) AS RowCounts,
SUM(a.total_pages) * 8 AS TotalSpaceKB,
SUM(a.used_pages) * 8 AS UsedSpaceKB,
(SUM(a.total_pages) - SUM(a.used_pages)) * 8 AS UnusedSpaceKB
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
GROUP BY
t.NAME
ORDER BY
TotalSpaceKB DESC;
Provides storage metrics for each physical file in the database — typically .mdf, .ndf, and .ldf.
USE YourDatabaseName;
GO
SELECT
name AS LogicalName,
physical_name AS PhysicalFile,
size * 8 / 1024 AS SizeMB,
type_desc AS FileType
FROM sys.master_files
WHERE database_id = DB_ID('YourDatabaseName');
| Level | Use Case |
|---|---|
| Total database size | For quick storage estimates and backups |
| Object-level size | For performance tuning, partitioning, or cleanup of large tables |
| File-level size | For managing storage on disk, understanding filegroup growth, and I/O tuning |
SQL Server 2022 provides reliable and efficient methods for monitoring database size using SQL Server Management Studio (SSMS) and Transact-SQL. Below is a breakdown of best practices and tools available to inspect and manage storage:
From Object Explorer in SSMS:
This graphical report displays:
USE [YourDatabaseName]; GO EXEC sp_spaceused;
SELECT
t.name AS TableName,
SUM(p.rows) AS RowCounts,
SUM(a.total_pages) * 8 AS TotalSpaceKB,
SUM(a.used_pages) * 8 AS UsedSpaceKB,
(SUM(a.total_pages) - SUM(a.used_pages)) * 8 AS UnusedSpaceKB
FROM
sys.tables AS t
JOIN
sys.indexes AS i ON t.object_id = i.object_id
JOIN
sys.partitions AS p ON i.object_id = p.object_id AND i.index_id = p.index_id
JOIN
sys.allocation_units AS a ON p.partition_id = a.container_id
GROUP BY
t.name
ORDER BY
TotalSpaceKB DESC;
For the current database:
SELECT
name AS LogicalName,
physical_name AS PhysicalFile,
size * 8 / 1024 AS SizeMB,
max_size,
type_desc AS FileType
FROM sys.database_files;
For all databases on the server:
SELECT
DB_NAME(database_id) AS DatabaseName,
name AS LogicalName,
physical_name AS PhysicalFile,
size * 8 / 1024 AS SizeMB,
max_size,
type_desc AS FileType
FROM sys.master_files;
.mdf and .ldf files on separate drives.Advanced options for proactive database size management include: