Выполнение транзакций, ориентированное на данные


Менеджер блокировок как источник конкуренции - часть 2


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

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

Рис. 3. Распределение времени внутри менеджера блокировок Shore-MT при выполнении тестового набора TPC-B и повышении уровня загрузки процессора.




- Начало -  - Назад -  - Вперед -