Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Ізоляція. Рівні Повторюваного Читання та Серіалізованості | Acid
Просунуті Техніки в SQL

bookІзоляція. Рівні Повторюваного Читання та Серіалізованості

Repeatable Read

Рівень ізоляції Repeatable Read у базах даних гарантує, що після початку транзакції ви бачите знімок бази даних, який залишається незмінним протягом усього виконання вашого завдання.
Це означає, що навіть якщо інші зміни відбуваються у базі даних під час вашої роботи, ви бачитимете лише ті дані, які були на момент початку транзакції.
Транзакції з ізоляцією Repeatable Read утримують блокування на читання для всіх рядків, до яких звертаються, та блокування на запис для рядків, які вони вставляють, оновлюють або видаляють. Це запобігає втраченим оновленням, брудному читанню та не повторюваному читанню.
Однак існує одна проблема, яка все ще може виникати при такому типі ізоляції — фантомне читання.

Фантомне читання

Фантомне читання може виникнути, коли одна транзакція читає дані, а інша транзакція додає нові записи до бази даних. У результаті ми можемо отримати різні набори результатів для двох послідовних операцій читання.

Неповторюване читання vs фантомне читання

Неповторюване читання виникає, коли один і той самий запит, виконаний Користувачем A, повертає різні значення для одного й того ж рядка між послідовними читаннями, зазвичай через зміни, внесені Користувачем B.

Фантомне читання, навпаки, виникає, коли один і той самий запит, виконаний Користувачем A, повертає різні набори рядків між послідовними читаннями, навіть якщо окремі рядки не були змінені.

Ми можемо вказати цей рівень ізоляції у нашому SQL-запиті за допомогою наступної команди:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;

Serializable

Рівень ізоляції Serializable є найвищим рівнем ізоляції у базах даних, забезпечуючи найсуворіший контроль паралельності.
На цьому рівні транзакції виконуються так, ніби вони обробляються послідовно, одна за одною, навіть якщо фактично виконуються одночасно. Це гарантує, що результат транзакцій буде таким самим, якби вони виконувалися у певному послідовному порядку, підтримуючи узгодженість та запобігаючи всім відомим аномаліям паралельності.

Note

Використання цього типу ізоляції може призвести до зниження продуктивності через збільшення блокувань.

Ми можемо використати наступний вираз, щоб встановити цей рівень ізоляції у нашому SQL-запиті:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

question-icon

Відповідність рівнів ізоляції їхнім описам.

Read Uncommitted:
Read Committed:

Repeatable Read:

Serializable:

Натисніть або перетягніть елементи та заповніть пропуски

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 1. Розділ 7

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Awesome!

Completion rate improved to 4.35

bookІзоляція. Рівні Повторюваного Читання та Серіалізованості

Свайпніть щоб показати меню

Repeatable Read

Рівень ізоляції Repeatable Read у базах даних гарантує, що після початку транзакції ви бачите знімок бази даних, який залишається незмінним протягом усього виконання вашого завдання.
Це означає, що навіть якщо інші зміни відбуваються у базі даних під час вашої роботи, ви бачитимете лише ті дані, які були на момент початку транзакції.
Транзакції з ізоляцією Repeatable Read утримують блокування на читання для всіх рядків, до яких звертаються, та блокування на запис для рядків, які вони вставляють, оновлюють або видаляють. Це запобігає втраченим оновленням, брудному читанню та не повторюваному читанню.
Однак існує одна проблема, яка все ще може виникати при такому типі ізоляції — фантомне читання.

Фантомне читання

Фантомне читання може виникнути, коли одна транзакція читає дані, а інша транзакція додає нові записи до бази даних. У результаті ми можемо отримати різні набори результатів для двох послідовних операцій читання.

Неповторюване читання vs фантомне читання

Неповторюване читання виникає, коли один і той самий запит, виконаний Користувачем A, повертає різні значення для одного й того ж рядка між послідовними читаннями, зазвичай через зміни, внесені Користувачем B.

Фантомне читання, навпаки, виникає, коли один і той самий запит, виконаний Користувачем A, повертає різні набори рядків між послідовними читаннями, навіть якщо окремі рядки не були змінені.

Ми можемо вказати цей рівень ізоляції у нашому SQL-запиті за допомогою наступної команди:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;

Serializable

Рівень ізоляції Serializable є найвищим рівнем ізоляції у базах даних, забезпечуючи найсуворіший контроль паралельності.
На цьому рівні транзакції виконуються так, ніби вони обробляються послідовно, одна за одною, навіть якщо фактично виконуються одночасно. Це гарантує, що результат транзакцій буде таким самим, якби вони виконувалися у певному послідовному порядку, підтримуючи узгодженість та запобігаючи всім відомим аномаліям паралельності.

Note

Використання цього типу ізоляції може призвести до зниження продуктивності через збільшення блокувань.

Ми можемо використати наступний вираз, щоб встановити цей рівень ізоляції у нашому SQL-запиті:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

question-icon

Відповідність рівнів ізоляції їхнім описам.

Read Uncommitted:
Read Committed:

Repeatable Read:

Serializable:

Натисніть або перетягніть елементи та заповніть пропуски

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 1. Розділ 7
some-alt