- Брудне читання : читайте незабруднені дані з іншої транзакції
- Читання, яке не повторюється : читайте ЗАРІБНІ дані з
UPDATE
запиту з іншої транзакції
- Phantom читає : читайте COMMITTED дані ззапиту
INSERT
абоDELETE
запиту з іншої транзакції
Примітка . УВІДКЛЮЧИТИ висловлювання з іншої транзакції, також є дуже низька ймовірність спричинити повторне читання у певних випадках. Це трапляється, коли оператор DELETE, на жаль, видаляє той самий рядок, який запитувала ваша поточна транзакція. Але це рідкісний випадок, і набагато навряд чи це трапиться в базі даних, яка має мільйони рядків у кожній таблиці. Таблиці, що містять дані транзакцій, зазвичай мають великий об'єм даних у будь-якому виробничому середовищі.
Також ми можемо зауважити, що ОНОВЛЕННЯ може бути більш частою роботою в більшості випадків використання, а не фактична ВСТАВКА або ВИДАЛЕННЯ (у таких випадках небезпека повторного читання залишається лише - фантомні читання неможливі в цих випадках). Ось чому ОНОВЛЕННЯ трактується по-різному від INSERT-DELETE, і отримана аномалія також називається по-різному.
Також є додаткові витрати на обробку, пов’язані з обробкою для INSERT-DELETE, а не просто обробкою UPDATES.
- READ_UNCOMMITTED нічого не перешкоджає. Це нульовий рівень ізоляції
- READ_COMMITTED запобігає лише одне, тобто брудне читання
- REPEATABLE_READ запобігає дві аномалії: брудні читання та неповторювані читання
- СЕРІАЛІЗАЛЬНІ запобігання всіх трьох аномалій: Брудне зчитування, Не повторюване читання та Фантомне зчитування
Тоді чому б просто не встановити транзакцію СЕРІАЛІЗАЦІЙНО в усі часи? Що ж, відповідь на вищезазначене питання така: СЕРІАЛІЗАЦІЙНА установка робить транзакції дуже повільними , чого ми знову не хочемо.
Насправді витрата часу на транзакцію здійснюється у такій швидкості:
SERIALIZABLE > REPEATABLE_READ > READ_COMMITTED > READ_UNCOMMITTED
Тож налаштування READ_UNCOMMITTED є найшвидшим .
Підсумок
Насправді нам потрібно проаналізувати випадок використання та визначити рівень ізоляції, щоб ми оптимізували час транзакції, а також запобігали більшості аномалій.
Зауважте, що бази даних за замовчуванням мають налаштування REPEATABLE_READ.