Esperaba obtener una vista granular de qué archivos de base de datos contenían qué unidades de asignación para los diversos HoBT (tanto alineados como no alineados) que viven en una base de datos.
La consulta que siempre he usado (ver más abajo) me ha servido bien hasta que comenzamos a crear múltiples archivos de datos por grupo de archivos y solo soy capaz de descubrir cómo llegar a ser tan granular como el nivel de grupo de archivos.
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;
Sin embargo, esta consulta no funcionará cuando haya varios archivos en un grupo de archivos, ya que solo puedo llegar a relacionar una unidad de asignación con un espacio de datos y, en última instancia, un grupo de archivos. Me gustaría saber si me falta otro DMV o catálogo que pueda usar para identificar más a fondo qué archivo del grupo de archivos contiene una unidad de asignación.
La pregunta detrás de esta pregunta es que estoy tratando de evaluar los efectos reales de comprimir estructuras particionadas. Sé que puedo hacer un uso de antes y después FILEPROPERTY(FileName,'SpaceUsed')
para el archivo y un antes y después sys.allocation_units.used_pages/128.
para obtener esta información, pero el ejercicio en sí mismo me hizo preguntarme si podría identificar el archivo específico que contiene una unidad de asignación específica.
He estado jugando con %%physloc%%
la esperanza de que pueda ayudar, pero no me da lo que estoy buscando. Los siguientes enlaces fueron proporcionados por Aaron Bertrand :