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

Azure SQL与本地SQL数据库表存储空间占用差异排查

问题解答:Azure SQL与本地SQL表存储空间差异异常排查

这种存储空间差异不正常,同结构同数据的表在Azure SQL和本地SQL Server之间的占用差距不应达到2.5倍以上,以下是核心排查方向:

1. 索引配置差异

  • 核对本地与Azure表的索引数量、类型、包含列是否完全一致:SSMS导入工具可能默认创建额外索引,或遗漏本地的压缩索引配置。
  • 检查索引填充因子:若Azure上的填充因子远低于本地,会导致索引占用额外空间。查询语句:
    SELECT name, fill_factor 
    FROM sys.indexes 
    WHERE object_id = OBJECT_ID('你的表名')
    

2. 数据压缩未同步

本地表可能开启了行/页压缩,而Azure SQL导入时默认不会继承该配置,这是空间差异的常见原因。检查压缩状态:

SELECT name, data_compression_desc 
FROM sys.partitions 
WHERE object_id = OBJECT_ID('你的表名')

若本地有压缩,可在Azure上执行ALTER TABLE 表名 REBUILD PARTITION = ALL WITH (DATA_COMPRESSION = PAGE);开启压缩,大幅降低占用。

3. 未使用空间积压

导入过程中Azure SQL可能预留了过多未使用空间,可通过你提供的查询中的unused_gb字段对比。若Azure上未使用空间占比过高,执行ALTER TABLE 表名 REBUILD;或ALTER INDEX ALL ON 表名 REBUILD;释放冗余空间。

4. 数据一致性验证

确认Azure表的行数与本地完全一致,避免因重复导入导致数据冗余:

SELECT COUNT(*) FROM 你的表名;

5. LOB数据存储差异

若表中包含大量LOB类型(如VARBINARY(MAX)、NVARCHAR(MAX)),检查本地与Azure的LOB页占用差异(查询中的lob_used_page_count)。Azure SQL的LOB存储层与本地可能存在细微差异,若差异过大,可尝试重新导入LOB数据或重建表。

6. 排序规则的隐性影响

虽然排序规则本身不改变数据长度,但部分字符串索引在不同排序规则下的存储结构可能存在差异(比如某些排序规则会增加索引键的字节开销)。可抽样对比字符串列的实际存储长度:

SELECT TOP 100 DATALENGTH(字符串列名) FROM 你的表名;

对比本地与Azure的结果,若存在明显差异,可考虑修改Azure表的排序规则与本地一致后重新测试。


空间占用查询语句

SELECT TOP 1000
    a3.name AS SchemaName,
    a2.name AS TableName,
    a1.rows as Row_Count,
    (a1.reserved )* 8.0 / 1024 / 1024 AS reserved_gb,
    a1.data * 8.0 / 1024 / 1024 AS data_gb,
    (CASE WHEN (a1.used ) > a1.data THEN (a1.used ) - a1.data ELSE 0 END) * 8.0 / 1024 / 1024 AS index_size_gb,
    (CASE WHEN (a1.reserved ) > a1.used THEN (a1.reserved ) - a1.used ELSE 0 END) * 8.0 / 1024 / 1024 AS unused_gb

FROM    (   SELECT
            ps.object_id,
            SUM ( CASE WHEN (ps.index_id < 2) THEN row_count    ELSE 0 END ) AS [rows],
            SUM (ps.reserved_page_count) AS reserved,
            SUM (CASE   WHEN (ps.index_id < 2) THEN (ps.in_row_data_page_count + ps.lob_used_page_count + ps.row_overflow_used_page_count)
                        ELSE (ps.lob_used_page_count + ps.row_overflow_used_page_count) END
                ) AS data,
            SUM (ps.used_page_count) AS used
            FROM sys.dm_db_partition_stats ps
            GROUP BY ps.object_id
        ) AS a1

INNER JOIN sys.all_objects a2  ON ( a1.object_id = a2.object_id )

INNER JOIN sys.schemas a3 ON (a2.schema_id = a3.schema_id)

WHERE a2.type <> N'S' and a2.type <> N'IT'   
order by a1.data desc    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 19:23:11