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.