Je lis un livre sur les transactions et les accès concurrents. Dans un paragraphe, il est mentionné que:
Et la phrase suivante est:
Ma question est: quelle est la différence entre "instance SQL Server locale" et "base de données SQL" dans ces deux phrases?
Quel est le niveau d'isolement par défaut et comment le trouver? Existe-t-il une requête spéciale pour connaître le niveau d'isolement par défaut?
Il fait référence à Azure SQL Database qui utilise RCSI par défaut .
Niveau d'isolation SQL
Le paramètre par défaut de la base de données pour la base de données consiste à activer l'isolement de capture instantanée de lecture (RCSI) en ayant à la fois les options de base de données READ_COMMITTED_SNAPSHOT et ALLOW_SNAPSHOT_ISOLATION définies sur ON, en savoir plus sur les niveaux d'isolement ici . Vous ne pouvez pas modifier le niveau d'isolement par défaut de la base de données. Cependant, vous pouvez contrôler explicitement le niveau d'isolement sur une connexion.
Dans SQL Server local, le niveau d'isolement par défaut est Lecture validée.
Trouver le niveau d'isolement "par défaut" est un peu une chasse aux oies. Cela dépendra de la base de données à partir de laquelle une requête est lancée et si des indices existent dans la requête pour remplacer un paramètre de niveau de base de données.
Cela dit, vous pouvez interroger sys.databases
pour savoir si RCSI ou SI est activé.
SELECT d.name,
d.is_read_committed_snapshot_on,
d.snapshot_isolation_state
FROM sys.databases AS d;
Notez que le READ_COMMITTED_SNAPSHOT
n'est pas techniquement un niveau d'isolement. Il s'agit plutôt d'une option de base de données qui contrôle l'implémentation de sorte que la version des lignes au lieu du verrouillage soit utilisée pour fournir une cohérence en lecture pour les sessions utilisant le READ_COMMITTED
niveau d'isolement.