Мир InterBase. Архитектура, администрирование и разработка приложений баз данных в InterBase/FireBird/Yaffil
Шрифт:
Объяснение
На Windows-системах (и только Windows) клиент, запущенный на той же машине, что и сервер, может устанавливать соединение с сервером через область разделяемой памяти, а не через TCP/IP. Используйте этот параметр для управления размером этой области.
Память выделяется блоками по 1024 байта. Приемлемый диапазон значений лежит между 1-м и 16-м однокилобайтовым блоком, т. е. значение этого параметра может быть одним из следующих: 1024, 2048, 3072, 4096, 5120, 6144, 7165 8192.9216. 10240, 11264,12288, 13312, 14336, 15360 или 16384.
Показания к изменению параметра
Если у вас много памяти и локальных клиентов, то увеличение размеров области обмена (communications area) может улучшить производительность
SERVER WORKING SIZE
Параметры
SERVER_WORKING_SIZE_MIN 0
SERVER_WORKING_SIZE_MAX 0
Действие
Этот параметр устанавливает ограничения размера рабочей физической памяти (working size), доступно SuperServer на платформе Windows/NT/2000. Параметр измеряется в однокилобайтовых блоках. По умолчанию оба параметра имеют значение 0, что означает "нет ограничений".
Объяснение
Ограничивая максимальный размер рабочей памяти, можно заставить InterBase "упасть замертво" раньше времени из-за недостатка памяти. Увеличивая минимальный размер рабочей памяти, вы можете заставить InterBase "захватывать" память тогда, когда она ему не нужна.
Показания к изменению параметра
Установка минимального размера рабочей памяти может устранить некоторые затраты на постепенное разрастание памяти сервера, т. е. выделить столько памяти, чтобы серверу не пришлось больше ее увеличивать и тратить на это какие-тo усилия Установка максимального размера рабочей памяти может удержать сервер захватывания всей доступной памяти на системах с малым ее количеством. Не запускайте InterBase SuperServer на системах с малым количеством памяти.
LOCK GRANT ORDER
Параметры в ibconfig
V4_LOCK_GRANT_ORDER 1
Действие
Устанавливает состояние блокировки 1 - "Истина", включает сортировку блокировок; 0 - "Ложь", и выключает режим сортировки блокировок. По умолчанию сортировка блокировок выключена.
Объяснение
Сортировка блокировок достаточно проста, необходимо только узнать немного больше о блокировках. Когда соединение (клиент) запрашивает блокировку на объект, оно указывает в запросе определенный уровень блокировки. Типы блокировок приведены в следующей таблице:
Идентификатор типа блокировки | Английское наименование | Русский перевод наименования блокировки |
#define LCK_none 0 | Отсутствие блокировок | |
#define LCK_null 1 | Existence | Блокировка существования объекта |
#define LCK_SR 2 | Shared Read | Совместное чтение |
#define LCK_PR 3 | Protected Read | Защищенное Чтение |
#defme LCK_SW 4 | Shared Write | Совместная запись |
#define LCK_PW 5 | Protected Write | Защищенная запись |
#define LCK_EX 6 | Exclusive | Эксклюзивная блокировка |
Блокировка типа LCK_none на самом деле представляет собой запрос на снятие существующей блокировки. Блокировка LCK_null - это блокировка существования, которая налагается клиентским соединением. Для этого соединения важно лишь, чтобы заблокированный объект существовал.
Этот тип блокировки используется для того, чтобы гарантировать существование индексов, пока существуют скомпилированные запросы, которые зависят от этих индексов. Взаимодействие уровней блокировки описывается в следующей таблице совместимости блокировок (здесь 1 означает, что данные блокировки совместимы, 0 - несовместимы):
none | null | Shared Read | Protected Read | Shared Write | Protected Write | Exclusive | |
попе | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
null | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
SR | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
PR | 1 | 1 | 1 | 1 | 0 | 0 | 0 |
SW | 1 | 1 | 1 | 0 | 1 | 0 | 0 |
PW | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
EX | 1 | 1 | 0 | 0 | 0 | 0 | 0 |
Когда
Обычно если объект, который какое-то соединение желает заблокировать, уже блокирован другим соединением, то выстраивается очередь доступа, причем соединения, которые желают получить уровень блокировок ниже, чем тот, что уже наложен на объект, продвигаются вперед очереди. То есть если объект был заблокирован с уровнем Protected Read, то следующие соединения, которые запрашивают на этот объект блокировку Protected Read или ниже, передвинутся в начало очереди (точнее, пройдут без очереди), а соединения, которые запрашивают блокировки уровнем выше (например, Shared Write), будут "топтаться" в очереди. Если загрузка базы данных очень велика, такое поведение может привести к тому, что соединения, которые требуют высоких уровней блокировок, могут ждать неопределенно долго, потому что новые читающие соединения (которые запрашивают низкие уровни блокировки) будут постоянно прибывать и "лезть без очереди".
Показания к изменению параметра
Если ваши операции по записи данных имеют более низкий приоритет по сравнению с операциями чтения, включение сортировки блокировки улучшит производительность чтения, особенно в течение длинных читающих транзакций. Но необходимо помнить, что даже только читающие транзакции изменяют базу данных.
– по крайней мере они записывают информацию о состоянии своих транзакций.
LOCK HASH SLOTS
Параметр lock hash slots был удален из конфигурационного файла InteiBaseGx. no крайней мере в SuperSener под NT Однако исходный KOI д 1я того, чтобы прочитать и интерпретировать этот параметр, все еще существует.
Параметры в ibconfig
LOCK_HASH_SLOTS 101
Действие
Этот параметр определяет ширину хэш-таблицы, которая используется для поиска блокировок. По умолчанию значение этого параметра 101. Число должно быть простым, чтобы хэш-алгоритм производил хорошее распределение.
Он может быть в диапазоне от 101 до 2048
Объяснение
Представьте себе, что хэш-таблица - это одномерный массив с цепочками, которые "свисают" из каждой ячейки этого массива. Менеджер блокировок кэширует имя объекта и затем вычисляет остаток от целочисленного деления этой величины на число хэш-слотов в массиве, таким образом он определяет ячейку, на которую надо "подвесить" блокировку данного объекта.