SQL SERVER – Applicazione NOLOCK per Ogni Singola Tabella di Istruzione Select – SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

L’altro giorno, durante l’installazione di SQL Server Ottimizzazione delle Prestazioni di Laboratorio Pratico, ho camminato in una situazione molto interessante. Durante l’ottimizzazione di una query abbiamo avuto una situazione in cui abbiamo dovuto verificare se la query è bloccata durante l’esecuzione di not., Per testare la nostra teoria abbiamo dovuto mettere un suggerimento nolock per ogni singola tabella della query lunga. Tuttavia, non era possibile farlo in quanto la Stored Procedure era super enorme e coinvolgeva oltre 90 tabelle e 14 viste in più istruzioni SQL. È stata davvero una grande sfida per un team di sviluppatori modificare quel SP. Se mai affrontare tali situazioni, non si dovrebbe stressare. C’è un modo molto più semplice per leggere i dati non impegnati.,

Prima di continuare a leggere questo post del blog, si prega di notare che personalmente non preferisco utilizzare per NOLOCK suggerimenti nella mia attività, in quanto leggerà i dati sporchi e spesso la lettura di dati non impegnati crea problemi con l’integrità del database. Esistono molti modi diversi per ottimizzare la query piuttosto che utilizzare il suggerimento NOLOCK o utilizzare l’isolamento delle transazioni read uncommitted.

Vediamo prima un semplice esempio di come NOLOCK hint funziona con più tabelle.,

Ora convertiremo lo stesso script per utilizzare l’isolamento delle transazioni non committed.

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTEDGOSELECT *FROM . ctINNER JOIN . spON ct.StateProvinceID = sp.StateProvinceIDGOSET TRANSACTION ISOLATION LEVEL READ COMMITTEDGO

Tecnicamente, non c’è assolutamente alcuna differenza tra le prestazioni e l’impatto di entrambi i metodi. Preferisco usare il secondo metodo più spesso in quanto è più facile scrivere e testare. Ancora una volta, se possibile, mi piace stare lontano dalla lettura di metodi non impegnati per leggere i dati.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *