web-dev-qa-db-fra.com

Paramétrer read_committed_snapshot sur l'activation de l'allocation_snapshot_isolation est éteint

J'ai expérimenté diverses configurations de bases de données SQL Server et avons fini par définir READ_COMMITTED_SNAPSHOT à ON tandis que ALLOW_SNAPSHOT_ISOLATION est OFF.

J'ai remarqué que lors de la possibilité de cela, de nombreuses questions ont beaucoup plus rapidement. J'utilise toujours la valeur par défaut READ COMMITTED niveau d'isolement pour se connecter à la base de données.

Qu'est-ce qui se passe réellement ici? Je penserais que quand ALLOW_SNAPSHOT_ISOLATION est OFF, réglage READ_COMMITTED_SNAPSHOT à ON _ _ _ n'aurait aucun effet ... Je n'utilise toujours pas vraiment l'isolement de l'instantané, ou suis-je? Can quelqu'un s'il vous plaît expliquer? Je suis confus.

J'ai essayé de rechercher ce sujet en ligne, mais chaque fois que je vois READ_COMMITTED_SNAPSHOT être utilisé, c'est toujours ensemble avec ALLOW_SNAPSHOT_ISOLATION, que je n'ai pas activé.

5
Tom Pažourek

J'ai remarqué que lors de la possibilité de cela, de nombreuses questions ont beaucoup plus rapidement. J'utilise toujours la valeur par défaut READ COMMITTED niveau d'isolement pour se connecter à la base de données.

DAN noté ceci:

Les options sont indépendantes et les deux n'ont pas besoin d'être activées, bien que beaucoup font à tort. Allumer l'un ou l'autre entraîne la surcharge de la version à la ligne. READ_COMMITTED_SNAPSHOT ON provoque tout READ_COMMITTED Sessions à utiliser la version-version à la ligne au lieu de verrouillage afin d'éviter de bloquer et d'expliquer votre amélioration de performance perçue.

En outre, READ_COMMITTED_SNAPSHOT (désormais appelé RCSI) ne vous donnera que quelques propriétés d'une concurrence optimiste. RCSI et Snapshot (SI) diffèrent par trois manières principales:

  1. RCSI sera immédiatement utilisé par toutes les requêtes d'isolation RC.
  2. RCSI fournit une vue Point-in-Time (instantané) de la base de données pour une seule instruction .
  3. SI fournit une vue point à temps pour une transaction complète .
  4. Si peut avoir des conflits d'écriture.

Qu'est-ce qui se passe réellement ici?

RCSI est activé, ainsi que toutes les requêtes d'isolation RC sont favorisées à RCSI où les lecteurs ne bloquent pas les écrivains et les écrivains ne bloquent pas les lecteurs. La "accélération" que vous voyez est probablement due à la réduction des attentes sur le blocage de ces requêtes, car elle utilise maintenant le magasin de version optimiste de la concurrence au lieu de bloquer et d'attendre. Cela peut ou peut ne pas vous donner les résultats souhaités dans vos questions.

Je penserais que quand ALLOW_SNAPSHOT_ISOLATION est OFF, réglage READ_COMMITTED_SNAPSHOT à ON _ _ n'aurait aucun effet ... Je n'utilise toujours pas l'isolement de l'instantané, ou suis-je?

Voir au dessus. Vous l'utilisez lorsque RCSI est allumé (qui est celui que vous avez fait en fait activé), mais si Si SI n'est pas automatiquement utilisé lorsqu'il est activé: vous devez explicitement SET TRANSACTION ISOLATION LEVEL SNAPSHOT (ou équivalent) à utiliser si.


Pour plus d'informations, voir Niveaux d'isolation basés sur la version en ligne dans le moteur de base de données SQL Server dans la documentation du produit.

D'autres détails utiles relatives à certains gothas et à des mises en garde lors de l'utilisation de RCSI/SI peuvent être trouvés dans ces articles:

4
Gavin Belson