Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 19946|Risposta: 3

[Fonte] Blocchi database NOLOCK, HOLDLOCK, UPDLOCK, TABLOCK, TABLOCKX

[Copiato link]
Pubblicato su 14/01/2021 15:23:14 | | | |
NOLOCK
Quando questa opzione è selezionata, SQL Server legge o modifica i dati senza alcun blocco. In questo caso, l'utente può leggere i dati di una Transazione Non Compromettente o di un Rollback, noto come "dati sporchi".

BLOCCO DI TENUTA
Quando questa opzione è selezionata, SQL Server mantiene questo blocco condiviso fino alla fine dell'intera transazione senza rilasciarlo durante il percorso.

AGGIORNAMENTO
Quando questa opzione è selezionata, SQL Server utilizza un blocco modify invece di uno condiviso durante la lettura dei dati e mantiene questo lock fino alla fine dell'intera transazione o comando. Questa opzione garantisce che più processi possano leggere i dati contemporaneamente, ma solo quel processo possa modificarli.

TABLOCK
Quando questa opzione è selezionata, SQL Server applicherà un blocco condiviso sull'intera tabella fino alla fine del comando. Questa opzione garantisce che altri processi possano solo leggere i dati e non modificarli.

PAGLOCK
Questa opzione è l'opzione predefinita e, una volta selezionata, SQL Server utilizza un blocco di pagina condiviso.

TABLOCKX (Blocco Esclusivo del Tavolo)
Quando questa opzione è selezionata, SQL Server applicherà un blocco sull'intera tabella fino alla fine del comando o della transazione. Questo impedirà ad altri processi di leggere o modificare i dati nella tabella.

HOLDLOCK mantiene il blocco condiviso fino al completamento dell'intera transazione e dovrebbe essere rilasciato non appena l'oggetto bloccato non è più necessario, pari al livello di isolamento delle transazioni SERIALIZABLE

L'istruzione NOLOCK viene eseguita senza emettere un blocco condiviso, permettendo letture sporche, che corrispondono al livello di isolamento della transazione READ UNCOMMITTED

PAGLOCK utilizza più blocchi di pagina in cui viene utilizzato un blocco di tabella

READPAST permette al server SQL di saltare qualsiasi linea bloccata ed eseguire transazioni, e per i livelli di isolamento delle transazioni READ UNCOMMITTED, saltare solo i lock RID, non i blocchi di pagina, zona e tabella

ROWLOCK impone l'uso dei rowlock

TABLOCKX impone l'uso di un blocco esclusivo a livello di tabella, che impedisce a qualsiasi altra transazione di utilizzare la tabella durante la transazione

UPLOCK impone l'uso di aggiornamenti quando si legge una tabella senza un blocco condiviso

Nota: La differenza tra bloccare una tabella in un database
SELEZIONA * DA TABELLA CON (HOLDLOCK) Altre transazioni possono leggere la tabella, ma non possono aggiornare o eliminare
SELEZIONA * DA TABELLA CON (TABLOCKX) Altre transazioni non possono leggere, aggiornare e eliminare tabelle




Precedente:Display dual screen per desktop remoto Windows 10
Prossimo:.NET/C# Crea un account wallet ETH e una password di verifica basandosi su Nethereum [con codice sorgente]
 Padrone di casa| Pubblicato su 14/01/2021 16:53:24 |
Testa il blocco TABLOCKX

L'SQL di test è il seguente:


Testare il codice C#:


Scoperta,L'intera tabella è bloccata e i dati possono essere interrogati solo quando la transazione viene eseguita, come mostrato nella figura sottostante:



Elimina WITH(TABLOCKX) e aggiorna solo i dati con ID 1, il test è il seguente:



Poiché il Compito 2 e il Compito 4 non coinvolgono dati con id 1, la query è molto veloce e 3 e 4 devono attendere che la transazione si completi prima di effettuare la query.

Comportamento durante la modifica dei dati

In una transazione di lettura commessa che utilizza il versioning delle righe, si selezionano le righe da aggiornare usando una scansione bloccante, dove viene applicato un lock di aggiornamento (U-lock) alla riga dati quando il valore dei dati viene letto. Questo è lo stesso di una transazione di lettura commessa che non utilizza il versioning di linea. Se una riga di dati non soddisfa i criteri di aggiornamento, viene rilasciato un blocco di aggiornamento su quella riga e la riga successiva viene bloccata e scansionata.

Update Lock (U): Una modalità lock che previene i deadlock, in cui due transazioni leggono prima una risorsa dati. In caso di modifica, l'uso di lock condivisi e esclusivi a volte causa deadlock, mentre l'uso di update lock può evitare la verificazione di deadlock. Il lock di aggiornamento della risorsa può essere assegnato solo a una transazione alla volta e, se la risorsa deve essere modificata, il blocco di aggiornamento diventa esclusivo, altrimenti diventa un blocco condiviso.

Il login del link ipertestuale è visibile.

 Padrone di casa| Pubblicato su 28/01/2021 17:30:51 |
Questione:

udpate a
set colonna1 = 1
dove idx = 1
Quando sqlserver esegue l'istruzione update, blocca l'intera tabella

Analisi:

Struttura dell'orologio,Senza una chiave primaria, non puoi bloccare solo le righe
 Padrone di casa| Pubblicato su 02/05/2023 11:47:24 |
Ottimizzazione delle query del Entity Framework WITH(NOLOCK)
https://www.itsvse.com/thread-9513-1-1.html
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com