Granularità dei blocchi e gerarchie

Il Motore di database di SQL Server supporta il blocco con livelli di granularità diversi, che consente a tipi diversi di risorse di venire bloccati da una transazione. Per ridurre al minimo il costo associato ai blocchi, il Motore di database blocca automaticamente le risorse in base al livello più adatto per l'attività specifica. L'applicazione di un blocco con un livello di granularità inferiore, ad esempio a livello di riga, aumenta la concorrenza, ma anche l'overhead. Il numero dei blocchi da gestire infatti aumenta in modo proporzionale al numero di righe bloccate. L'applicazione di un blocco con un livello di granularità superiore, ad esempio a livello di tabella, comporta invece un aumento dei costi in termini di concorrenza, in quanto bloccando un'intera tabella viene impedito ad altre transazioni di accedere a qualsiasi parte della tabella. L'overhead tuttavia risulta inferiore perché il numero di blocchi da gestire è minore.

Motore di database deve spesso acquisire blocchi a più livelli di granularità per proteggere completamente una risorsa. Un gruppo di blocchi a più livelli di granularità viene denominato gerarchia di blocchi. Ad esempio, per proteggere completamente una lettura di un indice, è possibile che un'istanza di Motore di database debba acquisire blocchi condivisi sulle righe e blocchi preventivi condivisi sulle pagine e sulla tabella.

Nella tabella seguente sono illustrate le risorse che il Motore di database può bloccare.

Risorsa

Descrizione

RID

ID di riga utilizzato per bloccare una singola riga all'interno di un heap.

KEY

Blocco di riga all'interno di un indice utilizzato per proteggere intervalli di chiavi nelle transazioni serializzabili.

PAGE

Pagina di database di 8 kilobyte (KB), ad esempio una pagina di dati o di indice.

EXTENT

Gruppo contiguo di otto pagine, ad esempio di dati o di indice.

HoBT

Heap o albero B. Un blocco che protegge un albero b-tree (indice) o l'heap delle pagine di dati in una tabella che non dispone di un indice cluster.

TABLE

Tabella intera, compresi tutti i dati e gli indici.

FILE

File di database.

APPLICATION

Risorsa specificata dall'applicazione.

METADATA

Blocchi a livello di metadati.

ALLOCATION_UNIT

Unità di allocazione.

DATABASE

Intero database.

Nota

Gli HoBT e i blocchi TABLE possono essere interessati dall'opzione LOCK_ESCALATION di ALTER TABLE.