Краткий чек-лист по производительности базы данных Firebird
Windows
-
Установите энергосберегающий план «Высокая производительность» (+20% на Windows Server 2016+)?
-
Установите политику кэширования записи для дисков - включите кэширование записи.
-
В случае RAID проверьте, что установлен современный драйвер и RAID настроен правильно.
Linux
-
Установлено ли Max Open Files на 49999? Проверьте cat /proc/$(pgrep firebird)/limits, по умолчанию 4096, при необходимости увеличьте: задайте в файле службы Firebird параметр LimitNOFILE=49999.
-
Проверьте количество VMA cat /proc/sys/vm/max_map_count, по умолчанию 64K, должно быть 250K: добавьте в /etc/sysctl.conf строку vm.max_map_count=250000.
Конфигурация Firebird (рекомендации только для Firebird 3)
-
Убедитесь, что вы не используете значения DefaultDBCacheBuffers по умолчанию - они очень низкие (256 и 8K)! Установите 1024 для SuperClassic и 100K для SuperServer. Не используйте Classic в Firebird 3 - он медленный.
-
Убедитесь, что DefaultDBCacheBuffers не переопределён в заголовке базы данных: проверьте с помощью gstat -h database -> Page Buffers, должно быть 0. Установите 0 с помощью gfix -buffers 0.
-
Установите FileSystemCacheThreshold =100M, чтобы использовать файловый кэш ОС.
-
Для SuperServer выделите для DefaultDBCacheBuffers менее 30% ОЗУ. Если у вас много баз данных, посчитайте память для всех и используйте databases.conf для их отдельной настройки. Проверьте общее количество подключений и баз данных командой:
fbsvcmgr.exe localhost:service_mgr user sysdba password masterkey info_svr_db_info
-
Для SuperServer и SuperClassic установите TempCacheLimit на 25% ОЗУ, для Classic - 64M.
-
Установите LockMemSize=30M - это хорошее начальное значение, затем отслеживайте рост таблицы блокировок командой fblockprint -d databasename и при необходимости увеличьте LockMemSize.
-
Установите LockHashSlots=20011 - это хорошее начальное значение, отслеживайте Hash Lengths в lockprint.
База данных
-
Для баз данных > 50 ГБ используйте максимальный размер страницы: 16 КБ (по умолчанию 8 КБ), чтобы оптимизировать чтение IO и глубину индексов. Установите его при восстановлении с помощью переключателя “page”: gbak**-c -page 16384**.
-
Не используйте флаг no_reserve для баз данных, не предназначенных только для чтения. Удалите его с помощью **gfix -**use reserve.
-
Отслеживайте разницу между маркерами транзакций (OIT, OST, OAT, Next) из gstat -h.
-
Большое значение (OST-OIT) означает, что база данных, вероятно, содержит много мусорных версий и требует sweep. Запланируйте явный sweep на ночное время с помощью gfix -sweep.
-
Большое значение (Next-OAT) означает длительную активную записываемую транзакцию, которая блокирует сборку мусора. Проверьте таблицы MON$, чтобы узнать, какое приложение удерживает транзакцию открытой, и исправьте это.
5-минутный тест для оценки производительности Firebird
Используйте скрипт с открытым исходным кодом INSERT-UPDATE_DELETE: www.ib-aid.com/dbtest. В настоящее время самый быстрый протестированный сервер показал 18140 вставленных записей в секунду. Каков будет ваш результат?
Как улучшить производительность Firebird помимо этой простой настройки?
Попробуйте сервис оптимизации Firebird от IBSurgeon www.ib-aid.com/perf: мы знаем, как сделать ваш Firebird быстрее.