Мир InterBase

Показания к изменению параметра


Изменение размера таблицы блокировок может повлиять:

  • на размер кеша страниц базы данных. Каждая страница, помещаемая в кеш, блокируется по крайней мере один раз, а страницы, которые читаются несколькими клиентами, могут блокироваться несколько раз (этот пункт относится только к архитектуре Classic).
  • на число одновременных транзакций. Каждая транзакция имеет блокировку, которая ее идентифицирует. Блокировка используется для синхронизации транзакций, а также для того, чтобы распознать случаи, когда транзакция завершилась без подтверждения (commit) или отката (rollback).
  • на события. Механизм оповещения о событиях основывается на блокировках. Число событий и число клиентов, ожидающих эти события, влияют на размер таблицы блокировок.

  • Если в файле протокола InterBase InterBase.log вы видите сообщение об ошибке "semaphores are exhausted", то следует увеличить количество семафоров.




    Сигналы имеют тенденцию "зашумляться", потому что несколько разных служб ОС могут использовать один и тот же сигнал. InterBase спроектирован для работы с "зашумленными" сигналами. Когда он получает сигнал, то пересылает его другим процессам-обработчикам, которые обрабатывают этот сигнал, причем с InterBase ничего не случится, если он получит сигнал и не сумеет его обработать, т. е. InterBase устойчив к "случайным" сигналам-шумам.

    Может случиться так, что другой процесс в операционной системе использует тот же сигнал, что и InterBase. Тогда в случае, если этот процесс не сможет передать сигнал или аварийно завершиться при виде сигнала, который он не может обработать, то вы увидите, что либо InterBase-соединение "зависло", либо ошибки возникнут в другом процессе. В этом случае можно использовать параметр LOCK SIGNAL, чтобы выбрать другой сигнал.

    Для систем с ОС Windows нет никакой необходимости изменять этот параметр.






    Таблица увеличивается динамически, поэтому вроде бы нет причины для того, чтобы устанавливать этот параметр.




    Если вам кажется, что ваш InterBase сервер-работает слишком медленно и число страниц в кеше менее 10000, то увеличение размера кеша может улучшить производительность.




    Я несколько предубеждена против этого параметра, но если хотите попробовать, то вперед.




    Если у вас много памяти и локальных клиентов, то увеличение размеров области обмена (communications area) может улучшить производительность




    Установка минимального размера рабочей памяти может устранить некоторые затраты на постепенное разрастание памяти сервера, т. е. выделить столько памяти, чтобы серверу не пришлось больше ее увеличивать и тратить на это какие-тo усилия Установка максимального размера рабочей памяти может удержать сервер захватывания всей доступной памяти на системах с малым ее количеством. Не запускайте InterBase SuperServer на системах с малым количеством памяти.




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




    Первым признаком для изменения этого параметра должна быть общая низкая производительность системы с большим количеством пользователей и страниц в кеше Запустите инструмент iblockpr из директории %INTERBASE%\Bin для печати блокировок Если средняя длина более 10, увеличьте число этого параметра Для начала умножьте среднюю длину цепочек на число слотов и поделите на 9, а затем возьмите простое целое число, большее полученного значения (но меньшее 2048). Если вы производите подобную настройку на SuperServer, то необходимо также увеличить размер таблицы блокировок.




    Deadlock очень редко встречаются в InterBase Обычная ошибка deadlock, ошибка обновления (Update Conflict) не является тем deadlock, который обнаруживается менеджером блокировок. Представляет интерес запрограммировать действительный случай возникновения deadlock (когда А изменяет строк) 1, В изменяет строку 2, затем А пытается изменить строку 2, а В - строку 1, причем все это без подтверждения изменений - без commit), а затем поэкспериментировать с различными интервалами DEADLOCK_TIMEOUT, чтобы увидеть, как изменяется производительность.



    Содержание раздела