ГЛАВА 40. Менеджер блокировок.
ГЛАВА 40. Менеджер блокировок.
Блокировки используются в многопользовательских средах для синхронизации работы и предотвращения разрушения целостности процессов работой других процессов. Firebird использует как средства блокировки операционной системы, так и собственный менеджер блокировок для координации доступа к базе данных.
Эта тема сложна для читателя, который является новичком в Firebird. Она погружает его в некоторые серьезные технические области, с которыми знакомят гуру[158] с блестящими глазами на конференциях. Пока утилиты Lock Print - довольно сырые сейчас- являются серьезным инструментом для сложных задач поиска ошибок при подходах, которые некоторые разработчики применяют в их интерфейсах приложений. В любом случае примите эту главу как возможный запасной вариант, который может спасти вас в один "прекрасный" день.
Вы можете спросить, почему мы должны интересоваться системой блокировки, которая ничего не блокирует? Параллельность и согласованность, видимые клиентам, основываются на транзакциях и управляются через версии записей. Однако ответ в том, что Firebird использует блокировки внутренне. Он поддерживает согласованность структуры на диске через блокировки и осторожную запись. В то же время он также использует сервисы блокировок операционной системы для управления доступом к файлам базы данных для предотвращения открытия Суперсервером дважды одного и того же файла под разными именами.
Блокировка, основанная на транзакциях, позволяет осуществлять блокировки в любой точке выполнения транзакции. Однако, однажды установленные, они могут быть сняты только в конце. Даже явная блокировка на уровне оператора, введенная в Firebird 1.5, не имеет "разблокирующего" оператора. Операторы выполняются в обычной транзакции; подтверждение или откат транзакции снимает блокировку как обычно.
Firebird остерегается двухфазной блокировки для своего первичного управления параллельностью, поскольку она не может обеспечить адекватных уровней параллельности и соответствия, Firebird использует блокировки в процессе изменений для предотвращения записи двумя транзакциями на одну и ту же страницу в одно и то же время. Внутренняя блокировка управляется самой системой. Объекты в системе - называемые "владельцами блокировки" или просто "владельцами" - состязаются в блокировке множества ресурсов. Не удивительно, что эти ресурсы включают в себя и страницы, содержащие записи, отмеченные для обновления.
Когда транзакция получает блокировку страницы, она сохраняет эту блокировку, пока Менеджер блокировок не попросит ее освободить страницу; следовательно, транзакция может выполнить множество изменений на одной странице без ее освобождения и повторного чтения.
Менеджер блокировок Firebird
В Суперсервере о Менеджере блокировок можно думать как об отдельном "управляющем центре", с которым договариваются транзакции о приобретении прав на выполнение запросов. Менеджер блокировок включает в себя фрагмент памяти и некоторые подпрограммы для обработки запросов. Его память разделена на различные блоки: блоки блокировок, которые ссылаются на ресурсы; другие блоки, которые представляют транзакции и другие объекты, запрашивающие блокировки, и блоки истории. Его подпрограммы ответственны за получение и управление запросами владельцев на блокировки ресурсов, выделение блоков и их освобождение. Суперсервер также управляет "защелками" для координации изменений в параллельных транзакциях.
Классический сервер проще: владельцы запрашивают получение контроля над таблицей блокировок, так что каждый код процесса управления блокировкой может запрашивать, предоставлять и освобождать блокировки для их владельцев.
Состояния блока
Каждая операционная система предоставляет некий вид механизма использования/освобождения для синхронизации событий ресурсов. Поскольку для Firebird нужен управляющий механизм с множеством состояний, он реализует свою собственную систему управления блокировками с семью состояниями. На рис. 40.1 показано решение уровней блокировок.
* 0 - свободно (no lock).
* 1 - пустая блокировка (null lock), что соответствует интересу объекта, не накладывающего ограничений в использовании другими. Запрос пустой блокировки позволяет транзакции читать заблокированные данные.
* 2 - разделяемое чтение (shared read), что позволяет записывать. Разделяемое чтение является обычным режимом для блокировки таблицы, когда транзакция изменяет некоторые части таблицы.
* 3 - защищенное чтение (protected read), что позволяет другим читать, но не писать. Защищенное чтение является обычным режимом для блокировки страницы базы данных, которая находится в кэше и не была изменена.
Рис. 40.1. Состояния внутренних блокировок Firebird
* 4 - совместно используемая запись (shared write), другой обычный режим блокировки таблицы. Совместно используемая запись совместима с разделяемым чтением и другими совместно используемыми записями, но не с любым защищенным режимом.
* 5 - защищенная запись (protected write), которая допускает разделяемое чтение и пустую блокировку и ничего больше. Защищенная запись используется при режиме CONSISTENCY и для такой блокировки базы данных, что обычные пользователи не могут получить к ней доступ.
* 6 - исключительный доступ (exclusive), используется для внутренних структур, когда параллельный доступ может повлиять на изменения или привести к тому, что вторая транзакция будет читать незавершенные изменения данных.
Более 800 000 книг и аудиокниг! 📚
Получи 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>// сколь угодно сложные элементы внутренней базы данных// приложения; в
Глава 12 Файловый менеджер Nautilus
Глава 12 Файловый менеджер Nautilus Файловый менеджер это, пожалуй, самая главная программа в системе, поскольку она позволяет управлять данными на вашем компьютере. Открыть файловый менеджер в Ubuntu можно пройдя по любой ссылке из меню «Переход». Давайте зайдём в вашу домашнюю
Глава 19 Менеджер пакетов Synaptic
Глава 19 Менеджер пакетов Synaptic Менеджер пакетов Synaptic позволяет полностью управлять отдельными пакетами в системе. Основное его отличие от Центра приложений, кроме более богатого функционала, в том, что он работает на уровне пакетов, а не приложений. На всякий случай ещё
Глава 21 Менеджер обновлений
Глава 21 Менеджер обновлений Итак, я рассказал уже практически всё про управление программами и пакетами в Ubuntu, осталось только сказать пару слов про механизм обновлений. В принципе, тут всё просто и особенно-то и говорить нечего. Как вы уже знаете, каждый репозиторий
21.1 Менеджер обновлений
21.1 Менеджер обновлений Основным инструментом работы с обновлениями является, как ни странно, Менеджер обновлений. Найти его можно в меню Система?Администрирование. Собственно сам менеджер умеет выполнять только свои прямые обязанности, поэтому его интерфейс весьма
Контент-менеджер
Контент-менеджер В сфере Social Media Marketing (SMM) сегодня есть специалисты, которые нужны большим, средним и малым компаниям для продвижения в социальных сетях Это так называемые контент-менеджеры, одни из которых генерируют информацию, а другие ее продвигают (имеется в виду
Менеджер
Менеджер Роль менеджера заключается в техническом и административном руководстве и контроле над лицами, выполняющими задачи и действия внутри сферы ответственности менеджера. К традиционным функциям менеджера относятся планирование, распределение ресурсов,
Исключение конфликтов блокировок
Исключение конфликтов блокировок В приведенном выше фрагменте кода, как и в листинге 7.6, функция pthread_cond_signal вызывалась потоком, блокировавшим взаимное исключение, относящееся к условной переменной, для которой отправлялся сигнал. Мы можем представить себе, что в худшем
Глава 4. Тест-менеджер
Глава 4. Тест-менеджер Итак, мы выяснили, что в Google есть инженеры по тестированию и разработчики в тестировании, которые играют на стороне пользователей и разработчиков соответственно. А сейчас мы поговорим о третьей роли, которая связывает и координирует их работу. Речь
Способ разрешения блокировок ("Режим блокировок")
Способ разрешения блокировок ("Режим блокировок") Способ разрешения блокировок определяет поведение транзакции в случае, когда она пытается отправить изменение, которое конфликтует с изменением, уже отправленным другой транзакцией. Значениями являются WAIT и NOWAIT.WAITWAIT (по
Блокировки и конфликты блокировок
Блокировки и конфликты блокировок В Firebird блокировки управляются относительным возрастом транзакций, а записи управляются системой поддержки версий. Все блокировки применяются на уровне строки, за исключением тех случаев, когда транзакция оперирует на уровне изоляции
Менеджер блокировок Firebird
Менеджер блокировок Firebird В Суперсервере о Менеджере блокировок можно думать как об отдельном "управляющем центре", с которым договариваются транзакции о приобретении прав на выполнение запросов. Менеджер блокировок включает в себя фрагмент памяти и некоторые
Таблица блокировок
Таблица блокировок Менеджер блокировок управляет таблицей блокировок для координации совместного использования ресурсов в клиентских потоках. Информация, предоставляемая здесь, может быть полезной при попытках исправить ситуации взаимных блокировок, например;* все в