Database
 sql >> Base de données >  >> RDS >> Database

Conseils pour les verrous en lecture/écriture en fonction du niveau d'isolation des transactions dans MSSQL

Lire non validé

  • Si des données sont modifiées dans une transaction, la sélection de ces données (dans une autre transaction ou sans transaction) n'attendra pas la fin de la première transaction et renverra les entrées de données des transactions non validées.
  • Si des données sont lues dans une transaction, les mises à jour de ces données dans une autre transaction n'attendront pas la fin de la première transaction.
  • Les verrous partagés ne sont pas utilisés. Identique au paramètre l il NOLOCK indice pour toutes les sélections en lecture validée.
  • Les verrous exclusifs sont activés pendant l'exécution de l'instruction et désactivés à la fin de du transaction .

Lecture validée + read_committed_snapshot désactivé
(alter database xxx set read_committed_snapshot off)

  • Si des données sont modifiées dans une transaction, la sélection de ces données (dans une autre transaction ou sans transaction) attendra la fin de la première transaction. Sélectionner ct avec le NOCHECK indice renverra des données modifiées, mais non validées.
  • Si des données sont lues dans une transaction, les mises à jour de ces données dans une autre transaction n'attendront pas la fin de la première transaction.
  • Les verrous partagés sont activés pendant l'exécution de l'instruction et désactivés à la fin de l'instruction exécution nt .
  • Les verrous exclusifs sont activés pendant l'exécution de l'instruction et désactivés à la fin de la transaction .

Lire validé + read_committed_snapshot sur
(alter database xxx set read_committed_snapshot on)

  • Si des données sont modifiées dans une transaction, la sélection de ces données (dans une autre transaction ou sans transaction) n'attendra pas la fin de la première transaction et renverra des valeurs au moment t sur le début de la transaction . Sélectionner avec le Indice NOCHECK renverra des données modifiées, mais non validées.
  • Si des données sont lues dans une transaction, les mises à jour de ces données dans une autre transaction n'attendront pas la fin de la première transaction.
  • Les verrous partagés ne sont pas utilisés. Le mécanisme de gestion des versions de lignes est utilisé à la place :les données des enregistrements mis à jour sont stockées dans tempdb .
  • Les verrous exclusifs sont activés pendant l'exécution de l'instruction et sont désactivés à la fin de la transaction .

Lecture répétable

  • Si des données sont modifiées dans une transaction, la sélection de ces données (dans une autre transaction ou sans transaction) attendra la fin de la première transaction. Sélectionnez avec le L'indice NOLOCK renverra des données modifiées, mais non validées.
  • Si des données sont lues dans une transaction, les mises à jour de ces données dans une autre transaction attendront la fin de la première transaction.
  • Les verrous partagés sont activés pendant l'exécution de l'instruction et désactivés à la fin de la transaction , contrairement à Read Committed.
  • Les verrous exclusifs sont activés pendant l'exécution de l'instruction et désactivés à la fin de la transaction .

Sérialisable

  • Si des données sont modifiées dans une transaction, la sélection de ces données (dans une autre transaction ou sans transaction) attendra la fin de la première transaction. Sélectionner avec le L'indice NOLOCK sera renvoie les données modifiées, mais non validées.
  • Si des données sont lues dans une transaction, les mises à jour de ces données dans une autre transaction attendront la fin de la première transaction.
  • Les verrous partagés sont activés pendant l'exécution de l'instruction et désactivés à la fin de la transaction .
  • Les verrous exclusifs sont activés pendant l'exécution de l'instruction et sont désactivés à la fin de la transaction.
  • Les verrous de plage exclusive sont activés pour les clés qui répondent à la plage des critères de requête. Les insertions de nouveaux enregistrements compris dans cette plage ne sont pas autorisées. Identique au paramètre le HOLDLO CK indice pour tous les SELECT dans Lire Commis.

Instantané
(alter database xxx set allow_snapshot_isolation on)

  • Si des données sont modifiées dans une transaction, la sélection de ces données (dans une autre transaction ou sans transaction) n'attendra pas la fin de la première transaction. et renverra des valeurs pour le moment sur le début de la transaction . Sélectionner avec le L'indice NOLOCK sera renvoie les données modifiées, mais non validées.
  • Si des données sont lues dans une transaction, les mises à jour de ces données dans une autre transaction n'attendront pas la fin de la première transaction.
  • Les verrous partagés ne sont pas utilisés. Le mécanisme de gestion des versions de lignes est utilisé à la place :les données des enregistrements mis à jour sont stockées dans tempdb .
  • Les verrous exclusifs sont activés pendant l'exécution de l'instruction et désactivés à la fin de la transaction.

Testé sur MSSQL 2014.