sp_spaceused仅显示逻辑大小,判断Express版10GB限制需查sys.master_files中type=0的数据文件size总和;单库总大小需USE目标库后执行,所有库物理文件大小用sys.master_files查询,大表定位用sp_MSforeachtable。

sp_spaceused 能快速查当前数据库总大小,但只反映逻辑使用量;真要掌握物理占用、跨库对比或判断是否逼近 Express 版本的 10 GB 限制,得直接查 sys.master_files。
查单个数据库总大小(含数据+日志)
执行前必须先 USE 到目标库,否则 sp_spaceused 返回的是 master 的信息:
USE [YourDatabaseName]; GO EXEC sp_spaceused;
返回字段中 database_size 是数据文件 + 日志文件的合计大小(单位 KB),unallocated space 是未分配空间。注意:这个值是逻辑大小,不等于磁盘上实际占用的字节数。
- 如果只关心“用了多少”,看
database_size减去unallocated space - 如果数据库启用了自动增长,
database_size可能远大于实际写入的数据量 - 在 Express 版本中,一旦
database_size接近 10240 MB(即 10 GB),后续插入可能失败
查所有数据库物理文件大小(推荐用于容量规划)
sys.master_files 是实例级视图,不依赖当前上下文,能准确反映每个数据库 .mdf 和 .ldf 文件在磁盘上的分配大小:
SELECT DB_NAME(database_id) AS DatabaseName, type_desc AS FileType, name AS LogicalName, physical_name AS FilePath, CAST(size * 8.0 / 1024 AS DECIMAL(10,2)) AS SizeMB, CAST(FILEPROPERTY(name, 'SpaceUsed') * 8.0 / 1024 AS DECIMAL(10,2)) AS UsedMB FROM sys.master_files WHERE type IN (0, 1) -- 0=data, 1=log ORDER BY database_id, type;
关键点:
-
size单位是 8 KB 页,乘 8 再除 1024 才是 MB -
FILEPROPERTY(name, 'SpaceUsed')返回已用页数,比sp_spaceused更贴近底层存储状态 - 同一数据库可能有多个数据文件(如主文件 + 次要文件组),这里会逐行列出
- Express 版本的 10 GB 限制仅针对单个数据库的 数据文件总和(
type = 0),日志文件不计入
查指定数据库各表占用空间(定位大表)
当发现数据库快满,但 sp_spaceused 显示“未用空间”还很多,大概率是某几张表撑大了保留空间。用 sp_MSforeachtable 批量调用 sp_spaceused:
DECLARE @T TABLE ( [name] VARCHAR(255), [rows] INT, reserved VARCHAR(20), data_size VARCHAR(20), index_size VARCHAR(20), unused VARCHAR(20) ); INSERT INTO @T EXEC sp_MSforeachtable 'EXEC sp_spaceused ''?'''; SELECT [name], [rows], CAST(REPLACE(reserved, ' KB', '') AS INT) / 1024.0 AS reserved_MB, CAST(REPLACE(data_size, ' KB', '') AS INT) / 1024.0 AS data_MB FROM @T ORDER BY reserved_MB DESC;
注意:
-
sp_MSforeachtable是非官方系统存储过程,SQL Server 2008 R2 中可用,但不保证未来版本兼容 - 结果里
reserved_MB包含数据 + 索引 + 行溢出 + LOB 存储,是真正影响数据库文件增长的指标 - 如果某张表
reserved_MB很大但rows很小,可能是有大量 LOB 数据(如text,image,varchar(max))或索引碎片严重
真正卡住 Express 版本的不是“用了多少数据”,而是“分配了多少空间”。查 sys.master_files 中 type = 0 的 size 总和,才是判断是否撞到 10 GB 红线的唯一可靠方式。

















