按表大小分组的表压缩

时间:2015-08-20 15:43:48

标签: sql-server compression

我有一个非常大的数据库,即将使用所有空间。所以我想查看所有大表,如果它们都被压缩了。我已经获得了一些关于列出所有解压缩表的脚本,但是如果有人能告诉我如何运行查询,可以按表大小列出所有未压缩表顺序。

2 个答案:

答案 0 :(得分:0)

这应该可以满足您的需求。具体来说,请查看data_compression_desc。

use <DatabaseName, sysname, >
go
set nocount on
go

select 
    IndexName = i.Name,
    TableName = object_name(p.object_id),
    IndexRows = p.rows,
    DataCompression = data_compression_desc,
    ps.in_row_data_page_count,
    ps.in_row_used_page_count,
    ps.in_row_reserved_page_count,
    ps.lob_used_page_count,
    ps.lob_reserved_page_count,
    ps.row_overflow_used_page_count,
    ps.row_overflow_reserved_page_count,
    ps.used_page_count,
    ps.reserved_page_count,
    ps.row_count
from sys.partitions p
inner join sys.dm_db_partition_stats ps
    on p.partition_id = ps.partition_id
        and p.object_id = ps.object_id
inner join sys.indexes i
    on p.object_id = i.object_id
        and p.index_id = i.index_id
where p.object_id = object_id('<DatabaseName, sysname, >.dbo.<TableName, sysname, >')

答案 1 :(得分:0)

诊断

SSMS中有一些标准报告可用于查看所有表使用的所有磁盘间隔,以及是否有任何未使用的磁盘空间分配给任何表。

如果您右键单击对象资源管理器中的数据库名称并转到“报告”,您可以找到许多内置报告。在你的情况下Disk Usage by Top Tables是你应该看的那个。

enter image description here

修复

找到罪魁祸首后,您可以使用DBCC CLEANTABLE命令来回收未使用的空间。