页面级压缩 - 所有表

Page Level Compression - All Tables

有谁知道通过“计算”按钮查看压缩级别而不必逐个 table 逐一查看压缩级别的方法吗?

您可以为每个 table 调用 sp_estimate_data_compression_savings,指定所需的压缩级别。下面是一个使用游标执行任务的示例脚本,将每个 table 的结果插入到 table 变量中,并通过 select 插入所有 table 的最终结果查询。

USE YourDatabase;
SET NOCOUNT ON;
DECLARE @estimated_compression TABLE(
    object_name sysname,
    schema_name sysname,
    index_id int,
    partition_number int,
    size_with_current_compression_setting_kb bigint,
    size_with_requested_compression_setting_kb bigint,
    sample_size_with_current_compression_setting_kb bigint,
    sample_size_with_requested_compression_setting_kb bigint
);

DECLARE @schema_name sysname, @object_name sysname;
DECLARE tables CURSOR LOCAL FAST_FORWARD READ_ONLY FOR 
    SELECT s.name AS schema_name, t.name AS table_name
    FROM sys.schemas AS s
    JOIN sys.tables AS t ON t.schema_id = s.schema_id;
OPEN tables;
WHILE 1 = 1
BEGIN
    FETCH NEXT FROM tables INTO @schema_name, @object_name;
    IF @@FETCH_STATUS = -1 BREAK;
    INSERT INTO @estimated_compression
        EXEC sp_estimate_data_compression_savings   
             @schema_name = @schema_name
           , @object_name = @object_name
           , @index_id = NULL
           , @partition_number = NULL
           , @data_compression = 'PAGE';
END
CLOSE tables;
DEALLOCATE tables;
SELECT *
FROM @estimated_compression
ORDER BY object_name, schema_name, index_id, partition_number;
GO