web-dev-qa-db-fra.com

Existe-t-il un moyen de déterminer le fichier exact contenant une unité d'allocation dans un groupe de fichiers multiples?

J'espérais avoir une vue granulaire sur laquelle les fichiers de base de données contenaient les unités d'allocation pour les divers hobts ​​(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 ayons commencé à créer plusieurs fichiers de données par groupe de fichiers et que je ne peux comprendre que pour obtenir de manière granulaire que le niveau de 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 qu'environner une unité d'attribution à un espace de données et, finalement, un groupe de fichiers. J'aimerais savoir s'il y a un autre DMV ou un autre catalogue que je manque, je peux utiliser pour identifier davantage quel fichier dans le groupe de fichiers contient une unité d'allocation.

La question de cette question est que j'essaie d'évaluer les effets réels des structures partitionnées de compression. Je sais que je peux faire un avant-et après avoir utilisé FILEPROPERTY(FileName,'SpaceUsed') pour le fichier et un jour avant-après sys.allocation_units.used_pages/128. Pour obtenir cette information, mais l'exercice lui-même m'a fait me demander si je pourrait identifier le fichier spécifique contenant une unité d'allocation spécifique.

J'ai joué avec %%physloc%% Dans les espoirs, cela pourrait aider, mais cela ne me fait pas tout à fait de me chercher ce que je cherche. Les liens ci-dessous ont été fournis par Aaron Bertrand :

13
swasheck

Remus Rusanu, le 21 mai 2013, a fourni une réponse à cette question:

n groupe de fichiers, plusieurs datafiles, comment obtenir la liste des tables dans chaque fichier

Sa réponse était:

Un objet dans un groupe de fichiers utilisera tous les datafiles du groupe de fichiers. Toute table en FG1 réside également sur Datafile1, Datafile2 et Datafile3. Si vous devez contrôler le placement, vous devez créer des groupes de fichiers distincts.

1
RLF