Назад | Перейти на главную страницу

Высокое использование памяти с помощью firebird + windows server 2008 r2

У меня есть Windows Server 2008 R2 (64-разрядная версия) с 64-разрядной установкой Firebird 2.1.4.18393_0 на физическом сервере 4 ГБ.

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

Используя RAMMAP, я вижу, что весь мой файл базы данных отображается в памяти. Это происходит только в windows server 2008 r2 и windows 7 64 bit. Я могу использовать 32- или 64-битные установки Firebird, не имеет значения.

Как я могу предотвратить это? Почему это происходит только в w2k8r2 и w7?

спасибо заранее

** ОБНОВИТЬ

По сути, это происходит из-за использования всей памяти кешем файловой системы. В документации Microsoft объясняется, что это БЫЛА проблема в Windows xp, 2k3, vista и 2k8, но она была решена в 7 и 2k8r2. также добавляет, что эта проблема чаще встречается на 64-битных хостах. (http://support.microsoft.com/kb/976618)

есть некоторые инструменты (DynCache, setcache и системные вызовы Get / SetSystemFileCacheSize из Windows API), которые позволяют мне исправить верхний предел использования памяти fscache, но в документации утверждается, что я не должен делать этого в w2k8r2, потому что это будет серьезно влияют на общую производительность системы. во всяком случае, я попробовал, производительность осталась прежней, а использование файла подкачки осталось, хотя теперь 1 ГБ свободной памяти больше.

Вот обновление по проблеме (надеюсь, полезно):

http://dyemanov.blogspot.com.br/2012/03/firebird-vs-windows-file-system-caching.html

Таким образом, единственное эффективное решение - отключить запрос произвольного доступа (т.е. удалить флаг FILE_FLAG_RANDOM_ACCESS) из вызовов Windows API, используемых для создания / открытия файлов. Более того, в этом случае ограничение на размер кеша файловой системы больше не должно быть актуальным, поскольку Windows не будет расширять кеш за разумные границы.

...

это решение внедрено в ветки Firebird 2.1.5, Firebird 2.5.2 и Firebird 3.0.

Что ж, проблема все-таки решена. это было немного настройки windows и немного настройки firebird.

На стороне Windows setcache действительно помогал контролировать размер кеша файловой системы, даже несмотря на то, что Microsoft заявляла, что мне это не понадобится. Я только что добавил задачу расписания для запуска при каждой загрузке.

но даже после снижения использования памяти моя база данных firebird все еще использовала 12,5% моего двухъядерного четырехъядерного процессора: 100% одного ядра, а производительность была ужасной (30 секунд для выбора всех кортежей из таблицы всего с 10 кортежами ).

после некоторого мониторинга с помощью sinática (www.sinatica.com) я понял, что моя база данных быстро растет. поэтому я отключил автоматическую очистку и добавил еще одну задачу расписания, чтобы выполнять очистку на двухдневной основе.

Эту проблему можно решить с помощью инструмента Microsoft DynCache. Этот обходной путь применим, если вы не можете изменить сервер FireBird на версию, в которой нет ошибки кеширования, например, при использовании программного обеспечения, для которого требуется прекращенная версия, или подобное.

Поскольку DynCache довольно сложно приобрести и правильно настроить, см. Инструкции по его использованию здесь: http://sqlblogcasts.com/blogs/grumpyolddba/archive/2009/03/18/x64-memory-problems.aspx

Похоже, это поможет вам двигаться в правильном направлении - http://www.firebirdfaq.org/faq333/.