221
7.3 Niveaux d’isolation de la transaction
LEVEL READ UNCOMMITTED en début de procédure stockée dédiée à la lecture ou au
reporting, est une façon simple d’augmenter la concurrence et les performances.
N’oubliez pas de laisser la session dans son niveau par défaut à la fin de la procédure,
avec un SET TRANSACTION ISOLATION LEVEL READ COMMITTED.
Le niveau d’isolation READ COMMITTED est le niveau par défaut d’une session SQL
Server. Il protège la transaction contre les lectures sales, en ne permettant des lectures que sur les lignes validées. Pour cela, SQL Server pose un verrou partagé sur les
données en cours de lecture. Les verrous partagés sont compatibles entre eux (ce qui
veut dire qu’on peut en placer plusieurs sur la même ressource), mais incompatibles
avec les verrous exclusifs. Un verrou S ne pourra donc pas être placé sur une ligne
déjà dotée d’un verrou X. La lecture d’une ligne en cours de modification devra donc
attendre. Réciproquement, une tentative d’écriture devra attendre la libération de
tous les verrous partagés sur la ressource. Ce niveau est un peu plus contraignant que
le premier, et limite un peu plus les performances, en générant des verrous partagés,
et des attentes en lecture. Par contre, il ne protège pas des lectures non renouvelables, car les verrous partagés sont libérés dès la fin de l’instruction de lecture, et ne
persistent pas jusqu’à la fin de la transaction.
Le niveau d’isolation REPEATABLE READ, comme son nom l’indique, permet les lectures renouvelables, en maintenant les verrous partagés jusqu’à la fin de la transaction. Faisons le test :
USE AdventureWorks
GO
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
BEGIN TRAN
SELECT TOP 10 * FROM Sales.Currency
En exécutant notre requête sur la vue sys.dm_tran_locks, nous trouvons le résultat de la figure 7.2.
7.3 Niveaux d’isolation de la transaction
LEVEL READ UNCOMMITTED en début de procédure stockée dédiée à la lecture ou au
reporting, est une façon simple d’augmenter la concurrence et les performances.
N’oubliez pas de laisser la session dans son niveau par défaut à la fin de la procédure,
avec un SET TRANSACTION ISOLATION LEVEL READ COMMITTED.
Le niveau d’isolation READ COMMITTED est le niveau par défaut d’une session SQL
Server. Il protège la transaction contre les lectures sales, en ne permettant des lectures que sur les lignes validées. Pour cela, SQL Server pose un verrou partagé sur les
données en cours de lecture. Les verrous partagés sont compatibles entre eux (ce qui
veut dire qu’on peut en placer plusieurs sur la même ressource), mais incompatibles
avec les verrous exclusifs. Un verrou S ne pourra donc pas être placé sur une ligne
déjà dotée d’un verrou X. La lecture d’une ligne en cours de modification devra donc
attendre. Réciproquement, une tentative d’écriture devra attendre la libération de
tous les verrous partagés sur la ressource. Ce niveau est un peu plus contraignant que
le premier, et limite un peu plus les performances, en générant des verrous partagés,
et des attentes en lecture. Par contre, il ne protège pas des lectures non renouvelables, car les verrous partagés sont libérés dès la fin de l’instruction de lecture, et ne
persistent pas jusqu’à la fin de la transaction.
Le niveau d’isolation REPEATABLE READ, comme son nom l’indique, permet les lectures renouvelables, en maintenant les verrous partagés jusqu’à la fin de la transaction. Faisons le test :
USE AdventureWorks
GO
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
BEGIN TRAN
SELECT TOP 10 * FROM Sales.Currency
En exécutant notre requête sur la vue sys.dm_tran_locks, nous trouvons le résultat de la figure 7.2.
