按照区统计
dbcc showfilestats
这个命令能直接从GAM和SGAM这样的系统分配页面上读取区分配信息,直接算出数据库文件里有多少区已被分配。在服务器负载很高的情况下也能安全执行,不会增加额外系统负责。
按照页面统计
sp_spaceused
根据sys.allocation_units和sys.partitions这两个管理视图来计算存储空间。可以指定updateusage这个参数,要求SQL Server更新管理视图里的统计信息,这是一件消耗资源的工作。
通过查询sys.dm_db_partitions_stats查询数据库所有对象
select
o.name,
sum(p.reserved_page_count) as
reserved_page_count,
sum(p.used_page_count) as
used_page_count,
sum(
case
when
(p.index_id < 2) then (p.in_row_data_page_count + p.lob_used_page_count +
p.row_overflow_used_page_count)
end
)as
dataPages,
sum(
case
when
(p.index_id < 2 ) then row_count
else
0
end
)as rowCounts
from
sys.dm_db_partition_stats p inner join sys.objects o On p.object_id =
o.object_id
group by o.name
DBCC ShowContig和sys.dm_db_index_physical_stats
是检查数据空间分配情况最精确的该当,它可以告诉你某张表(或索引)用了多少页面,多少区,甚至页面上平均数据量,这种方式在数据库处于工作高峰时应避免使用。
命令 | 精确单位 | 性能影响 | 准确性 |
DBCC ShowFileStats | 区 | 无 | 基本准确 |
sp_spaceused | 页 | 无 | 有时不准确 |
sp_spaceused + updateusage | 页 | 稍有 | 基本准确 |
sys.dm_db_partition_stats | 页 | 无 | 有时不准确 |
dbcc showcontig | 页/区 | 有 | 准确 |