Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 12282|Отговор: 0

[Източник] SQL Server задава нивото на изолация на транзакции

[Копирай линк]
Публикувано в 5.02.2021 г. 11:53:34 ч. | | | |
Оптимизация на заявки за Entity Framework WITH(NOLOCK)
https://www.itsvse.com/thread-9513-1-1.html

Заключване на базата данни NOLOCK, HOLDLOCK, UPDLOCK, TABLOCK, TABLOCKX
https://www.itsvse.com/thread-9519-1-1.html
Нивото на изолация на транзакциите в SQL Server и тяхната връзка с мръсни четения, неповторими четения, фантомни четения и др. (аргументи в кода и времеви последователности)

Разбирайки тези проблеми, които могат да възникнат при паралелен достъп до базата данни, можем да продължим да разбираме концепцията за ниво на изолация на базата данни, на прост език: как искате да изолирате едновременните транзакции и до каква степен? Например, ако мръсните четения могат да се толерират или ако не искате едновременните транзакции да имат мръсни четения, те могат да бъдат настроени на ниво на изолация, за да се направи изолацията между едновременните транзакции слаба или тежка.

Колкото по-високо е нивото на изолация, толкова по-малък е шансът за четене на мръсни или непълни данни, но толкова по-сериозно е влошаването на производителността в системи с висока паралелност. Колкото по-ниско е нивото на изолация, толкова по-голямо е подобрението на производителността в конкурентната система, но самите данни може да са непълни.

В SQL Server 2012 можете да зададете нивото на изолация на транзакция (от ниско към високо) чрез следния синтаксис:

ЗАДАЙТЕ НИВО НА ИЗОЛАЦИЯ НА ТРАНЗАКЦИИ
    { ЧЕТЕНЕ НЕАНГАЖИРАНО
    | ПРОЧЕТЕТЕ ОТДАДЕН
    | ПОВТОРЯЕМО ЧЕТЕНЕ
    | МОМЕНТНА СНИМКА
    | СЕРИАЛИЗИРУЕМ
    }
[ ; ]
Първо, създайте нов тестов скрипт, създайте база данни и вмъкнете тестови данни, както следва:



Създайте нов прозорец A, отворете транзакция, изпълнете операцията за обновяване и изчакате 10 секунди преди да се затвърдите, кодът е следният:

Създаване на нов прозорец B, задайте транзакцията READ UNCOMMITTED (неангажирано четене, най-ниско ниво, лесният проблем е мръсното четене, защото може да чете данните, модифицирани от други транзакции, но не са комитирани.) Прави същото като да зададеш (NOLOCK) върху таблицата на SELECT операторите в транзакция. При заявка към данните, кодът е следният:

Създай нов прозорец C, директно заявява данните по следния начин:

От своя страна,Изпълнете прозорци A, B и C и установете, че при обновяване на данни прозорец B може незабавно да върне данни (Възможно е показанията да са мръсни данни), прозорецът C трябва да изчака, докато прозорецът A завърши изпълнениетоще върне данните, както е показано на фигурата по-долу:


(Прозорец Б)


(Прозорец C)

(Край)





Предишен:Разлика в устойчивостта на Redis между RDB и AOF
Следващ:MySQL експортира резултатите от заявката във файл
Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com