页面级压缩 - 所有表
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
有谁知道通过“计算”按钮查看压缩级别而不必逐个 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