Domanda

posso vedere come disattivare a livello di riga e di livello di pagina di blocco in SQL Server, ma non riesco a trovare un modo per forzare SQL Server per il blocco a livello di riga uso. C'è un modo per forzare SQL Server per il blocco a livello di riga e l'uso non utilizzare il blocco a livello di pagina?

È stato utile?

Soluzione

È possibile utilizzare il suggerimento ROWLOCK, ma per quanto ne so SQL può decidere di degenerare, se si corre a corto di risorse

Dal doco :

  

scalmo Specifica che i blocchi di riga sono   presa quando pagina o tabella serrature sono   normalmente adottate. Quando specificato in   transazioni che operano a ISTANTANEA   livello di isolamento, blocchi di riga non sono   adottata a meno che si combina con ROWLOCK   altri indizi di tabella che richiedono serrature,   come ad esempio UPDLOCK e HOLDLOCK.

e

  

Blocco accenna ROWLOCK, UPDLOCK, E XLOCK   che i blocchi acquisire a livello di riga possono immettere   serrature su chiavi di indice piuttosto che il   righe di dati effettivi. Ad esempio, se un   tabella include un indice non cluster, e   SELECT utilizzando un hint di blocco è   gestito da un indice di copertura, un blocco è   acquisita sulla chiave indice nella   indice di copertura piuttosto che sui dati   riga nella tabella di base.

E infine questo dà una bella approfondita spiegazione circa l'escalation dei blocchi in SQL Server 2005 che è stato cambiato in SQL Server 2008.

C'è anche, molto in profondità: Blocco nel database del motore (nella documentazione in linea)

Quindi, in generale

UPDATE
Employees WITH (ROWLOCK)
SET Name='Mr Bean'
WHERE Age>93

dovrebbe essere ok, ma a seconda delle indici e il carico sul server, può finire per l'escalation a un blocco di pagina.

Altri suggerimenti

L'uso della clausola di ALLOW_PAGE_LOCKS ALTER / CREATE INDEX :

ALTER INDEX indexname ON tablename SET (ALLOW_PAGE_LOCKS = OFF);

Non puoi realmente forzare l'ottimizzatore di fare qualsiasi cosa, ma è possibile guidarla.

UPDATE
Employees WITH (ROWLOCK)
SET Name='Mr Bean'
WHERE Age>93

See   - Controllo SQL Server con Blocco e suggerimenti

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top