Une question que posent souvent les développeurs : comment éviter les verrous bloquants à la lecture des données ?
Une des (mauvaises) solutions est d'utiliser la directive NOLOCK (ou isolation READ UNCOMMITTED) : c'est un faux ami car cela ne garantit pas la cohérence transactionnelle des données que l'on lit.
L'autre solution est d'utiliser un niveau d'isolation "optimiste", par versionning : SNAPSHOT ou READ COMMITTED SNAPSHOT (RCSI).
Le principe de l'isolation par versionning est le suivant : plutôt que de poser un verrou partagé pour lire les données (ce qui empêchera de lire des données en cours de modification), SQL Server va renvoyer la dernière version validée des données : il utilise pour cela le "Version Store", qui stocke de manière transparente cette version des données dans Tempdb.
Un effet de bord mal connu de l'isolation SNAPSHOT (ou RCSI) est qu'il ajoute un pointeur de 14 octets à chaque ligne de données dès qu'on la modifie, ce qui peut poser certains problèmes. Voyons cela de plus près.