Speravo di avere una visione granulare di quali file di database contenessero quali unità di allocazione per i vari HoBT (sia allineati che non allineati) che vivono in un database.
La query che ho sempre usato (vedi sotto) mi è servita bene fino a quando non abbiamo iniziato a creare più file di dati per filegroup e sono solo in grado di capire come diventare granulare come il livello del filegroup.
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;
Tuttavia, questa query non funzionerà quando ci sono più file in un filegroup in quanto posso solo arrivare a mettere in relazione un'unità di allocazione con uno spazio dati e, in definitiva, un filegroup. Vorrei sapere se manca un altro DMV o catalogo che posso utilizzare per identificare ulteriormente quale file nel filegroup contiene un'unità di allocazione.
La domanda dietro questa domanda è che sto cercando di valutare gli effetti reali della compressione delle strutture partizionate. So che posso fare un uso prima e dopo FILEPROPERTY(FileName,'SpaceUsed')
per il file e un prima e un dopo sys.allocation_units.used_pages/128.
per ottenere queste informazioni, ma l'esercizio stesso mi ha fatto chiedermi se potevo identificare il file specifico che contiene un'unità di allocazione specifica.
Ho avuto problemi con %%physloc%%
le speranze che potesse aiutare, ma non mi dà proprio quello che sto cercando. I collegamenti seguenti sono stati forniti da Aaron Bertrand :