Read Committed Snapshot
l’option Read Committed Snapshot Isolation (RCSI) permet d’éviter les blocages dans une base de données entre les lectures et les écritures, en activant un mode de verrouillage optimiste basé sur un maintien de version.
Pour activer cette option, il vaut mieux utiliser du code SQL. Il faut obtenir l’accès exclusif à la base de données pour que cette activation fonctionne. Le code suivant, en utilisant l’option ROLLBACK IMMEDIATE
, déconnecte tous les utilisateurs de la base. Attention donc aux applications.
USE [master]
GO
ALTER DATABASE [<database>]
SET READ_COMMITTED_SNAPSHOT ON
WITH ROLLBACK IMMEDIATE
GO
Bien sûr, il faut remplacer <database>
par le nom de votre base de données.
Impacts du RCSI
Le niveau d’isolation par défaut dans SQL Server est Read Commited. Cela signifie qu’un SELECT
doit attendre qu’une transaction de modification de données soit terminée pour effectuer la lecture, et vice-versa. On n’a pas le droit de lire une modification en cours. Si la modification est coûteuse, cela provoque des blocages.
Le mode Read Committed Snapshot modifie ce comportement en créant des versions de lignes avant chaque modification. Les lectures s’effectueront donc sans attente et sans blocage, sur une version transactionnelement cohérente des données, avant modification.
Il n’y a donc plus de blocage entre les lectures et les écritures.
Le seul défaut est que cela provoque une activité plus importante dans la base de données tempdb
, qui comporte un dépôt de version. Cela augmente aussi légèrement la taille des données.