我希望能够详细了解哪些数据库文件包含用于数据库中各种HoBT(对齐和不对齐)的分配单元。
在我们开始为每个文件组创建多个数据文件之前,我一直使用的查询(请参见下文)对我很有帮助,而我只能弄清楚如何获得与文件组级别一样的粒度。
select
SchemaName = sh.name,
TableName = t.name,
IndexName = i.name,
PartitionNumber = p.partition_number,
IndexID = i.index_id,
IndexDataspaceID = i.data_space_id,
AllocUnitDataspaceID = au.data_space_id,
PartitionRows = p.rows
from sys.allocation_units au
join sys.partitions p
on au.container_id = p.partition_id
join sys.indexes i
on i.object_id = p.object_id
and i.index_id = p.index_id
join sys.tables t
on p.object_id = t.object_id
join sys.schemas sh
on t.schema_id = sh.schema_id
where sh.name != 'sys'
and au.type = 2
union all
select
sh.name,
t.name,
i.name,
p.partition_number,
i.index_id,
i.data_space_id,
au.data_space_id,
p.rows
from sys.allocation_units au
join sys.partitions p
on au.container_id = p.hobt_id
join sys.indexes i
on i.object_id = p.object_id
and i.index_id = p.index_id
join sys.tables t
on p.object_id = t.object_id
join sys.schemas sh
on t.schema_id = sh.schema_id
where sh.name != 'sys'
and au.type in (1,3)
order by t.name, i.index_id,p.partition_number;
但是,当文件组中有多个文件时,此查询将不起作用,因为我只能将分配单元与数据空间,最终与文件组相关联。我想知道是否还有其他我缺少的DMV或目录,可以用来进一步确定文件组中的哪个文件包含分配单元。
这个问题背后的问题是,我正在尝试评估压缩分区结构的实际效果。我知道我可以FILEPROPERTY(FileName,'SpaceUsed')
对文件进行前后使用,也可以前后sys.allocation_units.used_pages/128.
进行获取信息,但是练习本身使我想知道是否可以标识包含特定分配单元的特定文件。
我一直在四处%%physloc%%
寻找希望它能有所帮助的东西,但并不能完全满足我的需求。以下链接由亚伦·伯特兰(Aaron Bertrand)提供: