Loading AI tools
Из Википедии, свободной энциклопедии
Блокировка (англ. lock) в СУБД — отметка о захвате объекта транзакцией в ограниченный или исключительный доступ с целью предотвращения коллизий и поддержания целостности данных.
Эту страницу предлагается объединить со страницей Блокировка записи. |
По области действия блокировки классифицируются на строчные, гранулярные и предикатные. По строгости блокировки разделяются на совместные (англ. shared) и исключительные (эксклюзивные, англ. exclusive). По логике реализации блокировки делятся на оптимистические и пессимистические.
Строчная блокировка — действуют только на одну строку таблицы базы данных, не ограничивая манипуляции над другими строками таблицы.
Гранулярная блокировка — действует на всю таблицу или всю страницу и все строки. Блокировка, ограничивающая манипуляции со страницей данных в таблице (набор строк, объединённый признаком совместного хранения) иногда называется страничной (англ. page locking).
Предикатная блокировка действует на область, ограниченную предикатом. Обычно это блокировка по диапазону ключей. При такой блокировке для ключа или индекса указывается значение или диапазон значений, на которые распространяется блокировка. Такая блокировка (а также блокировка всей таблицы), помимо прочего, защищает от чтения фантомов и обеспечивает уровень изоляции транзакции Serializable.
Совместная блокировка накладывается транзакцией на объект в случае, если выполняемая ей операция безопасна, то есть не изменяет никаких данных и не имеет побочных эффектов. При этом, все транзакции могут выполнять операцию того же типа над объектом, если на него наложена совместная блокировка, обычно такая блокировка используется для операций чтения.
Исключительная блокировка накладывается транзакцией на объект в случае, если выполняемая ей операция изменяет данные. Только одна транзакция может выполнять подобную операцию над объектом, если на него наложена исключительная блокировка. Блокировка не может быть наложена на объект, если на него уже наложена совместная блокировка.
Пессимистическая блокировка накладывается перед предполагаемой модификацией данных на все строки, которые такая модификация предположительно затрагивает. Во время действия такой блокировки исключена модификация данных из сторонних сессий, данные из блокированных строк доступны согласно уровню изолированности транзакции. По завершении предполагаемой модификации гарантируется непротиворечивая запись результатов.
Оптимистическая блокировка не ограничивает модификацию обрабатываемых данных сторонними сессиями, однако перед началом предполагаемой модификации запрашивает значение некоторого выделенного атрибута каждой из строк данных (обычно используется наименование VERSION
и целочисленный тип с начальным значением 0). Перед записью модификаций в базу данных перепроверяется значение выделенного атрибута, и если оно изменилось, то транзакция откатывается или применяются различные схемы разрешения коллизий. Если значение выделенного атрибута не изменилось — производится фиксация модификаций с одновременным изменением значения выделенного атрибута (например, инкрементом) для сигнализации другим сессиям о том, что данные изменились.
В статье не хватает ссылок на источники (см. рекомендации по поиску). |
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.