web-dev-qa-db-fra.com

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

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?

8
user123215

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.

12
Erik Darling