对非常大的表进行压缩

Compression for very large tables

我的生产系统中有三个非常大的 table,我需要对这些 table 进行压缩。我尝试按每个分区执行此操作以节省时间,因为每次我 运行 压缩查询都会导致 table 脱机。但是压缩单个分区仍然需要大约一天的时间。有谁知道一种方法可以帮助我压缩 tables 而不会花费很长时间的系统中断时间。

ALTER TABLE <table_name> 
REBUILD PARTITION = ALL 
WITH (DATA_COMPRESSION = PAGE ON PARTITIONS(<range>),
... 

)

可以压缩一个table并保持在线,只需使用ONLINE=ON。

请注意,如果您的 table 是一个堆,这将通过单线程完成,并且需要很长时间。

ALTER TABLE test_tbl REBUILD WITH (DATA_COMPRESSION=PAGE,ONLINE=ON)

其他选项可能是复制 table、压缩,然后删除旧的并重命名新的。如果 table 一直在使用,则您必须在切换之前进行进一步的同步。根据您的设置,此方法可能可行也可能不可行。