Вычисление размера кэша
Вычисление размера кэша
Когда Firebird читает страницу базы данных с диска, он сохраняет эту страницу в кэше. Обычно размер кэша по умолчанию является достаточным. Если ваше приложение использует соединения из пяти и более таблиц, Firebird Суперсервер может автоматически увеличить размер кэша, если текущего размера недостаточно. Если ваше приложение хорошо локализовано (т. е. постоянно использует одну и ту же небольшую часть базы данных), вы можете увеличить размер кэша так, что серверу никогда не понадобится удалять какую-либо страницу из кэша для помещения туда другой.
Поскольку DbCache сконфигурирован в страницах, очевидно, что база данных с большим размером страницы потребляет больше памяти, чем база данных с меньшим размером страницы. Когда множество баз данных выполняется на одном и том же сервере, может оказаться желательным переопределить размер кэша на стороне сервера значением на уровне базы данных или в некоторых случаях на уровне приложения.
Приложение, которое интенсивно выполняет индексированные выборки, требует больше буферов, чем приложение, преимущественно выполняющее добавление данных.
Там, где много клиентов обращается к различным таблицам или к различным частям одной таблицы, потребность в памяти выше, чем в случае, когда большинство клиентов работает с одними и теми же или частично перекрывающимися наборами данных.
Может случиться, что слишком много буферов кэша будет выделено из имеющейся RAM. При наличии большого количества одновременно выполняющихся баз данных запрос может затребовать больше RAM, чем доступно в системе. Кэш будет перекачиваться вперед и назад между RAM и диском, уничтожая преимущества кэширования. Другие приложения (включая сервер) будут испытывать недостаток в памяти, если кэш будет слишком велик.
Поэтому важно, чтобы в системе был установлен соответствующий объем RAM для обеспечения требований сервера баз данных к памяти. Если производительность базы данных важна для ваших пользователей, то исключите создание конкуренции за использование ресурсов со стороны других выполняющихся на сервере приложений.
Оценка требований к размеру
Оценка размера кэша не является простой или точной наукой, особенно если у вас множество баз данных, выполняющихся одновременно. Использование сервером кэша определяется базой данных с наибольшим размером страниц. Классический сервер выделяет кэш для каждого соединения, в то время как Суперсервер объединяет кэш для всех соединений одной базы данных. Как отправная точка, это будет полезным для работы с числами и нужно для базы данных с наибольшим размером страницы. Реальные условия использования определят, где требуются корректировки.
Нет необходимости иметь кэш, вмещающий всю базу данных. Найдите коэффициент уменьшения для каждой базы данных, оценивая ту часть, к которой, скорее всего, будет доступ в процессе обычного использования. Совет по оценке простой - не существует "правила". Пусть, когда мы говорим о "DbCachePage", мы имеем в виду размер кэша, но не обязательно при условии установок сервера по умолчанию для новых и неконфигурированных баз данных.
Коэффициент уменьшения r должен иметь значение между 0 и 1.
Размер базы данных в страницах может быть установлен следующим образом:
* для однофайловой базы данных возьмите максимально возможный в файловой системе размер файла минус 1 байт и разделите на размер страницы. Для операционных систем, поддерживающих очень большие файлы, используйте фактический размер файла базы данных вместо максимального размера файла;
* для многофайловой базы данных возьмите значение STARTING AT первого вторичного файла и прибавьте значения LENGTH всех вторичных файлов.
Пусть DbCachePage равен количеству страниц кэша, требуемых для этой базы данных.
Для каждой базы данных вычислите:
DbCachePages = r * размер
Вычислите и запишите это число для каждой базы данных.
! ! !
СОВЕТ. Храните эти записи в другой документации по базе данных для использования, при необходимости, в настройке кэша индивидуальной базы данных.
. ! .
Вычисление потребностей в RAM
Для вычисления требуемого объема RAM для кэша базы данных на вашем сервере возьмите значение PAGE SIZE для каждой базы данных и умножьте на значение DefaultDbCachePages. Просуммированные результаты для всех баз данных дадут приблизительные требования к минимальному объему RAM для кэширования баз данных.