Ізоляція. Рівні Repeatable Read та Serializable
Свайпніть щоб показати меню
Repeatable Read
Рівень ізоляції Repeatable Read у базах даних гарантує, що при початку транзакції ви бачите знімок бази даних, який залишається незмінним протягом усього виконання вашої задачі.
Це означає, що навіть якщо інші зміни відбуваються у базі даних під час вашої роботи, ви бачитимете лише ті дані, які були на момент початку транзакції.
Транзакції з ізоляцією Repeatable Read утримують блокування на читання для всіх рядків, до яких звертаються, і блокування на запис для рядків, які вони вставляють, оновлюють або видаляють. Це запобігає втраченим оновленням, "брудному" читанню та не повторюваному читанню.
Однак існує одна проблема, яка все ще може виникати при такому типі ізоляції — фантомне читання.
Фантомне читання
Фантомні читання виникають, коли транзакція повторно виконує запит і знаходить різні набори рядків, які задовольняють початкову умову фільтрації запиту.
Наприклад, припустимо, що транзакція вибирає всі замовлення із загальною сумою понад $1000. Якщо інша транзакція вставить нове замовлення із сумою, що відповідає цій умові, між першим і другим виконанням запиту, перша транзакція побачить цей додатковий рядок під час другого виконання, що призведе до фантомного читання.
Фантомне читання може виникати, коли одна транзакція читає дані, а інша транзакція додає нові записи до бази даних. У результаті можна отримати різні результати для двох послідовних операцій читання.
Неповторюване читання vs фантомне читання
Неповторюване читання виникає, коли один і той самий запит, виконаний Користувачем A, повертає різні значення для одного й того ж рядка між послідовними читаннями, зазвичай через зміни, внесені Користувачем B.
Фантомне читання, навпаки, відбувається, коли той самий запит, виконаний Користувачем A, повертає різні набори рядків між послідовними читаннями, навіть якщо окремі рядки не були оновлені.
Ми можемо вказати цей рівень ізоляції у нашому SQL-запиті за допомогою наступної команди:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
Serializable
Рівень ізоляції Serializable — це найвищий рівень ізоляції в базах даних, що забезпечує найсуворіший контроль паралельності.
На цьому рівні транзакції виконуються так, ніби вони обробляються послідовно, одна за одною, навіть якщо насправді вони виконуються паралельно. Це гарантує, що результат транзакцій буде таким самим, як і при їх виконанні в певному послідовному порядку, підтримуючи цілісність і запобігаючи всім відомим аномаліям паралельності.
Note
Використання цього типу ізоляції може призвести до зниження продуктивності через збільшення блокувань.
Можна використати наступний вираз для встановлення цього рівня ізоляції у SQL-запиті:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Ізоляція. Рівні Repeatable Read та Serializable
Repeatable Read
Рівень ізоляції Repeatable Read у базах даних гарантує, що при початку транзакції ви бачите знімок бази даних, який залишається незмінним протягом усього виконання вашої задачі.
Це означає, що навіть якщо інші зміни відбуваються у базі даних під час вашої роботи, ви бачитимете лише ті дані, які були на момент початку транзакції.
Транзакції з ізоляцією Repeatable Read утримують блокування на читання для всіх рядків, до яких звертаються, і блокування на запис для рядків, які вони вставляють, оновлюють або видаляють. Це запобігає втраченим оновленням, "брудному" читанню та не повторюваному читанню.
Однак існує одна проблема, яка все ще може виникати при такому типі ізоляції — фантомне читання.
Фантомне читання
Фантомні читання виникають, коли транзакція повторно виконує запит і знаходить різні набори рядків, які задовольняють початкову умову фільтрації запиту.
Наприклад, припустимо, що транзакція вибирає всі замовлення із загальною сумою понад $1000. Якщо інша транзакція вставить нове замовлення із сумою, що відповідає цій умові, між першим і другим виконанням запиту, перша транзакція побачить цей додатковий рядок під час другого виконання, що призведе до фантомного читання.
Фантомне читання може виникати, коли одна транзакція читає дані, а інша транзакція додає нові записи до бази даних. У результаті можна отримати різні результати для двох послідовних операцій читання.
Неповторюване читання vs фантомне читання
Неповторюване читання виникає, коли один і той самий запит, виконаний Користувачем A, повертає різні значення для одного й того ж рядка між послідовними читаннями, зазвичай через зміни, внесені Користувачем B.
Фантомне читання, навпаки, відбувається, коли той самий запит, виконаний Користувачем A, повертає різні набори рядків між послідовними читаннями, навіть якщо окремі рядки не були оновлені.
Ми можемо вказати цей рівень ізоляції у нашому SQL-запиті за допомогою наступної команди:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
Serializable
Рівень ізоляції Serializable — це найвищий рівень ізоляції в базах даних, що забезпечує найсуворіший контроль паралельності.
На цьому рівні транзакції виконуються так, ніби вони обробляються послідовно, одна за одною, навіть якщо насправді вони виконуються паралельно. Це гарантує, що результат транзакцій буде таким самим, як і при їх виконанні в певному послідовному порядку, підтримуючи цілісність і запобігаючи всім відомим аномаліям паралельності.
Note
Використання цього типу ізоляції може призвести до зниження продуктивності через збільшення блокувань.
Можна використати наступний вираз для встановлення цього рівня ізоляції у SQL-запиті:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
Дякуємо за ваш відгук!