Read Committed Snapshot

Comment activer l’option Read Committed Snapshot dans une base de données SQL Server

L’option Read Committed Snapshot Isolation (RCSI) permet d’éviter les blocages dans une base de données entre les lectures et les écritures : les lectures ne posent plus de verrous partagés, elles lisent des versions de lignes.

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 : sans ROLLBACK IMMEDIATE, une seule session inactive connectée à la base suffit à la faire attendre. 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 [PachaDataFormation] 
SET READ_COMMITTED_SNAPSHOT ON 
WITH ROLLBACK IMMEDIATE
GO

L’exemple porte sur la base de démonstration PachaDataFormation : remplacez son nom par celui de votre base.

Impacts du RCSI

Le niveau d’isolation par défaut dans SQL Server est Read Committed. Cela signifie qu’un SELECT doit attendre qu’une transaction de modification de données soit terminée pour lire les lignes modifiées. On n’a pas le droit de lire une modification en cours. Si la modification est coûteuse, cela provoque des blocages. Une écriture peut aussi attendre une lecture, mais seulement le temps de la lecture de la ligne : en Read Committed, le verrou partagé est libéré dès la ligne lue.

Le mode Read Committed Snapshot modifie ce comportement en créant des versions de lignes à chaque modification. Les lectures ne sont plus bloquées par les écritures : elles lisent les données validées telles qu’elles étaient au début de l’instruction, et non au début de la transaction, qui est le comportement de l’isolation SNAPSHOT.

Il n’y a donc plus de blocage entre les lectures et les écritures. Les lectures restent en revanche bloquées par les opérations qui modifient la structure d’une table (DDL), qui posent un verrou de modification de schéma.

Les coûts du RCSI :

  • les versions de lignes sont stockées dans tempdb, ou dans la base elle-même si l’Accelerated Database Recovery (ADR) est activée. ADR est un prérequis de l’optimized locking de SQL Server 2025 ;
  • chaque ligne modifiée prend jusqu’à 14 octets de plus, ce qui augmente légèrement la taille des données ;
  • le code qui comptait sur le blocage pour lire la dernière valeur avant de la modifier lit désormais la dernière version validée : il doit être revu.