Вы действительно понимаете уровень изоляции базы данных? не понимаю, пожалуйста, заходите

база данных MySQL
Вы действительно понимаете уровень изоляции базы данных? не понимаю, пожалуйста, заходите

Ой, это снова уровень изоляции базы данных. Всех будет тошнить. В каждом интервью или техническом обмене, связанном с базой данных, всегда будет упоминаться уровень изоляции базы данных. Вы действительно понимаете, каждый уровень изоляции имеет Каковы характеристики и как мы выбираем подходящий уровень изоляции для вещей. (Эта статья предназначена только для ознакомления с базой данных MySQL)

1 Какую проблему решает уровень изоляции транзакций MySQL?

Уровень изоляции транзакций предназначен для решения проблемы параллелизма транзакций.

Проблема параллелизма транзакцийПо сути, это то же самое, что и при написании параллельных программ.вопросы безопасности потокованалогично, проблема безопасности потоков заключается в том, что несколько потоков изменяют переменную одновременно, еслине заблокирован, может появиться что-то вродеПерепроданность этого типа проблемы. Параллелизм транзакций означает, что несколько клиентских подключений изменяют запись в базе данных одновременно, и может возникнуть аналогичная проблема, и транзакция будет отброшена, что увеличивает сложность проблемы.

Мы резюмируем проблемы параллелизма вещей следующим образом:

  • Грязное чтение:Транзакция A читает данные, измененные транзакцией B, а затем транзакция B выполняет откат, после чего данные, прочитанные транзакцией A, являются грязными данными.
  • Неповторимое чтение:Транзакция A считывает одни и те же данные несколько раз, а транзакция B обновляет и фиксирует данные во время многократного чтения транзакции A, что приводит к несогласованности данных, считанных транзакцией A несколько раз.
  • Фантомное чтение:Вещь А изменяет все данные в базе данных в другую форму, но Вещь Б в это время вставляет новый фрагмент данных Это называется фантомным чтением.

Суммировать:

Неповторяющиеся чтения и фантомные чтения легко спутать.Неповторяющиеся чтения фокусируются на модификации, а фантомные чтения фокусируются на добавлениях или удалениях.

Чтобы решить проблему неповторяющегося чтения, вам нужно заблокировать только те строки, которые удовлетворяют условиям, а чтобы решить проблему фантомного чтения, вам нужно заблокировать всю таблицу.

2 Какие существуют уровни изоляции в MySQL?

Стандарт SQL определяет четыре уровня изоляции,

Основываясь на проблеме параллелизма апелляций, MySQL предоставляет нам несколько решений, которые заключаются в следующем (√ Если вы выберете, будут проблемы)

Уровень изоляции транзакции грязное чтение неповторяемое чтение галлюцинации
незафиксированное чтение
чтение-фиксация
повторяемое чтениедефолт (√)
сериализуемый

Каждый уровень изоляции фактически является уровнем блокировки: если какая-либо проблема будет проигнорирована, она не будет заблокирована, а если какая-либо проблема будет решена, параллельное выполнение будет преобразовано в последовательное выполнение.

По мере того, как степень блокировки становится все сильнее и сильнее, одновременная производительность базы данных становится все слабее и слабее.

3 Какие блокировки добавляются к каждому уровню изоляции MySQL?

  • Чтение незафиксированного (отличная производительность, много проблем)

    Ситуация блокировки:

    • Транзакции не блокируют данные при чтении данных.
    • Транзакции добавляют к данным только общие блокировки на уровне строк при изменении данных.
  • Читайте преданные (уровень изоляции часто используется в Интернете, отличная производительность)

    Читайте преданные на самом деле для вещей,Не читайте незафиксированные вещи, чтобы не происходило грязных чтений.

    Уровень изоляции зафиксированной транзакции чтения:Область изоляции транзакций по умолчанию для большинства популярных баз данных, таких как Oracle, но не область изоляции по умолчанию MySQL.

    Ситуация блокировки:Добавит только блокировку записи в индекс

    • Текущие делабыть прочитаннымданные плюсобщая блокировка на уровне строки(Блокируется при чтении), как только строка будет прочитана, общая блокировка на уровне строки немедленно снимается;
    • В момент, когда транзакция обновляет данные (то есть момент, когда происходит обновление), она должна сначала добавитьэксклюзивная блокировка на уровне строкиДо конца транзакции не было освобождено.
  • повторяемое чтение

    Повторяющееся чтение блокирует считанные данные, чтобы гарантировать, что считанные данные непротиворечивы в рамках транзакции.

    MySQL добавляет Gap Lock и Next-Key Lock (которые можно установить через файлы конфигурации) для решения проблемы фантомного чтения;

    Ситуация блокировки:Чтобы решить проблему фантомного чтения, при поддержке Record Lock он также поддерживает Gap Lock и Next-Key Lock;

    • В момент, когда транзакция читает определенные данные (то есть момент, когда она начинает читать), добавляемобщая блокировка на уровне строкиДо конца транзакции не будет освобожден;
    • В момент, когда транзакция обновляет определенные данные (то есть момент, когда происходит обновление), добавляемэксклюзивная блокировка на уровне строки, который не освобождается до конца транзакции.
  • сериализовать

    Непосредственное изменение параллельного на последовательное эквивалентно выполнению задач в одном потоке с крайне низкой производительностью и обычно не используется.

    Ситуация блокировки:

    • Когда вы читаете данные, вы должны сначала добавить их.общая блокировка на уровне таблицы, который не освобождается до конца транзакции;
    • Когда транзакция обновляет данные, она должна сначала добавитьмонопольная блокировка на уровне таблицы, который не освобождается до конца транзакции.

Рекомендуется предварительно написано два поста в блоге:

Если вы не понимаете концепцию блокировок MySQL, вы можете прочитать "Введение в блокировку MYSQL".

Чтобы оптимизировать производительность блокировки, MySQL использует многоверсионный контроль MVCC. Если вы не понимаете, вы можете прочитать "Вы знаете, как реализован MVCC в MySQL?".

4 Резюме

Уровень изоляции заключается в том, что база данных предоставляет нам право выбора.Что касается производительности и точности данных, мы идем на компромиссы в зависимости от бизнеса.

Для MySQL движок InnonDB будет иметь заявление об уровне изоляции вещей и вещей.