Condividi tramite


Hint di blocco

È possibile specificare un intervallo di hint per il blocco a livello di tabella utilizzando le istruzioni SELECT, INSERT, UPDATE e DELETE per modificare il comportamento predefinito del blocco di Microsoft SQL Server Compact 4.0. Utilizzare gli hint per il blocco solo se strettamente necessario, in quanto possono compromettere la concorrenza.

Importante

I blocchi necessari per un'operazione vengono acquisiti automaticamente da SQL Server Compact 4.0. Se si utilizzano gli hint per il blocco elencati nella tabella seguente, aumenterà la quantità di blocchi che si verificano in SQL Server Compact 4.0. Non è possibile utilizzare gli hint per il blocco per evitare il blocco delle risorse.

Nella tabella seguente vengono descritti gli hint per il blocco che è possibile utilizzare in SQL Server Compact 4.0.

Nome hint per il blocco

Descrizione hint

GRANULARITY

ROWLOCK

Consente di utilizzare i blocchi a livello di riga quando si leggono o si modificano i dati. Tali blocchi vengono acquisiti e rilasciati in base alle necessità.

Le operazioni SELECT attivano i blocchi S sulle righe.

PAGLOCK

Consente di utilizzare i blocchi a livello di pagina quando si leggono o si modificano i dati. Tali blocchi vengono acquisiti e rilasciati in base alle necessità.

Le operazioni SELECT attivano i blocchi S sulle pagine.

TABLOCK

Consente di utilizzare un blocco a livello di tabella quando si leggono o si modificano i dati. Il blocco viene mantenuto fino alla fine dell'istruzione.

Le operazioni SELECT attivano i blocchi S sulle tabelle.

DBLOCK

Consente di utilizzare un blocco a livello di database quando si leggono o si modificano i dati. Il blocco viene mantenuto fino alla fine dell'istruzione.

Le operazioni SELECT attivano i blocchi S sui database.

LOCKMODES

UPDLOCK

Consente di utilizzare i blocchi di aggiornamento invece dei blocchi condivisi durante la lettura di una tabella e di utilizzare i blocchi persistenti fino alla fine dell'istruzione o della transazione. UPDLOCK consente di leggere i dati senza bloccare gli altri lettori e di aggiornarli in seguito con la certezza che i dati non siano stati modificati dopo l'ultima lettura.

Le operazioni SELECT attivano i blocchi U. La granularità predefinita è ROWLOCK.

XLOCK

Consente di utilizzare i blocchi esclusivi invece dei blocchi condivisi durante la lettura di una tabella e di utilizzare i blocchi persistenti fino alla fine dell'istruzione o della transazione.

Le operazioni SELECT attivano i blocchi X. La granularità predefinita è ROWLOCK.

DURATION

HOLDLOCK

Consente di utilizzare un blocco persistente per mantenere attivo un blocco fino al completamento della transazione, invece di rilasciare il blocco non appena la tabella, la riga o la pagina di dati non è più necessaria.

Se non viene specificata alcuna granularità, si applica ROWLOCK.

NOLOCK

Non attiva alcun blocco. Si tratta dell'impostazione predefinita per le operazioni SELECT. Non si applica alle istruzioni INSERT, UPDATE e DELETE.

NotaNota
In SQL Server, un hint NOLOCK abilita il comportamento Read Uncommitted. In SQL Server Compact 4.0, l'utilizzo di un hint NOLOCK determina un livello di isolamento Read Committed. SQL Server Compact 4.0 consente di mantenere le copie dei dati per garantire che sia possibile leggere i dati senza blocchi condivisi per proteggere i dati.

Per ulteriori informazioni sull'utilizzo degli hint di blocco, vedere "Hint di blocco" nella documentazione online di SQL Server.

Hint NOLOCK

L'utilizzo degli hint per il blocco in SQL Server Compact 4.0 è simile a quello in SQL Server. Tuttavia, in SQL Server Compact 4.0 l'hint NOLOCK presenta un comportamento molto diverso rispetto a SQL Server. In SQL Server Compact 4.0, NOLOCK è l'hint predefinito per le istruzioni SELECT, sebbene venga ancora applicato il comportamento Read Committed.

In SQL Server, un'istruzione SELECT con il livello di isolamento predefinito di Read Committed determina l'acquisizione e il rilascio dei blocchi S sulle righe durante la lettura. Sebbene in questo modo venga applicato il livello di isolamento, un'istruzione SELECT rimane in attesa per verificare se su una riga per cui è necessario un blocco S esiste un blocco non compatibile. Quando si specifica l'hint NOLOCK, l'operazione SELECT non cerca di attivare il blocco S e i dati vengono letti. Sebbene questo comportamento consenta il completamento corretto dell'operazione, consente anche all'istruzione SELECT di leggere i dati di cui non è stato eseguito il commit.

In SQL Server Compact 4.0 non vengono utilizzati i blocchi S per garantire che i dati siano Read Committed. Poiché in SQL Server Compact 4.0 si utilizza un meccanismo di controllo delle versioni delle pagine quando i dati vengono modificati, è possibile leggere i dati richiesti da un'istruzione SELECT dalla copia appropriata della pagina, senza che sia necessario attivare i blocchi S per garantire che i dati siano Read Committed. Pertanto, sebbene in SQL Server Compact 4.0 si utilizzi NOLOCK per un'istruzione SELECT, i dati vengono letti al livello di isolamento di Read Committed. Non è possibile eseguire una lettura dirty (Read Uncommitted) con SQL Server Compact 4.0.

Nota

L'hint NOLOCK non ha effetto sui blocchi Sch-S o Sch-X.

Vedere anche

Concetti

Informazioni sul blocco

Livello di isolamento della transazione

Visualizzazione delle informazioni sui blocchi

Timeout di blocco