Personalizzazione dei blocchi per un indice
La strategia di blocco dinamico utilizzata da Microsoft Motore di database di SQL Server prevede la selezione automatica del livello di granularità del blocco migliore per le query. Nei casi in cui i modelli di accesso sono comprensibili e coerenti, la limitazione dei livelli di blocco disponibili per un indice può risultare vantaggiosa.
Si supponga, ad esempio, che un'applicazione di database utilizzi una tabella di ricerca che viene aggiornata con frequenza settimanale nell'ambito di un'elaborazione batch. In questo caso la strategia di blocco più efficace consiste nel disattivare il blocco di pagina e di riga e nel consentire a tutti gli utenti simultanei di ottenere un blocco condiviso (S) sulla tabella, con una conseguente riduzione dell'overhead. Durante l'aggiornamento settimanale il processo di aggiornamento può accettare solo un blocco esclusivo (X) e aggiornare quindi l'intera tabella.
La granularità del blocco utilizzata su un indice può essere impostata utilizzando le istruzioni CREATE INDEX e ALTER INDEX. Inoltre, le istruzioni CREATE TABLE e ALTER TABLE possono essere utilizzate per impostare la granularità del blocco sui vincoli PRIMARY KEY e UNIQUE. Per garantire la compatibilità con le versioni precedenti, la stored procedure di sistema sp_indexoption è anch'essa in grado di impostare la granularità. Per visualizzare l'opzione di blocco corrente per un determinato indice, utilizzare la funzione INDEXPROPERTY. È possibile impedire l'applicazione di blocchi a livello di pagina o di riga e della combinazione di questi due livelli di blocco per un particolare indice.
Blocchi non consentiti | Accesso all'indice da parte di |
---|---|
A livello di pagina |
Blocchi a livello di riga e tabella |
A livello di riga |
Blocchi a livello di pagina e tabella |
A livello di pagina e di riga |
Blocchi a livello di tabella |
Se, ad esempio, una tabella rappresenta un punto di contesa, può risultare utile non consentire l'applicazione di blocchi a livello di pagina e consentire solo l'utilizzo dei blocchi a livello di riga. Oppure, se per l'accesso a un indice o a una tabella viene sempre eseguita la scansione della tabella, è possibile impedire l'applicazione di blocchi a livello di pagina e di riga consentendo solo i blocchi a livello di tabella.
Importante: |
---|
Motore di database Query Optimizer sceglie praticamente sempre la granularità del blocco corretta. È consigliabile non modificare le selezioni eseguite da Query Optimizer. La disattivazione di un livello di blocco può influire negativamente sulla concorrenza di una tabella o di un indice. Ad esempio, l'utilizzo di blocchi a livello di tabella su una tabella di grandi dimensioni a cui accedono frequentemente molti utenti può influire in modo notevole sulle prestazioni. Per poter accedere alla tabella, gli utenti devono attendere il rilascio del blocco a livello di tabella. |
Vedere anche
Altre risorse
ALTER INDEX (Transact-SQL)
ALTER TABLE (Transact-SQL)
CREATE INDEX (Transact-SQL)
CREATE TABLE (Transact-SQL)
INDEXPROPERTY (Transact-SQL)
sp_indexoption (Transact-SQL)