sys.allocation_units (Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例

数据库中的每个分配单元都在表中占一行。

列名称 数据类型 说明
allocation_unit_id bigint 分配单元的 ID。 在数据库中是唯一的。
type tinyint 分配单元的类型:

0 = 已删除

1 = 行内数据(所有数据类型,但 LOB 数据类型除外)

2 = 大型对象 (LOB) 文本ntext图像xml、大值类型和 CLR 用户定义类型 (数据)

3 = 行溢出数据
type_desc nvarchar(60) 对分配单元类型的说明:

下降

IN_ROW_DATA

LOB_DATA

ROW_OVERFLOW_DATA
container_id bigint 与分配单元关联的存储容器的 ID。

如果在行存储索引中键入 = 1 或 3,container_id = sys.partitions.hobt_id。

如果列存储索引中的类型 = 1 或 3,container_id = sys.column_store_row_groups.delta_store_hobt_id。

如果 type 为 2,则 container_id = sys.partitions.partition_id。

0 = 标记为要延迟删除的分配单元
data_space_id int 此分配单元所在文件组的 ID。
total_pages bigint 此分配单元分配或保留的总页数。
used_pages bigint 实际使用的总页数。
data_pages bigint 包含下列数据的已使用页的数目:

行内数据

LOB 数据

行溢出数据



请注意,返回的值不包括内部索引页和分配管理页。

注意

删除或重新生成大型索引、删除大型表或截断大型表或分区时,数据库引擎会将实际的页解除分配及其关联的锁延迟到事务提交之后。 延迟的删除操作不会立即释放已分配的空间。 因此,删除或截断大型对象之后立即由 sys.allocation_units 返回的值可能不会反映实际可用的磁盘空间。

启用 加速数据库恢复 后,无论对象大小如何,都会使用延迟删除。

权限

要求 公共 角色具有成员身份。 有关详细信息,请参阅 Metadata Visibility Configuration

示例

确定分配单元的对象和类型使用的空间

以下查询按分配单元类型返回数据库中的所有用户表以及每个表中使用的空间量。

SELECT t.object_id AS ObjectID,
       OBJECT_NAME(t.object_id) AS ObjectName,
       SUM(u.total_pages) * 8 AS Total_Reserved_kb,
       SUM(u.used_pages) * 8 AS Used_Space_kb,
       u.type_desc AS TypeDesc,
       MAX(p.rows) AS RowsCount
FROM sys.allocation_units AS u
JOIN sys.partitions AS p ON u.container_id = p.hobt_id
JOIN sys.tables AS t ON p.object_id = t.object_id
GROUP BY t.object_id,
         OBJECT_NAME(t.object_id),
         u.type_desc
ORDER BY Used_Space_kb DESC,
         ObjectName;

另请参阅

sys.partitions (Transact-SQL)
对象目录视图 (Transact-SQL)
目录视图 (Transact-SQL)