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

Vista: 12282|Risposta: 0

[Fonte] SQL Server stabilisce il livello di isolamento delle transazioni

[Copiato link]
Pubblicato su 05/02/2021 11:53:34 | | | |
Ottimizzazione delle query del Entity Framework WITH(NOLOCK)
https://www.itsvse.com/thread-9513-1-1.html

Blocchi database NOLOCK, HOLDLOCK, UPDLOCK, TABLOCK, TABLOCKX
https://www.itsvse.com/thread-9519-1-1.html
Il livello di isolamento delle transazioni in SQL Server e la loro relazione con dirty read, reads non ripetibili, phantom read, ecc. (argomenti di codice e sequenze temporali)

Comprendendo questi problemi che possono sorgere nel caso di accesso concorrente al database, possiamo continuare a comprendere il concetto di livello di isolamento del database, in termini semplici: come si vuole isolare le transazioni concorrenti e in che misura? Ad esempio, se le letture sporche possono essere tollerate, o se non vuoi che le transazioni concorrenti abbiano letture sporche, queste possono essere impostate al livello di isolamento per rendere l'isolamento tra transazioni concorrenti morbido o grave.

Più alto è il livello di isolamento, minore è la probabilità di leggere dati sporchi o incompleti, ma maggiore è la degradazione delle prestazioni nei sistemi ad alta concorrenza. Più basso è il livello di isolamento, maggiore è il miglioramento delle prestazioni nel sistema concorrente, ma i dati stessi possono essere incompleti.

In SQL Server 2012, puoi impostare il livello di isolamento di una transazione (da basso a alto) usando questa sintassi:

IMPOSTA IL LIVELLO DI ISOLAMENTO DELLE TRANSAZIONI
    { LEGGI NON DICHIARATO
    | LEGGI IMPEGNATO
    | LETTURA RIPETIBILE
    | ISTANTANEO
    | SERIALIZZABILE
    }
[ ; ]
Per prima cosa, crea un nuovo script di test, crea un database e inserisci i dati di test, come segue:



Crea una nuova finestra A, apri una transazione, esegui l'operazione di aggiornamento e attendi 10 secondi prima di effettuare il commesso, il codice è il seguente:

Crea una nuova finestra B, imposta la transazione READ UNCOMMITTED (read uncommess, il livello più basso, il problema facile è la lettura sporca, perché può leggere i dati modificati da altre transazioni ma non essere stati commessi.) Fa la stessa cosa che impostare (NOLOCK) sulla tabella dell'oggetto dell'istruzione SELECT in una transazione. Interroga i dati, il codice è il seguente:

Crea una nuova finestra C, interroga direttamente i dati, come segue:

A sua volta,Esegui le finestre A, B e C e scopri che durante l'aggiornamento dei dati, la finestra B può restituire immediatamente i dati (È possibile che la lettura sia un dato sporco), la finestra C deve aspettare che la finestra A finisca di essere eseguitarestituirà i dati, come mostrato nella figura sottostante:


(Finestra B)


(Finestra C)

(Fine)





Precedente:Differenza di persistenza di Redis tra RDB e AOF
Prossimo:MySQL esporta i risultati della query in un file
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