如何使用磁盘空间使用情况检索数据库中所有表的结果集

时间:2011-01-05 16:26:58

标签: sql sql-server tsql

我是否可以针对数据库运行T-SQL查询,该数据库将提供该数据库中所有表的列表以及它们当前的磁盘空间使用情况?我知道我可以使用“属性”对话框在SSMS中查看它,我知道如何使用sp_spaceused sproc一次看一个表但是我想评估所有表的磁盘空间使用情况,以最高磁盘空间使用率排序到最低。我们需要大幅降低数据库大小,因此我希望看到哪些表是最严重的违规者。

3 个答案:

答案 0 :(得分:11)

create table #Temp (
    name nvarchar(128),
    [rows] char(11),
    reserved varchar(18),
    data varchar(18),
    index_size varchar(18),
    unused varchar(18)
)

insert into #Temp
    exec sp_msforeachtable 'sp_spaceused ''?'''

select * from #Temp order by cast(replace(reserved,' kb','') as int) desc

答案 1 :(得分:5)

sys.allocation_units,请看total_pages。每个行集(索引的分区)有3个分配单元(DATA,SLOB和LOB),请参阅Table and Index Organization。加入sys.partitions以获取object_id和index_id。 Index_id 0是无序表的堆,索引id 1是聚簇索引。每个表(索引)至少有一个分区,如果没有分区:

select object_name(p.object_id) as [name],
    object_schema_name(p.object_id) as [schema],
    i.name as [index],
    i.type_desc,
    au.type_desc,
    p.partition_number,
    p.rows,
    au.total_pages * 8 as [space (kb)]
from sys.allocation_units au
join sys.partitions p on au.container_id = p.partition_id
join sys.indexes i on p.object_id = i. object_id
    and i.index_id = p.index_id
order by [space (kb)] desc;

答案 2 :(得分:0)

您是否看过Disk Usage Summary Report

  

“要查看报告,请展开”管理“文件夹,右键单击”数据收集“,指向”报告“,指向”管理数据仓库“,然后单击”磁盘使用情况摘要“

     

“磁盘使用情况收集集”报告概述了SQL Server实例中所有数据库使用的磁盘空间,以及每个数据库的数据和日志文件的增长趋势。
       - 摘要表显示数据收集器正在监视的服务器上安装的起始大小(以兆字节为单位)和所有数据库的当前大小。        - 趋势和平均增长信息以图形和数字形式显示数据和日志文件。