Высокая загрузка памяти с 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/.

Другие вопросы по тегам