J'espérais obtenir une vue granulaire des fichiers de base de données qui contenaient quelles unités d'allocation pour les différents HoBT (alignés et non alignés) vivant dans une base de données.
La requête que j'ai toujours utilisée (voir ci-dessous) m'a bien servi jusqu'à ce que nous commencions à créer plusieurs fichiers de données par groupe de fichiers et je ne suis capable de comprendre que comment être aussi granulaire que le niveau du groupe de fichiers.
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;
Cependant, cette requête ne fonctionnera pas lorsqu'il y a plusieurs fichiers dans un groupe de fichiers car je ne peux obtenir que la relation entre une unité d'allocation et un espace de données et, finalement, un groupe de fichiers. Je voudrais savoir s'il y a un autre DMV ou catalogue qui me manque que je peux utiliser pour identifier plus en détail le fichier dans le groupe de fichiers qui contient une unité d'allocation.
La question derrière cette question est que j'essaie d'évaluer les effets réels de la compression des structures partitionnées. Je sais que je peux faire une utilisation avant et après FILEPROPERTY(FileName,'SpaceUsed')
pour le fichier et un avant et après sys.allocation_units.used_pages/128.
pour obtenir ces informations, mais l'exercice lui-même m'a fait me demander si je pouvais identifier le fichier spécifique qui contient une unité d'allocation spécifique.
J'ai joué avec %%physloc%%
dans l'espoir que cela pourrait aider, mais cela ne m'a pas tout à fait ce que je cherche. Les liens ci-dessous ont été fournis par Aaron Bertrand :