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) que viviam em um banco de dados.
A consulta que sempre usei (veja abaixo) me serviu bem até começarmos a criar vários arquivos de dados por grupo de arquivos e só consigo descobrir como obter o nível granular 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ó consigo relacionar uma unidade de alocação a um espaço de dados e, por fim, a um grupo de arquivos. Gostaria de saber se há outro DMV ou catálogo que estou perdendo e que posso usar para identificar melhor qual arquivo no grupo de arquivos contém uma unidade de alocação.
A questão por trás dessa questão é que estou tentando avaliar os efeitos reais da compactação de estruturas particionadas. Eu sei que posso fazer um antes e depois usando FILEPROPERTY(FileName,'SpaceUsed')
para o arquivo e um antes e depois sys.allocation_units.used_pages/128.
para obter essas informações, mas o próprio exercício me fez pensar se eu poderia identificar o arquivo específico que contém uma unidade de alocação específica.
Eu tenho brincado %%physloc%%
na esperança de que isso possa ajudar, mas não me dá o que estou procurando. Os links abaixo foram fornecidos por Aaron Bertrand :