Cet article est un article miroir de traduction automatique, veuillez cliquer ici pour accéder à l’article original.

Vue: 12282|Répondre: 0

[Source] SQL Server définit le niveau d’isolation des transactions

[Copié le lien]
Publié sur 05/02/2021 11:53:34 | | | |
Optimisation des requêtes du Entity Framework AVEC(NOLOCK)
https://www.itsvse.com/thread-9513-1-1.html

Verrouillages de base de données NOLOCK, HOLDLOCK, UPDLOCK, TABLOCK, TABLOCKX
https://www.itsvse.com/thread-9519-1-1.html
Le niveau d’isolation des transactions dans SQL Server et leur relation avec les lectures sale, non répétables, lectures fantômes, etc. (arguments de code et séquences temporelles)

En comprenant ces problèmes qui peuvent survenir en cas d’accès simultané à la base de données, nous pouvons continuer à comprendre le concept de niveau d’isolement de la base de données, en termes simples : comment voulez-vous isoler les transactions concurrentes, et dans quelle mesure ? Par exemple, si les lectures défectueuses peuvent être tolérées, ou si vous ne souhaitez pas que les transactions concurrentes aient des lectures incorrectes, celles-ci peuvent être réglées au niveau d’isolation pour rendre l’isolation entre les transactions concurrentes lâche ou sévère.

Plus le niveau d’isolement est élevé, moins il y a de risque de lire des données compromettantes ou incomplètes, mais plus la dégradation des performances est grave dans les systèmes à forte concurrence concurrencée. Plus le niveau d’isolation est faible, plus l’amélioration des performances du système concurrent est grande, mais les données elles-mêmes peuvent être incomplètes.

Dans SQL Server 2012, vous pouvez définir le niveau d’isolation d’une transaction (de faible à élevé) en utilisant cette syntaxe :

DÉFINIR LE NIVEAU D’ISOLATION DES TRANSACTIONS
    { LIRE NON ENGAGÉ
    | LIRE ENGAGÉ
    | LECTURE RÉPÉTABLE
    | INSTANTANÉ
    | SÉRIALISABLE
    }
[ ; ]
Tout d’abord, créez un nouveau script de test, créez une base de données et insérez les données de test, comme suit :



Créer une nouvelle fenêtre A, ouvre une transaction, effectue l’opération de mise à jour, et attends 10 secondes avant de valider, le code est le suivant :

Créer une nouvelle fenêtre B, définissez la transaction READ UNCOMMITTED (lecture non engagée, le niveau le plus bas, le problème facile est la lecture sale, car elle peut lire les données modifiées par d’autres transactions mais non validées.) Cela fait la même chose que de définir (NOLOCK) sur la table des objets d’instruction SELECT lors d’une transaction. Interrogez les données, le code est le suivant :

Créer une nouvelle fenêtre C, interroge directement les données, comme suit :

En retour,Exécutez les fenêtres A, B et C, et constatez qu’en mettant à jour les données, la fenêtre B peut immédiatement les renvoyer (Il est possible que la lecture soit des données compromettantes), la fenêtre C doit attendre que la fenêtre A termine son exécutionRetournera les données, comme montré dans la figure ci-dessous :


(Fenêtre B)


(Fenêtre C)

(Fin)





Précédent:Différence de persistance de Redis entre RDB et AOF
Prochain:MySQL exporte les résultats de la requête dans un fichier
Démenti:
Tous les logiciels, supports de programmation ou articles publiés par Code Farmer Network sont uniquement destinés à l’apprentissage et à la recherche ; Le contenu ci-dessus ne doit pas être utilisé à des fins commerciales ou illégales, sinon les utilisateurs assumeront toutes les conséquences. Les informations sur ce site proviennent d’Internet, et les litiges de droits d’auteur n’ont rien à voir avec ce site. Vous devez supprimer complètement le contenu ci-dessus de votre ordinateur dans les 24 heures suivant le téléchargement. Si vous aimez le programme, merci de soutenir un logiciel authentique, d’acheter l’immatriculation et d’obtenir de meilleurs services authentiques. En cas d’infraction, veuillez nous contacter par e-mail.

Mail To:help@itsvse.com