You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server:求数据库各表对象级页与行压缩检测脚本

检测SQL Server各数据库表的行/页压缩情况脚本

ms_foreachdb 属于未公开的系统存储过程,对带特殊字符(比如空格、连字符)的数据库支持差,遍历逻辑也存在局限性,这是它失效的常见原因。下面是更可靠的替代方案:

遍历所有用户数据库的通用脚本

该脚本自动排除系统数据库,查询每个用户库中所有用户表的压缩配置:

DECLARE @SQL NVARCHAR(MAX) = N'';

SELECT @SQL += N'
USE [' + name + N'];
SELECT 
    DB_NAME() AS database_name,
    SCHEMA_NAME(t.schema_id) AS schema_name,
    t.name AS table_name,
    p.data_compression_desc AS compression_type,
    p.data_compression AS compression_code
FROM 
    sys.tables t
JOIN 
    sys.partitions p ON t.object_id = p.object_id
WHERE 
    p.index_id IN (0, 1) -- 仅取堆表或聚集索引的分区(代表表本身的压缩配置)
    AND t.is_ms_shipped = 0; -- 排除系统表
'
FROM sys.databases
WHERE database_id > 4 -- 排除master、model、msdb、tempdb
    AND state_desc = N'ONLINE'; -- 仅查询在线数据库

EXEC sp_executesql @SQL;

单个数据库的检测脚本

若只需检查特定数据库,替换 <YourDatabaseName> 后执行:

USE [<YourDatabaseName>];
SELECT 
    SCHEMA_NAME(t.schema_id) AS schema_name,
    t.name AS table_name,
    p.data_compression_desc AS compression_type,
    p.data_compression AS compression_code
FROM 
    sys.tables t
JOIN 
    sys.partitions p ON t.object_id = p.object_id
WHERE 
    p.index_id IN (0, 1)
    AND t.is_ms_shipped = 0;

字段说明

  • compression_type:直接显示压缩类型,取值为 NONE(无压缩)、ROW(行压缩)、PAGE(页压缩)
  • compression_code:数值编码,0=无压缩,1=行压缩,2=页压缩

注意事项

  • 执行脚本需要具备VIEW DEFINITION权限,或者对目标数据库有SELECT权限
  • 如果表存在多个分区,脚本会返回每个分区的压缩配置(若分区压缩配置不同)

内容的提问来源于stack exchange,提问作者Pavan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 08:00:27