Эта страница переведена машинным переводом. Читайте английский оригинал. English

Библиотека IBSurgeon

Краткий чек-лист по производительности базы данных Firebird

Windows

  1. Установите энергосберегающий план «Высокая производительность» (+20% на Windows Server 2016+)?

  2. Установите политику кэширования записи для дисков - включите кэширование записи.

  3. В случае RAID проверьте, что установлен современный драйвер и RAID настроен правильно.

Linux

  1. Установлено ли Max Open Files на 49999? Проверьте cat /proc/$(pgrep firebird)/limits, по умолчанию 4096, при необходимости увеличьте: задайте в файле службы Firebird параметр LimitNOFILE=49999.

  2. Проверьте количество VMA cat /proc/sys/vm/max_map_count, по умолчанию 64K, должно быть 250K: добавьте в /etc/sysctl.conf строку vm.max_map_count=250000.

Конфигурация Firebird (рекомендации только для Firebird 3)

  1. Убедитесь, что вы не используете значения DefaultDBCacheBuffers по умолчанию - они очень низкие (256 и 8K)! Установите 1024 для SuperClassic и 100K для SuperServer. Не используйте Classic в Firebird 3 - он медленный.

  2. Убедитесь, что DefaultDBCacheBuffers не переопределён в заголовке базы данных: проверьте с помощью gstat -h database -> Page Buffers, должно быть 0. Установите 0 с помощью gfix -buffers 0.

  3. Установите FileSystemCacheThreshold =100M, чтобы использовать файловый кэш ОС.

  4. Для SuperServer выделите для DefaultDBCacheBuffers менее 30% ОЗУ. Если у вас много баз данных, посчитайте память для всех и используйте databases.conf для их отдельной настройки. Проверьте общее количество подключений и баз данных командой:

fbsvcmgr.exe localhost:service_mgr user sysdba password masterkey info_svr_db_info

  1. Для SuperServer и SuperClassic установите TempCacheLimit на 25% ОЗУ, для Classic - 64M.

  2. Установите LockMemSize=30M - это хорошее начальное значение, затем отслеживайте рост таблицы блокировок командой fblockprint -d databasename и при необходимости увеличьте LockMemSize.

  3. Установите LockHashSlots=20011 - это хорошее начальное значение, отслеживайте Hash Lengths в lockprint.

База данных

  1. Для баз данных > 50 ГБ используйте максимальный размер страницы: 16 КБ (по умолчанию 8 КБ), чтобы оптимизировать чтение IO и глубину индексов. Установите его при восстановлении с помощью переключателя “page”: gbak**-c -page 16384**.

  2. Не используйте флаг no_reserve для баз данных, не предназначенных только для чтения. Удалите его с помощью **gfix -**use reserve.

  3. Отслеживайте разницу между маркерами транзакций (OIT, OST, OAT, Next) из gstat -h.

  4. Большое значение (OST-OIT) означает, что база данных, вероятно, содержит много мусорных версий и требует sweep. Запланируйте явный sweep на ночное время с помощью gfix -sweep.

  5. Большое значение (Next-OAT) означает длительную активную записываемую транзакцию, которая блокирует сборку мусора. Проверьте таблицы MON$, чтобы узнать, какое приложение удерживает транзакцию открытой, и исправьте это.

5-минутный тест для оценки производительности Firebird

Используйте скрипт с открытым исходным кодом INSERT-UPDATE_DELETE: www.ib-aid.com/dbtest. В настоящее время самый быстрый протестированный сервер показал 18140 вставленных записей в секунду. Каков будет ваш результат?

Как улучшить производительность Firebird помимо этой простой настройки?

Попробуйте сервис оптимизации Firebird от IBSurgeon www.ib-aid.com/perf: мы знаем, как сделать ваш Firebird быстрее.