Шрифт:
Интервал:
Закладка:
3
Active owner (Активный владелец)
Смещение в группе владельца, представляющее владельца, который в настоящий момент управляет таблицей блокировок, если такой существует. Если ни один процесс не пишет в таблицу блокировок, то активным владельцем будет 0
4
Length (Длина)
Общий объем памяти, выделенный таблице блокировок в байтах
5
Used (Используется)
Наибольшая величина смещения в таблице блокировок, которая используется в настоящий момент. В таблице могут существовать свободные группы между ее началом и используемой точкой, если владельцы приходят и уходят. Перед созданием новых групп между этой точкой и концом таблицы блокировок могут быть заново использованы свободные блоки
6
Semmask (Маска семафора)
В системах, которые используют статичные семафоры (например, POSIX), это указатель на блок SMB, содержащий количество используемых семафоров. Когда нужен семафор, и ни один недоступен, Менеджер блокировок проходит через группы владельцев для поиска того владельца, имеющего неиспользуемый семафор. Если такого нет, система выдает сообщение об ошибке "Semaphores are exhausted" (Семафоры исчерпаны), означающее, что все скомпилированные в системе семафоры используются
7
Flags (Флаги)
Определены два битовых флага: LHB_shut_manager, который, если установлен, указывает, что база данных остановлена, и Менеджер блокировок не может обработать больше запросов; и LHB_lock ordering. В Firebird значение по умолчанию LHB_lock_ordering означает, что блокировки предоставляются в порядке запросов (порядок FIFO - первый пришел - первый ушел). Другая установка связана с устаревшей стратегией блокировки и сейчас не используется
8
Enqs (Запросы в очереди)
Запросы в очереди- полученные запросы на блокировку. Это число включает запросы, которые пока не могут быть удовлетворены, и запросы, которые могут быть удовлетворены немедленно, но не запросы, которые пришли и ушли
9
Converts (Преобразования)
Запросы на повышение уровня блокировки. Процесс, поддерживающий блокировку ресурса, запросит изменение режима, если изменяется его доступ к этому ресурсу. Преобразование происходит от блокировки низшего уровня (например, совместное чтение) к более ограничивающему уровню (например, исключительный доступ). Например, транзакция в режиме CONCURRENCY, которая читала данные таблицы, и решает изменить данные в этой таблице, будет преобразовывать свою блокировку от разделяемого чтения до разделяемой записи. Преобразования являются наиболее частыми для блокировок страниц, поскольку страница обычно вначале читается, а потом изменяется
10
Rejects (Отмены)
Запросы, которые не могут быть удовлетворены. Это могут быть блокировки, запрошенные в режиме "no wait", или это могут быть блокировки, которые были отменены, потому что приводили к взаимным блокировкам. Так как методы доступа иногда запрашивают блокировку "по wait" для внутренних структур, то вы увидите отмены, даже если все транзакции выполняются в режиме "wait" и не существует конфликтов между их операциями
11
Blocks(Блоки)
Запросы, которые не могут быть удовлетворены немедленно, потому что некоторый другой владелец имеет несовместимую блокировку на этот ресурс
12
Deadlock scans (Сканирование взаимных блокировок)
Сколько раз Менеджер блокировок просматривает цепочку блокировок и владельцев в процессе поиска взаимных блокировок. Менеджер блокировок начинает сканирование, когда процесс ожидает блокировки в течение 10 секунд
13
Deadlocks (Взаимные блокировки)
Количество найденных взаимных блокировок. См. разд. "Взаимные блокировки"
14
Scan interval (Интервал сканирования)
Количество секунд, которые ожидает Менеджер блокировок после начала запроса, прежде чем запустить сканирование взаимных блокировок. Значение по умолчанию 10 секунд
15
acquires(Запросы)
Количество раз, сколько владелец- или сервер от имени конкретного владельца - запрашивает исключительное управление для таблицы блокировок, чтобы выполнить изменения
16
Acquire blocks (Заблокированные запросы)
Количество раз, сколько владелец - или сервер от имени конкретного владельца - находился в состоянии ожидания при запросе исключительного управления таблицей блокировок
17
Spin count (Количество блокировок)
Это режим для ожидания взаимной блокировки и повторения запроса к таблице блокировок Firebird. По умолчанию установлено в ноль (отключено), но может быть сделано доступным в файле конфигурации
18
Mutex wait (Ожидание блокировок)
Процент попыток, которые были заблокированы, когда владелец старался обратиться к таблице блокировок - т.е. ((acquire blocks) / (acquires)) * 100
19
Hash slots (Сегменты хэша)
Ресурсы размещены в хэш-таблице. Они хранятся согласно значению. По умолчанию хэш-таблица содержит 101 сегмент. Это значение (которое должно быть простым числом) может быть увеличено в файле конфигурации. Оно никогда не должно быть меньше, чем 101
20
Hash lengths(Длина сегмента)
При каждом сегменте находятся ресурсы (заблокированные группы). Этот элемент сообщает минимальную, среднюю и максимальную длину цепочки заблокированных групп, находящихся в сегменте. Среднее значение, большее чем 15, означает, что не достаточно сегментов
21
Remove node (Удаление узла)
Для устранения проблем, которые являются следствием того, что активный владелец зависает при запросе к таблице блокировок с потенциально осуществленными ее изменениями, владелец сообщает о намерении удалить узел из этой таблицы. После успешного завершения операции владелец удаляет сообщение об удалении. Если любой другой владелец находит сообщение об удалении, которое он не создавал, он наводит порядок
22
Insert queue (Добавить очередь)
Эквивалент предыдущей схеме удаления узла, за исключением того, что здесь узел добавляется
23
Insert prior (Предыдущее добавление)
Для очистки ошибочного добавления необходимо знать не только, что было добавлено, но и где это размещалось. Это как раз где
24
Owners (Владельцы)
Количество владельцев, которые соединены с таблицей блокировок. Только один из этих владельцев может изменять таблицу в конкретный момент ("активный владелец"). Другие владельцы ожидают освобождения блокировок. В нашем примере существует четыре владельца, не являющихся активными. Два владельца подключены через isql; один может быть подключен через DSQL, а еще один - сама база данных
25
Free owners (Свободные владельцы)
Количество блоков владельцев, выделенных владельцам, которые завершили их соединения, оставив блоки неиспользованными. В этом случае, вероятно, существует две транзакции, занимавшиеся созданием базы данных, которые были подтверждены
26
Free locks (Свободные блокировки)
Группы блокировок определяют ресурс (база данных, отношение, транзакция и т.д.), который заблокирован, а не блок на ресурс. Этот элемент является количеством групп блокировок, которые были освобождены, но пока повторно не использованы. В этом случае существует один свободный блок. Когда владелец запрашивает блокировку на ресурс, который в настоящий момент не заблокирован, Менеджер блокировок сначала просматривает список свободных блоков в заголовке блока. Если существует группа с нужным размером ключа, то эта группа блока будет использована. Если нет, то в свободной памяти будет размещена новая группа блока
27
Free requests (Свободные запросы)
Группы запросов идентифицируют запросы на блокировки ресурсов, неважно, удовлетворенные или нет. Этот элемент является количеством групп запросов, которые были освобождены и не использованы повторно
28
Lock ordering (Порядок блокировок)
Порядок блокировок означает получение запросов на блокировку в порядке их поступления, даже если последующие запросы должны быть обслужены немедленно. Включено, если флаг LHB_lock_ordering (см. элемент 7) установлен, и является значением по умолчанию для Firebird, т. к. обеспечивает оптимальную производительность. Альтернативой является (не используется сейчас) предоставление блокировок всем владельцам, желающим совместно использовать и "подавлять" владельцев, которые имеют существующие запросы. Эта не используемая стратегия гарантирует, что участники будут обработаны быстро, однако с риском причинения вреда другим
Группы владельцевГруппы владельцев, изображенные на рис. 40.3, описывают транзакцию или другого пользователя в Менеджере блокировок. Владельцы делятся на несколько типов, идентифицируемых пятью числами:
- C++ - Страустрап Бьярн - Программирование
- Энциклопедия разработчика модулей ядра Linux - Ори Померанц - Программирование
- Программирование. Принципы и практика использования C++ Исправленное издание - Бьёрн Страуструп - Программирование