Обмен технологиями

Блокировка базы данных

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Оглавление

1. Краткое описание блокировок базы данных

2. Краткое описание замка зазора.

3. Как в InnoDB реализованы блокировки на уровне строк

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

5. Кратко опишите решение проблемы тупиковой ситуации с базой данных.


1. Краткое описание блокировок базы данных

Блокировки — ключевая особенность, отличающая системы баз данных от файловых систем. Механизм блокировки используется для управления одновременным доступом к общим ресурсам. Давайте в качестве примера возьмем движок InnoDB базы данных MySQL, чтобы кратко представить характеристики блокировок.

Если транзакция T1 получила общую блокировку строки r, то другая транзакция T2 может немедленно получить общую блокировку строки r, поскольку чтение не меняет данные строки r. Такая ситуация называется совместимостью блокировок.Но если другая транзакция T3 хочет получить исключительную блокировку строки r, она должна дождаться, пока транзакции T1 и T2 снимут общую блокировку строки r. Эта ситуация называется.замок несовместим . На следующем рисунке показана совместимость общих и эксклюзивных блокировок. Можно обнаружить, что блокировка X несовместима ни с какой блокировкой, а блокировка S совместима только с блокировкой S. Важно отметить, что как блокировка S, так и блокировка X являются блокировками строк, а совместимость означает совместимость блокировок в одной и той же записи (строке).

ИксС
ИксНе совместимоНе совместимо
СНе совместимосовместимый

        Блокировка детализации : Механизм хранения InnoDB поддерживает блокировку с несколькими уровнями детализации, что позволяет транзакциям одновременно иметь блокировки на уровне строк и на уровне таблиц. Чтобы поддерживать операции блокировки с различной степенью детализации, механизм хранения InnoDB поддерживает дополнительный метод блокировки, называемый блокировкой намерения. Намеренные блокировки делят заблокированные объекты на несколько уровней. Это означает, что транзакции требуют более детальной блокировки.

Механизм хранения InnoDB поддерживает относительно простую конструкцию намеренных блокировок, а его намеренные блокировки представляют собой блокировки уровня таблицы. Основная цель разработки — выявить тип блокировки, запрошенной для следующей строки в транзакции. Он поддерживает два типа блокировок намерения:

1. Намеренная общая блокировка (IS Lock): транзакция хочет получить общие блокировки для определенных строк в таблице.

2. Намеренная монопольная блокировка (IX Lock). Транзакция хочет получить монопольную блокировку определенных строк в таблице.

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

ЯВЛЯЕТСЯIXСИкс
ЯВЛЯЕТСЯсовместимыйсовместимыйсовместимыйНе совместимо
IXсовместимыйсовместимыйНе совместимоНе совместимо
СсовместимыйНе совместимосовместимыйНе совместимо
ИксНе совместимоНе совместимоНе совместимоНе совместимо

        алгоритм блокировки: Механизм хранения InnoDB имеет три алгоритма блокировки строк:

1. Блокировка записи: блокировка записи одной строки.

2. Замок зазора: замок зазора, замок

3. Блокировка следующей клавиши: блокировка пробела + блокировка записи, блокировка диапазона и блокировка самой записи.

Блокировка записи всегда блокирует записи индекса. Если таблица механизма хранения InnoDB не настроена с каким-либо индексом при ее создании, то механизм хранения InnoDB будет использовать неявный первичный ключ для блокировки. Блокировка следующего ключа — это алгоритм блокировки, сочетающий в себе блокировку пробелов и блокировку записи. В рамках алгоритма блокировки следующего ключа InnoDB использует этот алгоритм блокировки для запросов строк. Технология блокировки с использованием Next-Key Lock называется Next-Key Locking, и ее конструкция не предназначена для решения фантомной проблемы (фантомного чтения). При использовании этой технологии блокировки блокируется не одно значение, а диапазон, что является усовершенствованием Predict Lock.

        О тупике : Тупик — это явление, когда две или более транзакций ожидают друг друга из-за конкуренции за ресурсы во время выполнения. Без внешней силы дело не сможет двигаться вперед.

        обновление замка :Эскалация блокировки означает уменьшение детализации текущей блокировки. Например, база данных может обновить 1000 блокировок строк таблицы до блокировки страниц или обновить блокировку страницы до блокировки таблицы.

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

2. Краткое описание замка зазора.

Механизм хранения InnoDB имеет три алгоритма блокировки строк, и блокировка пробелов (Gap Lock) — один из них. Блокировки пробелов используются для блокировки диапазона, но не самих записей. Его цель — предотвратить вставку записей в один и тот же диапазон несколькими транзакциями, что может привести к проблемам фантомного чтения.

3. Как в InnoDB реализованы блокировки на уровне строк

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

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

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

Тупик — это явление, при котором две или более транзакции ждут друг друга из-за конкуренции за ресурсы во время выполнения. Без внешней силы дело не сможет двигаться вперед.В следующей таблице показана классическая ситуация взаимоблокировки, то есть A ждет B, а B ждет A. Эта проблема взаимоблокировки называетсяАБ-БА тупик

времяСессия АСессия Б
1НАЧИНАТЬ:
2

mysql>ВЫБРАТЬ * ИЗ т

ГДЕ a = 1 ДЛЯ ОБНОВЛЕНИЯ;

***********1.строка***************

а:1

1 строка в наборе(0.00сек)

НАЧИНАТЬ:
3

mysql>ВЫБРАТЬ * ИЗ т

ГДЕ a = 2 ДЛЯ ОБНОВЛЕНИЯ;

***********1.строка***************

а:2

1 строка в наборе(0.00сек)

4

mysql>ВЫБРАТЬ * ИЗ т

ГДЕ a = 2 ДЛЯ ОБНОВЛЕНИЯ;

#ждать

5

mysql>ВЫБРАТЬ * ИЗ т

ГДЕ a = 1 ДЛЯ ОБНОВЛЕНИЯ;

ОШИБКА 1213(40001): При попытке получить блокировку обнаружена взаимоблокировка; попробуйте перезапустить транзакцию

5. Кратко опишите решение проблемы тупиковой ситуации с базой данных.

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

В дополнение к механизму тайм-аута современные базы данных также обычно используют метод графа ожидания (график ожидания) для обнаружения взаимоблокировок. Это более активный подход к обнаружению взаимоблокировок, чем решение по тайм-ауту. Этот подход также принят механизмом хранения InnoDB. График ожидания требует, чтобы база данных хранила следующие два типа информации:

1. Заблокировать список информации;

2. Лист ожидания транзакций;

Граф можно построить с помощью приведенного выше связанного списка, и если в этом графе есть цикл, это означает, что существует тупик, поэтому ресурсы ждут друг друга. Это более активный механизм обнаружения взаимоблокировок. Когда каждая транзакция запрашивает блокировку и ожидает, она определяет, существует ли цикл. Если он существует, то механизм хранения InnoDB решает откатить транзакцию. наименьшее количество отмены.