Высокая загрузка памяти с 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 бит. я могу использовать Firebird 32 или 64-битные установки, не имеет значения.
Как я могу предотвратить это? Почему это происходит только в 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 ГБ свободной памяти.
4 ответа
Ну, проблема решена, в конце концов. это было немного настройки окон и немного настройки жар-птицы.
Что касается окон, setcache действительно справился с задачей контроля размера кэша файловой системы, даже если Microsoft заявляет, что мне это не понадобится. Я только что добавил расписание задачи для запуска при каждой загрузке.
но даже после снижения использования памяти моя база данных Firebird все еще использовала 12,5% моего двухъядерного блока: 100% одного ядра, а производительность была ужасной (30 с, чтобы выбрать все кортежи из таблицы с 10 кортежами)).
после некоторого мониторинга с помощью sinática (www.sinatica.com) я понял, что моя база данных быстро расширяется. поэтому я отключил автоматическую развертку и добавил еще одну задачу по расписанию для выполнения разверток на 2 дня.
Вот обновление по проблеме (надеюсь, полезно):
http://dyemanov.blogspot.com.br/2012/03/firebird-vs-windows-file-system-caching.html
Таким образом, единственным эффективным решением, по-видимому, является отключение запроса произвольного доступа (т.е. удаление флага FILE_FLAG_RANDOM_ACCESS) из вызовов API Windows, используемых для создания / открытия файлов. Более того, в этом случае ограничение размера кэша файловой системы больше не должно быть актуальным, так как Windows не будет расширять кэш за разумные границы.
...
Это решение было добавлено в ветки Firebird 2.1.5, Firebird 2.5.2 и Firebird 3.0.
Эту проблему можно устранить с помощью инструмента Microsoft DynCache. Этот обходной путь применим, если вы не можете изменить сервер FireBird на версию, в которой нет ошибки кэша, например, при использовании программного обеспечения, для которого требуется более ранняя версия, или чего-то подобного.
Поскольку DynCache довольно сложно приобрести и правильно настроить, ознакомьтесь с инструкциями по его использованию здесь: http://sqlblogcasts.com/blogs/grumpyolddba/archive/2009/03/18/x64-memory-problems.aspx
Похоже, это направит вас в правильном направлении - http://www.firebirdfaq.org/faq333/.