sp_estimate_data_compression_savings 用于列存储压缩

got*_*tqn 3 sql-server compression columnstore sql-server-2014

有没有办法为列存储和列存储列存储归档压缩节省压缩?

为了检查这些压缩保存,我必须删除所有聚集和非聚集索引,然后创建一个聚集列存储索引 - 大多数时候这是一个耗时的操作,我想知道是否有其他方法可以做到这一点。

wBo*_*Bob 6

没有等效的 proc 所以我最近一直在做的是使用 SELECT...INTO 在 tempdb 中创建表的副本,例如

SELECT TOP 10 PERCENT *
INTO tempdb.dbo.yourTable
FROM dbo.yourTable
Run Code Online (Sandbox Code Playgroud)

然后应用聚集列存储。如果您的表太大而无法放入您的 tempdb(正如我对数据仓库表所期望的那样),请传输一个百分比并从中推断。您还可以在 tempdb 中创建空表,添加列存储然后填充,尽管这可能需要更长的时间 - 压缩对 INSERT 时间有很大影响。SELECT...INTO 技术具有为您删除索引的额外好处,可以最少记录,甚至可以在 SQL 2014 上并行运行。

示例: 我有一个 1TB 的表,我将 100GB ( 10% ) 复制到 tempdb 中的一个表中。我应用聚集列存储索引(正常压缩)并检查表大小。它已压缩到 10GB,或 10 倍压缩。我使用 COLUMNSTORE_ARCHIVE 模式重建聚集列存储,表压缩到 5GB 或 20 倍压缩。我可以推断出我的 1TB 表在存档模式下将压缩到大约100GB 或 50GB。允许一些容忍,因为它是估计值

文档建议压缩高达 7 倍,但我在测试中看到了更大的因素,特别是在 COLUMNSTORE_ARCHIVE 模式下,在回读时显然有一些 CPU 开销。天啊。