Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ
Шрифт:
Поскольку DbCache сконфигурирован в страницах, очевидно, что база данных с большим размером страницы потребляет больше памяти, чем база данных с меньшим размером страницы. Когда множество баз данных выполняется на одном и том же сервере, может оказаться желательным переопределить размер кэша на стороне сервера значением на уровне базы данных или в некоторых случаях на уровне приложения.
Приложение, которое интенсивно выполняет индексированные выборки, требует больше буферов, чем приложение, преимущественно выполняющее добавление данных.
Там, где много клиентов обращается к различным таблицам или к различным частям одной таблицы, потребность
Может случиться, что слишком много буферов кэша будет выделено из имеющейся RAM. При наличии большого количества одновременно выполняющихся баз данных запрос может затребовать больше RAM, чем доступно в системе. Кэш будет перекачиваться вперед и назад между RAM и диском, уничтожая преимущества кэширования. Другие приложения (включая сервер) будут испытывать недостаток в памяти, если кэш будет слишком велик.
Поэтому важно, чтобы в системе был установлен соответствующий объем RAM для обеспечения требований сервера баз данных к памяти. Если производительность базы данных важна для ваших пользователей, то исключите создание конкуренции за использование ресурсов со стороны других выполняющихся на сервере приложений.
Оценка размера кэша не является простой или точной наукой, особенно если у вас множество баз данных, выполняющихся одновременно. Использование сервером кэша определяется базой данных с наибольшим размером страниц. Классический сервер выделяет кэш для каждого соединения, в то время как Суперсервер объединяет кэш для всех соединений одной базы данных. Как отправная точка, это будет полезным для работы с числами и нужно для базы данных с наибольшим размером страницы. Реальные условия использования определят, где требуются корректировки.
Нет необходимости иметь кэш, вмещающий всю базу данных. Найдите коэффициент уменьшения для каждой базы данных, оценивая ту часть, к которой, скорее всего, будет доступ в процессе обычного использования. Совет по оценке простой - не существует "правила". Пусть, когда мы говорим о "DbCachePage", мы имеем в виду размер кэша, но не обязательно при условии установок сервера по умолчанию для новых и неконфигурированных баз данных.
Коэффициент уменьшения r должен иметь значение между 0 и 1.
Размер базы данных в страницах может быть установлен следующим образом:
* для однофайловой базы данных возьмите максимально возможный в файловой системе размер файла минус 1 байт и разделите на размер страницы. Для операционных систем, поддерживающих очень большие файлы, используйте фактический размер файла базы данных вместо максимального размера файла;
* для многофайловой базы данных возьмите значение STARTING AT первого вторичного файла и прибавьте значения LENGTH всех вторичных файлов.
Пусть DbCachePage равен количеству страниц кэша, требуемых для этой базы данных.
Для каждой базы данных вычислите:
DbCachePages = r * размер
Вычислите и запишите это число для каждой базы данных.
! ! !
СОВЕТ. Храните эти записи в другой документации по базе данных для использования, при необходимости, в настройке кэша индивидуальной базы данных.
. ! .
Для вычисления требуемого
объема RAM для кэша базы данных на вашем сервере возьмите значение PAGE SIZE для каждой базы данных и умножьте на значение DefaultDbCachePages. Просуммированные результаты для всех баз данных дадут приблизительные требования к минимальному объему RAM для кэширования баз данных.Установка размера кэша на уровне базы данных
Существует несколько способов конфигурирования размера кэша для конкретной базы данных. Изменения не действуют до тех пор, пока не будет установлено новое соединение с Суперсервером Firebird или не будет соединен новый клиент с Классическим сервером.
Рекомендуемый способ установки значения на уровне базы данных для перекрытия значения DefaultDbCachePages - использование утилиты командной строки gfix со следующими переключателями:
gfix -buffers n имя-базы-данных
где n- требуемое количество страниц базы данных. Этот способ позволяет точно задать размер кэша базы данных, уменьшая риск "недоиспользования" памяти или работы со слишком малым размером кэша, когда на сервере используются несколько баз данных с разными требованиями к размеру кэша. Установленный таким способом размер кэша будет использован до тех пор, пока не будет задано новое значение.
! ! !
ПРИМЕЧАНИЕ. Для запуска gfix вы должны быть пользователем SYSDBA или владельцем базы данных. Более подробную информацию об использовании gfix см. в главе 39.
. ! .
У вас есть две возможности для увеличения количества страниц кэша в процессе одной сессии утилиты командной строки isql.
Первый вариант- включить количество страниц (n) как переключатель при запуске isql:
isql -с n имя-базы-данных
где n- количество используемых в сессии страниц кэша, которое временно перекрывает любое значение, установленное В DefaultDbCachePages (database_cache_pages) или в gfix. Должно быть больше 9.
В качестве альтернативы вы можете включить CACHE n В качестве аргумента оператора CONNECT при выполняющейся isql:
isql > connect имя-базы-данных CACHE n
Значение n может быть любым положительным целым количеством страниц базы данных. Если кэш базы данных уже существует по причине другого соединения с базой данных, то размер кэша увеличивается, только если значение n больше текущего размера кэша.
В приложении размер кэша может быть установлен в буфере параметров базы данных (Database Parameter Buffer, DPB) с использованием параметра isc_dpb_num_buffers или isc_dpb_set_page_buf fers в соответствии с требованиями вашего сервера.
* isc_dpb_num_buffers - устанавливает количество буферов (страниц кэш-памяти), которое будет использоваться для текущего соединения. Это имеет особый смысл в архитектуре Классического сервера, где каждое соединение получает статически выделенную кэш-память. Для Суперсервера настоящий параметр установит количество буферов, используемых указанной базой данных, если эта база данных еще не открыта, однако это значение теряется после того, как сервер закрывает базу данных.