Таблица блокировок

Таблица блокировок

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

* все в настоящий момент заблокировано в системе в своем состоянии;

* глобальная статистика заголовков, такая как размер таблицы блокировок, множество свободных блокировок, множество взаимных блокировок и т.д.;

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

Блокировки сохраняются в последовательностях, каждая последовательность идентифицируется номером в соответствии с типом блокируемого ресурса. Номера последовательностей объясняются в табл. 40.5.

Использование пустой блокировки

Запущенная транзакция использует таблицу блокировок в качестве доски объявлений. Чтобы исключить сборку мусора версий записей, которые нужны другой транзакции, каждая транзакция должна знать самое старое действие, которое видит другая транзакция. Вот как это сделано:

1. При старте транзакция сохраняет в области данных собственного блока идентификатор старейшей транзакции, которая еще выполняется (активна).

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

Новая транзакция проверяет блок каждой существующей транзакции для отыскания идентификатора старейшей транзакции, о которой знает каждая активная транзакция.

Свободные списки

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

Свободные элементы содержат прямые и обратные указатели на первый и последний свободный блок соответственно.

Взаимные блокировки

Взаимная блокировка (deadlock) возникает, когда владелец А хочет блокировать ресурс 1, который заблокирован владельцем В, а владелец В хочет заблокировать ресурс 2, который заблокирован процессом А. Она также может появиться для одного ресурса, если два владельца начинают с блокировки чтения и запрашивают блокировки на запись.

Эту ситуацию владельцы не могут разрешить без постороннего вмешательства. Решение осуществляется, когда взаимная блокировка определяется последующим сканированием и Менеджер блокировок возвращает ошибку одному владельцу или другому. Интервал сканирования блокировок по умолчанию - параметр DeadiockTimeout в файле конфигурации- составляет 10 секунд. Этот интервал не используется при условиях, где присутствует WAIT. Ожидание является нормальным в системе, которая управляет параллельными изменениями, и не требует затрат на сканирование.

"Взаимные блокировки", которые не являются взаимными блокировками

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

* Ошибки, возвращаемые как "конфликт блокировки" при запросах блокировки NO WAIT, не фиксируются в таблице блокировок как взаимные блокировки, потому что ожидает только один владелец.

* Ошибки, возвращаемые как "взаимные блокировки" с последующим сообщением "Update conflicts with concurrent update" (Конфликты обновлений при параллельном обновлении), также не являются настоящими взаимными блокировками. В этом случае произошло всего лишь то, что один владелец изменил (или удалил) строку и "пошел" дальше. Другой параллельный владелец попытался изменить (или удалить) ту же самую запись, ждал освобождения ее первым владельцем, а теперь получил ошибку, потому что последняя подтвержденная версия записи была изменена.

Таблица блокировок данных может быть выведена в более или менее читаемом формате с помощью утилиты Lock Print.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг:

3.1. Что такое таблица

Из книги автора

3.1. Что такое таблица Таблица состоит из ячеек, образующихся при пересечении строк и столбцов (рис. 3.2). Рис. 3.2. Пример стандартной таблицыРассмотрим элементы таблицы.• Ячейка – это основной элемент таблицы. Она формируется пересечением строки и столбца.• Строка – это


14.2.2.2. Установка и снятие блокировок

Из книги автора

14.2.2.2. Установка и снятие блокировок После заполнения структуры struct flock следующим шагом является запрос блокировки. Этот шаг осуществляется с помощью соответствующего значения аргумента cmd функции fcntl():F_GETLK   Узнать, можно ли установить блокировку.F_SETLK   Установить или


14.2.2.3. Предостережения по поводу блокировок

Из книги автора

14.2.2.3. Предостережения по поводу блокировок Имеется несколько предостережений, о которых нужно знать при блокировках файлов:• Как описано ранее, вспомогательная блокировка является именно этим. Не взаимодействующий процесс может делать все, что хочет, за спиной (так


Сравнение спин-блокировок и семафоров

Из книги автора

Сравнение спин-блокировок и семафоров Понимание того, когда использовать спин-блокировки, а когда семафоры является важным для написания оптимального кода. Однако во многих случаях выбирать очень просто. В контексте прерывания могут использоваться только


Использование блокировок чтения/записи

Из книги автора

Использование блокировок чтения/записи Построим приложение, использующее блокировку чтения/записи (файл sy10.cc):Эффективность блокировки чтения/записи#include <sys/syspage.h>#include <sys/neutrino.h>#include <list>// сколь угодно сложные элементы внутренней базы данных// приложения; в


3.3. Таблица Nat

Из книги автора

3.3. Таблица Nat Эта таблица используется для выполнения преобразований сетевых адресов NAT (Network Address Translation). Как уже упоминалось ранее, только первый пакет из потока проходит через цепочки этой таблицы, трансляция адресов или маскировка применяются ко всем последующим


Сводная таблица

Из книги автора

Сводная таблица 1. Таблица приоритетов: критические, важные и незначительные ошибки.2. Формат: фактор, статус, что делать, приоритет.По результатам аудита составляется


Таблица ссылок

Из книги автора

Таблица ссылок Это аналог списка литературы, но для юридических источников, прав и законов.Выделяете текст, помечаете его как ссылку, отмечаете, на что именно указывает эта ссылка: на закон, статью и т. д.А потом кнопкой Таблица ссылок  вы можете вставить в свой документ


Исключение конфликтов блокировок

Из книги автора

Исключение конфликтов блокировок В приведенном выше фрагменте кода, как и в листинге 7.6, функция pthread_cond_signal вызывалась потоком, блокировавшим взаимное исключение, относящееся к условной переменной, для которой отправлялся сигнал. Мы можем представить себе, что в худшем


Способ разрешения блокировок ("Режим блокировок")

Из книги автора

Способ разрешения блокировок ("Режим блокировок") Способ разрешения блокировок определяет поведение транзакции в случае, когда она пытается отправить изменение, которое конфликтует с изменением, уже отправленным другой транзакцией. Значениями являются WAIT и NOWAIT.WAITWAIT (по


Блокировки и конфликты блокировок

Из книги автора

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


ГЛАВА 40. Менеджер блокировок.

Из книги автора

ГЛАВА 40. Менеджер блокировок. Блокировки используются в многопользовательских средах для синхронизации работы и предотвращения разрушения целостности процессов работой других процессов. Firebird использует как средства блокировки операционной системы, так и собственный


Менеджер блокировок Firebird

Из книги автора

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


Таблица

Из книги автора

Таблица Чтобы создать таблицу можно воспользоваться главным меню Dremweaver, выбрав в нем Вставить | Таблица (Insert | Table). Опции Dreamweaver позволяют создавать таблицы любой сложности и структуры. Для примера мы продемонстрируем создание простой таблицы. Выберите цвет для таблицы по