Выбрать главу

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

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

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

8

Argument (Аргумент)

Адрес чего-либо, что может понадобиться подпрограмме AST. В случае BDB это адрес структуры в процессе, которая описывает буфер.

В случае блокировок базы данных и теневой копии это адрес главной группы (DBB), которая описывает базу данных

Группа истории

Менеджер блокировок отслеживает действия ввода/вывода, которые он выполнял для каждого владельца. Самые последние действия выводятся в виде двух последних элементов отчета- истории (History) и событий (Events). На рис. 40.11 показана последовательность записей истории.

Рис. 40.11. Вывод записей истории

Владельцу 11 628 предоставлена блокировка на ресурс 11 744. Владелец 12 056 ставит в очередь запрос на тот же ресурс, запрашивая его в режиме NO WAIT. Блокировка у владельца 11 628 находится в несовместимом режиме, следовательно, этому запросу будет отказано (DENY). Владелец 12 056 опять приходит и ставит в очередь другой запрос, снова запрашивая блокировку, но уже в режиме WAIT. Менеджер блокировок отправляет сообщения владельцу 11 628 по поводу ресурса 11 744. Как было сказано, владелец находится в состоянии ожидания. Через 10 секунд владелец 12 056 все еще в состоянии ожидания, поэтому Менеджер блокировок запускает сканирование взаимных блокировок. Это не дает никаких результатов, и Менеджер блокировок опять отправляет сообщения владельцу 11 628 (POST, POST, POST). В конце концов владелец 11 628 снимает блокировку, и она предоставляется владельцу 12 056.

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

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

Интерактивная выборка

Интерактивные временные ряды деятельности по блокировкам генерируются, когда fb_iock_print выполняется с переключателем -i для измерения производительности Менеджера блокировок. Это моделирует UNIX-утилиту sar (System Activity Reporter, построитель отчетов системной деятельности). Отчет, показанный на рис. 40.13, выбирает каждые 4 секунды десять интервалов. Выборка на рис. 40.13 была сгенерирована в Классическом сервере Firebird при выполнении четырех локальных процессов с большим количеством конфликтов:

fb_lock_print -ia 4 10

fb_iock_print -ia "запрашивает" статистику:

1. acquire/s: среднее количество попыток в секунду обращений к таблице блокировок.

2. acqwait/s: среднее количество попыток, которым пришлось ожидать, в каждую секунду.

Рис. 40.13. Интерактивная выборка

3. %acqwait: процент попыток, которые были вынуждены ожидать.

4. acqrtry/s: среднее количество повторных обращений к таблице блокировок в секунду (в теории только для машин SMP).

5. rtrysuc/s: среднее количество успешных повторных попыток в секунду.

! ! !

СОВЕТ. В качестве подсказки, что означают столбцы в различных интерактивных отчетах, прочтите статью "Reading a Lock Print" Ann Harrison на http://www.ibphoenix.com.

. ! .

Установка конфигурации блокировки

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

Файлы конфигурации

Файлы конфигурации размещены в корневом каталоге Firebird. Для сервера Firebird 1.5 и более поздних файл конфигурации называется firebird.conf. Для версии 1.0.x он называется ibconfig в Windows и-isc config в POSIX. Используйте текстовый редактор для открытия и редактирования этого файла.

LockAcquireSpins

Версия 1.5 и выше, файл firebird.conf.

lock_acquire_spins

Версии, предшествующие Firebird 1.5, файл iscconfig/ibconfig.

Эта установка используется только для машин SMP при выполнении Классического сервера.

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

Требуется целое число. Значение по умолчанию 0 (безусловный). Не существует рекомендованного минимума или максимума.

LockHashSlots

Версия 1.5 и выше, файл firebird.conf.

lock_hash_slots

Версии, предшествующие Firebird 1.5, файл iscconfig/ibconfig.

Используйте этот параметр для настройки списка хэша блокировок. При повышенной нагрузке производительность может быть улучшена увеличением области памяти под хэш для распределения списка на более короткие цепи хэша. Значением является целое число. Рекомендуется использовать простое число. Значение по умолчанию 101.

Этот параметр и LockMemSize (см. следующий раздел) должны вычисляться одновременно с использованием инструмента Lock Print. Если цепи хэш блокировок более чем в среднем 20, значит объем памяти под хэш слишком мал. Если вам надо увеличить память под хэш, вам нужно увеличить размер таблицы блокировок на тот же процент.

LockMemSize

Версия 1.5 и выше, файл firebird.conf.

any_lock_mem_size

Версии, предшествующие Firebird 1.5, файл isc_config/ibconfig.

Этот целочисленный параметр представляет количество байтов для совместно используемой памяти для таблицы Менеджера блокировок. Для Классического сервера LockMemSize задает начальное распределение, которое будет динамически увеличиваться, пока не будет исчерпана память. ("Lock manager is out of room", "Исчерпана память для Менеджера блокировок" не означает, что можно отправляться пить кофе!) Значение этого параметра связано с размером кэша базы данных, поскольку каждая страница потребует отдельной блокировки в таблице. Если количество страниц базы данных в кэше установлено в большое значение, это может привести к проблемам памяти для таблицы блокировок.

В Суперсервере объем памяти, выделенный для Менеджера блокировок, не увеличивается.

Размером по умолчанию в Linux и в Solaris является 98 304 байта (96 Кбайт). В Windows это 262 144 (256 Кбайт).