Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 12282|Ответ: 0

[Источник] SQL Server устанавливает уровень изоляции транзакций

[Скопировать ссылку]
Опубликовано 05.02.2021 11:53:34 | | | |
Оптимизация запросов к фреймворку сносов 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 вы можете установить уровень изоляции транзакции (от низкого к высокому) с помощью следующего синтаксиса:

УСТАНОВКА УРОВНЯ ИЗОЛЯЦИИ ТРАНЗАКЦИЙ
    { READ UNCOMMITTED
    | ЧИТАЙТЕ ПРИВЕРЖЕННОСТЬ
    | ПОВТОРЯЕМОЕ ЧТЕНИЕ
    | СНИМОК
    | СЕРИАЛИЗИРУЕМЫЙ
    }
[ ; ]
Сначала создайте новый тестовый скрипт, создайте базу данных и вставьте тестовые данные, следующим образом:



Создать новое окно A, откройте транзакцию, выполните операцию обновления и подождите 10 секунд перед коммитированием, код выглядит следующим образом:

Создать новое окно B, установите транзакцию READ UNCOMMITTED (uncommitted read, самый низкий уровень, лёгкая проблема — грязное считывание, так как данные могут считывать данные, изменённые другими транзакциями, но не коммитированные). Это делает то же самое, что и установка (NOLOCK) в таблице объектов операторов SELECT в транзакции. Запросите данные, код выглядит следующим образом:

Создать новое окно C, напрямую запросить данные следующим образом:

В свою очередь,Выполните окна A, B и C и обнаружите, что при обновлении данных окно B может сразу вернуть данные (Возможно, что данные — это грязные данные), окно C должно ждать, пока окно A завершит выполнениевернёт данные, как показано на рисунке ниже:


(Окно Б)


(Окно C)

(Конец)





Предыдущий:Разница в устойчивости Redis между RDB и AOF
Следующий:MySQL экспортирует результаты запроса в файл
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com