Table 按 table 大小分组压缩

Table compression with group by table size

我有一个非常大的数据库,即将用完所有 space。所以我想检查所有大的 tables 是否都被压缩了。我有一些关于列出所有解压缩 table 的脚本,但是如果有人能告诉我如何 运行 查询可以列出所有解压缩 table 按 table 大小排序.

这应该可以满足您的需求。具体看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, >')

诊断

SSMS 中有一些标准报告,您可以使用它们查看所有表使用的所有磁盘 spaced,以及是否有分配给任何表的未使用磁盘 space表。

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

修复

一旦你找到罪魁祸首,有很多未使用的表 space 你可以使用 DBCC CLEANTABLE 命令回收未使用的 space.