sys.allocation_units (Transact-SQL)

Si applica a: SQL Server Azure SQL DatabaseIstanza gestita di SQL di Azure

Contiene una riga per ogni unità di allocazione nel database.

Nome colonna Tipo di dati Descrizione
allocation_unit_id bigint ID dell'unità di allocazione. Valore univoco all'interno di un database.
tipo tinyint Tipo di unità di allocazione:

0 = Rimossa

1 = Dati all'interno di righe (tutti i tipi di dati, eccetto i tipi di dati LOB)

2 = Dati LOB (Large Object) (text, ntext, image, xml, tipi di valore di grandi dimensioni e tipi CLR definiti dall'utente)

3 = Dati di overflow della riga
type_desc nvarchar(60) Descrizione del tipo dell'unità di allocazione:

CADUTO

IN_ROW_DATA

LOB_DATA

ROW_OVERFLOW_DATA
container_id bigint ID del contenitore di archiviazione associato all'unità di allocazione.

Se type = 1 o 3 in un indice rowstore container_id = sys.partitions.hobt_id.

Se type = 1 o 3 in un indice columnstore, container_id = sys.column_store_row_groups.delta_store_hobt_id.

Se type è 2, allora container_id = sys.partitions.partition_id.

0 = Unità di allocazione contrassegnata per la rimozione posticipata
data_space_id int ID del filegroup contenente l'unità di allocazione.
total_pages bigint Numero totale di pagine allocate o riservate dall'unità di allocazione.
used_pages bigint Numero totale di pagine effettivamente utilizzate.
data_pages bigint Numero di pagine utilizzate contenenti:

Dati In-row

Dati LOB

Dati Row-overflow



Si noti che il valore restituito esclude le pagine di indice interne e le pagine di gestione dell'allocazione.

Nota

Quando si eliminano o ricompilano indici di grandi dimensioni, si eliminano tabelle di grandi dimensioni o si troncano tabelle o partizioni di grandi dimensioni, il motore di database rinvia le deallozioni di pagina effettive e i relativi blocchi associati, fino a quando non viene eseguito il commit della transazione. Le operazioni di eliminazione posticipate non rendono immediatamente disponibile lo spazio allocato. Pertanto, i valori restituiti da sys.allocation_units subito dopo l'eliminazione o il troncamento di un oggetto di grandi dimensioni potrebbero non corrispondere allo spazio su disco effettivamente disponibile.

Quando il ripristino accelerato del database è abilitato, l'eliminazione posticipata viene usata indipendentemente dalle dimensioni dell'oggetto.

Autorizzazioni

È richiesta l'appartenenza al ruolo public . Per altre informazioni, vedere Metadata Visibility Configuration.

Esempi

Determinare lo spazio usato dall'oggetto e dal tipo di un'unità di allocazione

La query seguente restituisce tutte le tabelle utente in un database e la quantità di spazio utilizzata in ognuno, in base al tipo di unità di allocazione.

SELECT t.object_id AS ObjectID,
       OBJECT_NAME(t.object_id) AS ObjectName,
       SUM(u.total_pages) * 8 AS Total_Reserved_kb,
       SUM(u.used_pages) * 8 AS Used_Space_kb,
       u.type_desc AS TypeDesc,
       MAX(p.rows) AS RowsCount
FROM sys.allocation_units AS u
JOIN sys.partitions AS p ON u.container_id = p.hobt_id
JOIN sys.tables AS t ON p.object_id = t.object_id
GROUP BY t.object_id,
         OBJECT_NAME(t.object_id),
         u.type_desc
ORDER BY Used_Space_kb DESC,
         ObjectName;

Vedere anche

sys.partitions (Transact-SQL)
Viste del catalogo per gli oggetti (Transact-SQL)
Viste del catalogo (Transact-SQL)