Eu esperava obter uma visão granular de quais arquivos de banco de dados continham quais unidades de alocação para os vários HoBTs (alinhados e não alinhados) vivendo em um banco de dados.
A consulta que eu sempre usei (veja abaixo) me serviu bem até que começamos a criar vários arquivos de dados por grupo de arquivos e só consigo descobrir como obter uma granularidade como o nível do grupo de arquivos.
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;
No entanto, essa consulta não funcionará quando houver vários arquivos em um grupo de arquivos, pois só posso relacionar uma unidade de alocação a um espaço de dados e, finalmente, a um grupo de arquivos. Gostaria de saber se há outro DMV ou catálogo que esteja faltando que possa ser usado para identificar melhor qual arquivo no grupo de arquivos contém uma unidade de alocação.
A questão por trás dessa pergunta é que estou tentando avaliar os efeitos reais da compactação de estruturas particionadas. Sei que posso usar FILEPROPERTY(FileName,'SpaceUsed')
o antes e o depois do arquivo e o antes e o depois sys.allocation_units.used_pages/128.
para obter essas informações, mas o exercício em si me fez pensar se eu conseguiria identificar o arquivo específico que contém uma unidade de alocação específica.
Eu tenho mexido com %%physloc%%
a esperança de que isso possa ajudar, mas isso não me dá o que estou procurando. Os links abaixo foram fornecidos por Aaron Bertrand :