Recherche du niveau d'isolement par défaut dans SQL Server 2017 et Azure SQL DB

9

Je lis un livre sur les transactions et les accès concurrents. Dans un paragraphe, il est mentionné que:

  • Dans l'instance SQL Server locale, le niveau d'isolement par défaut est Commit-Read basé sur le verrouillage

Et la phrase suivante est:

  • La valeur par défaut dans la base de données SQL est Lecture - Instantané validé basé sur la version des lignes

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?

Erik Darling
la source

Réponses:

13

Il fait référence à Azure SQL Database qui utilise RCSI par défaut .

Niveau d'isolement 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 définissant les options de base de données READ_COMMITTED_SNAPSHOT et ALLOW_SNAPSHOT_ISOLATION sur ON, pour en savoir plus sur les niveaux d'isolement, cliquez 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 demander sys.databasessi 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 ce READ_COMMITTED_SNAPSHOTn'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 de lecture pour les sessions utilisant le READ_COMMITTEDniveau d'isolement.

Erik Darling
la source