Ich hatte gehofft, eine granulare Ansicht zu erhalten, welche Datenbankdateien welche Zuordnungseinheiten für die verschiedenen HoBTs (sowohl ausgerichtet als auch nicht ausgerichtet) enthielten, die in einer Datenbank leben.
Die Abfrage, die ich immer verwendet habe (siehe unten), hat mir gute Dienste geleistet, bis wir angefangen haben, mehrere Datendateien pro Dateigruppe zu erstellen, und ich kann nur herausfinden, wie man so detailliert wie die Dateigruppenebene wird.
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;
Diese Abfrage funktioniert jedoch nicht, wenn eine Dateigruppe mehrere Dateien enthält, da ich nur eine Zuordnungseinheit zu einem Datenbereich und schließlich zu einer Dateigruppe herstellen kann. Ich würde gerne wissen, ob es eine andere DMV oder einen anderen Katalog gibt, mit denen ich genauer identifizieren kann, welche Datei in der Dateigruppe eine Zuordnungseinheit enthält.
Die Frage hinter dieser Frage ist, dass ich versuche, die tatsächlichen Auswirkungen der Komprimierung partitionierter Strukturen zu bewerten. Ich weiß, dass ich FILEPROPERTY(FileName,'SpaceUsed')
für die Datei eine Vorher-Nachher -Verwendung und für die Datei eine Vorher-Nachher-Verwendung ausführen kann sys.allocation_units.used_pages/128.
, um diese Informationen abzurufen, aber die Übung selbst hat mich gefragt, ob ich die bestimmte Datei identifizieren kann, die eine bestimmte Zuordnungseinheit enthält.
Ich habe %%physloc%%
in der Hoffnung herumgespielt, dass es helfen könnte, aber es bringt mich nicht ganz auf das, wonach ich suche. Die folgenden Links wurden von Aaron Bertrand bereitgestellt :
Antworten:
Versuchen Sie die folgende Abfrage. Es erstellt zunächst eine lokale temporäre Tabelle und füllt sie dann mit den Zuordnungen AllocationUnitID-to-FileID, die in
sys.dm_db_database_page_allocations
einer in SQL Server 2012 eingeführten undokumentierten dynamischen Verwaltungsfunktion ( undocumented Dynamic Management Function, DMF) enthalten sind (für Versionen vor 2012 können Sie diese Informationen abrufenDBCC IND()
). Diese lokale temporäre Tabelle wird dann zu einer modifizierten Version der ursprünglichen Abfrage verknüpft.Die Daten aus diesem DMF werden zur Leistungssteigerung in eine temporäre Tabelle gestellt, da es je nach Größe der Datenbank einige Sekunden dauern kann, bis diese Daten abgerufen werden. Das
DISTINCT
Schlüsselwort wird verwendet, weil dieser DMF eine Zeile pro Datenseite zurückgibt und es mehrere Datenseiten pro Zuordnungseinheit gibt.Ich habe diese Daten in der ursprünglichen Abfrage belassen, da die ursprüngliche Abfrage Zuordnungseinheiten zurückgibt, die 0 Datenseiten (normalerweise
ROW_OVERFLOW_DATA
undLOB_DATA
Typen) haben. Ich habe dastotal_pages
Feld auch hinzugefügt , damit es einfacher ist, diesen Datenpunkt mit den Zeilen zu verknüpfen, dieNULL
s für die Datendateien enthalten. Wenn Sie sich nicht für die Allocation Units interessieren, die 0 Zeilen haben, ist es in Ordnung,LEFT JOIN
dies in eine zu ändernINNER JOIN
.quelle
Remus Rusanu gab am 21. Mai 2013 eine Antwort auf diese Frage:
Eine Dateigruppe, mehrere Datendateien, wie eine Liste von Tabellen in jeder Datei abgerufen wird
Seine Antwort war:
quelle