Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 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 ви можете встановити рівень ізоляції транзакції (від низького до високого) за допомогою цього синтаксису:

ВСТАНОВИТИ РІВЕНЬ ІЗОЛЯЦІЇ ТРАНЗАКЦІЙ
    { ЧИТАТИ НЕЗОБОВ'ЯЗАНО
    | ЧИТАЙТЕ ВІДДАНО
    | ПОВТОРЮВАНЕ ЧИТАННЯ
    | ЗНІМОК
    | СЕРІАЛІЗОВАНИЙ
    }
[ ; ]
Спочатку створіть новий тестовий скрипт, створіть базу даних і вставте тестові дані, наступним чином:



Створіть нове вікно 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