Ниже вы найдете 5 основных шагов, которые помогут сделать вашу базу данных Firebird быстрее и лучше. В этих шагах мы дадим вам четкие инструкции о том, на что обратить внимание и как это исправить или улучшить. Вы должны начать оптимизацию производительности Firebird с этих 5 шагов.
1. Шаг 1 из 5: Проверьте настройки производительности ОС на вашем сервере Firebird
Для эффективной работы FirebirdSQL убедитесь, что настроены необходимые параметры операционной системы.
1.1. Для Windows
В общем случае пользователям Windows необходимо выполнить следующие 3 шага:
-
Включите «
Ультимативную производительность
» или «Высокую производительность
»Измените план питания на «
Высокая производительность
» (или Ultimate, если он у вас есть). Это может увеличить производительность процессора на 20 %, поскольку ядра процессора работают быстрее при более высоком энергопотреблении. Чтобы изменить план питания, зайдите в настройки энергопотребления Windows («Параметры питания
») и выберите «Высокая производительность
» (вместо «Сбалансированный
», который выставлен по умолчанию).Не нужно перезапускать Firebird или перезагружать сервер, эффект будет применен немедленно.
Обратите внимание, что Windows Update иногда сбрасывает этот параметр на значение по умолчанию «
Сбалансированный
». -
Включите опцию «
Разрешить службе взаимодействовать с рабочим столом
» для службы FirebirdЭта опция абсолютно необходима для Firebird 2.5 с архитектурой Classic, и будет полезна для других архитектур, особенно для баз данных Firebird с большим количеством соединений.
Чтобы увидеть эффект, необходимо перезапустить все экземпляры Firebird.
-
Проверте политику кэширования записи для всех дисков
Если у вас нет RAID-массива, SAN или другого сложного устройства хранения, убедитесь, что Windows включила кэширование записи. Щелкните правой кнопкой мыши на диске, выберите «
Свойства
» и вкладку «Политики
». Опция «Включить кэширование записи на устройстве
» должна быть включена.Не нужно перезагружать Windows, пока это не потребуется явно.
Для RAID/SAN необходимо выполнить дополнительную настройку. Мы посвятим этому отдельную статью.
1.1.1. Дополнительные шаги для Windows
Следующие рекомендации основаны на практических находках службы поддержки IBSurgeon:
-
Размер файла подкачки. Рекомендуемый вариант - позволить Windows самой определить размер файла подкачки. Если вы решили ограничить размер файла подкачки, убедитесь, что он составляет не менее 32 Гб. Никогда не отключайте файл подкачки!
-
Время безотказной работы. Перезагружайте свой Windows-сервер или виртуальную машину не реже одного раза в 180 дней.
1.2. Для Linux
В Linux есть 2 обязательных шага для серверов Firebird:
-
Увеличьте
MaxOpenFiles
Экземпляру Firebird с большим количеством соединений потребует увеличить количество открытых файлов (handles).
Проверьте значение
MaxOpenFile
следующей командой:cat /proc/firebird_process_id/limits
По умолчанию установлено значение 4096, при необходимости увеличьте его до 49999.
Установите его в служебном файле Firebird
LimitNOFILE=49999
Обычно служебные файлы Firebird находятся в
/usr/lib/systemd/system/firebird-superserver.service
, илиin/usr/lib/systemd/system/firebird
.Firebird, поставляемый с HQbird (в версиях 2020+), уже имеет эту настройку.
-
Проверьте и увеличьте VMA, если необходимо
Экземпляры Firebird с большим количеством соединений, с архитектурами SuperServer и SuperClassic могут требовать много виртуальных областей памяти (VMA).
Проверьте количество VMA с помощью следующей команды
cat /proc/sys/vm/max_map_count
По умолчанию 64K, следует установить 250K.
Чтобы увеличить его, добавьте в
/etc/sysctl.conf
следующую строкуvm.max_map_count=262144
Чтобы применить, перезагрузите сервер, или, чтобы применить сразу, сделайте следующее
sysctl -w vm.max_map_count=262144
Обратите внимание, чтобы сделать эту настройку постоянной, необходимо изменить
sysctl.conf
!
1.2.1. Дополнительные шаги для Linux
-
Проверьте, достаточно ли у вас места в
/tmp
. Мы рекомендуем иметь не менее 50 Гб. Firebird хранит временные файлы в/tmp
и/tmp/firebird
, и они могут быть довольно большими. Если вы используете Firebird HQbird с опцией BlobTempSpace, в нем будут храниться временные файлы Blob. -
Время работы. Перезагружайте свой сервер не реже одного раза в 90 дней.
-
Swap. Никогда не отключайте своп в Linux.
2. Шаг 2 из 5: Создайте оптимальный firebird.conf для вашего сервера Firebird
2.1. В чем проблема с конфигурацией по умолчанию?
Вы используете стандартный файл firebird.conf
, который поставляется с обычным (ванильным) Firebird, установленным из стандартного инсталлятора или репозитория Linux? Если да, то у нас для вас плохие новости. Ваш файл firebird.conf
не является лучшим для вашей базы данных Firebird.
Файл по умолчанию firebird.conf
создан для работы на самом минимальном и простом оборудовании или виртуальной машине. Но это не то, что нужно большинству производственных серверов.
Если вы используете HQbird вместе с Firebird, ваше положение улучшается. HQbird предоставляет вам файл firebird.conf
, который лучше подходит для среднего сервера.
2.2. Создание оптимальной конфигурации Firebird
Вы хотите сделать файлы firebird.conf
(и databases.conf
) лучше подходящего для вашего оборудования или виртуальной машины? Это разумная идея. У нас есть бесплатный сервис, который может помочь вам в этом. Он называется «Калькулятор конфигурации для Firebird» и может заставить вашу базу данных Firebird лучше использовать ваши ресурсы. Сервис создаст для вас конфигурацию лучше, чем стандартная, и, что более важно, поможет вам избежать распространенных ошибок при конфигурировании Firebird.
Если вы хотите сделать вашу конфигурацию еще лучше, мы можем сделать для вас больше вещей в рамках нашего Optimization Services, например, проанализировать ваши запросы, структуру вашей базы данных и многое другое.
Чтобы попробовать Калькулятор конфигурации, просто перейдите по этой ссылке: https://cc.ib-aid.com/calculator.html который будет доступен после регистрации на сайте https://cc.ib-aid.com, и чтобы получить доступ к другим инструментам для Firebird.
Выберите версию Firebird, архитектуру, затем детали вашего оборудования/VM (RAM/CPU ядра), а также характеристики базы данных и нагрузки: размер базы данных, размер страницы базы данных, и нажмите «Создать
»:

Далее вам нужно скопировать и вставить результаты в файлы firebird.conf
и databases.conf
.
Но прежде чем это сделать, убедитесь, что вы полностью убрали следы прежних параметров. Так у вас не будет проблем со старыми и новыми настройками.
2.3. Очень важно!
Убедитесь, что в заголовке вашей базы данных параметр Page Buffers равен нулю!
Если вам нужно убедиться в этом, выполните команду в терминале (командной строке):
/opt/firebird/bin/gstat -h /path/to/database.fdb
или (в Windows)
<ваша папка Firebird bin>\gstat.exe -h Disk:Pathtodatabase.fdb
Результат будет выглядеть следующим образом:
Gstat execution time Mon Nov 28 11:25:03 2022 Database header page information: Flags 0 Generation 5914 System Change Number 0 Page size 16384 ODS version 12.0 Oldest transaction 6194 Oldest active 6195 Oldest snapshot 6195 Next transaction 6220 Sequence number 0 Next attachment ID 63 Implementation HW=AMD/Intel/x64 little-endian OS=Windows CC=MSVC Shadow count 0 Page buffers 0 Next header page 0 Database dialect 3 Creation date Nov 24, 2022 16:42:58 Attributes Variable header data: Sweep interval: 20000 Database GUID: {260809FC-FFF7-488F-7ABF-FEF0A84F6900} *END* Gstat completion time Mon Nov 28 11:25:03 2022
Проверьте, что строка с параметром Page Buffers равна 0.
Если он имеет другое значение, это отменит настройки в firebird.conf
и databases.conf
.
Чтобы использовать значения из конфигурации, установите Page Buffers в заголовке в 0 с помощью команды
gfix -buff 0 /path/to/database.fdb -user SYSDBA -pass masterkey
Чтобы применить новую конфигурацию, перезапустите все экземпляры Firebird.
В результате вы увидите улучшенную производительность вашего экземпляра Firebird.
3. Шаг 3 из 5: Проверка производительности диска на сервере Firebird
Одной из распространенных причин медленной работы базы данных Firebird является недостаточная скорость работы диска: именно на нем база данных Firebird хранит и считывает данные, поэтому он должен быть быстрым. Давайте проверим, насколько хорошо ваш диск работает с базой данных Firebird.
3.1. CrystalDiskMark (Windows)
Существует несколько универсальных инструментов для измерения производительности диска обычным способом, они дают оценку в МБ/с или IOPS. Наиболее популярной является CrystalDiskMark (https://crystalmark.info/).
По нашему опыту, CrystalDiskMark дает адекватную оценку скорости диска и может быть использован в качестве отправной точки. Пример вывода CrystalDiskMark в текстовом формате:
------------------------------------------------------------------------------ CrystalDiskMark 8.0.4 x64 (C) 2007-2021 hiyohiyo Crystal Dew World: https://crystalmark.info/ ------------------------------------------------------------------------------ * MB/s = 1,000,000 bytes/s [SATA/600 = 600,000,000 bytes/s] * KB = 1000 bytes, KiB = 1024 bytes [Read] SEQ 1MiB (Q= 8, T= 1): 2334.517 MB/s [ 2226.4 IOPS] < 3588.90 us> SEQ 1MiB (Q= 1, T= 1): 1799.226 MB/s [ 1715.9 IOPS] < 582.13 us> RND 4KiB (Q= 32, T= 1): 411.333 MB/s [ 100423.1 IOPS] < 318.20 us> RND 4KiB (Q= 1, T= 1): 25.074 MB/s [ 6121.6 IOPS] < 163.02 us> [Write] SEQ 1MiB (Q= 8, T= 1): 999.476 MB/s [ 953.2 IOPS] < 8341.94 us> SEQ 1MiB (Q= 1, T= 1): 1543.671 MB/s [ 1472.2 IOPS] < 675.37 us> RND 4KiB (Q= 32, T= 1): 83.297 MB/s [ 20336.2 IOPS] < 1564.70 us> RND 4KiB (Q= 1, T= 1): 70.380 MB/s [ 17182.6 IOPS] < 57.63 us> Profile: Default Test: 64 GiB (x5) [C: 89% (828/931GiB)] Mode: [Admin] Time: Measure 5 sec / Interval 5 sec Date: 2022/11/29 17:32:33 OS: Windows 11 [10.0 Build 22621] (x64)
Однако для того, чтобы гарантировать, что диск действительно быстрый для Firebird, этого недостаточно, поскольку тест очень синтетический.
3.2. Простой тест Вставки Обновления Удаления
Для того чтобы измерить производительность диска с Firebird, IBSurgeon разработал скрипт, который создает базу данных, вставляет 1 миллион записей, затем обновляет эти записи, а затем удаляет их.
Скрипт выполняется стандартным инструментом isql.exe
, с реальной конфигурацией Firebird.
По сути, это однопоточный тест, который измеряет производительность Firebird для случая «пиковой
» операции обработки - результатом теста является файл базы данных размером 3,6 Гб.
Результат представлен в виде количества миллисекунд на выполнение вставки 1 миллиона записей, обновление 1 миллиона записей и удаление 1 записей отдельно для операции и для времени фиксации.
С момента создания скрипта люди запустили его на сотнях серверов (многие люди из сообщества запускали тест на разных серверах и присылали результаты), и теперь есть таблица и диаграмма с результатами.
Для удобства сравнения результаты представлены в формате Inserts/seconds, Updates/seconds, Deletes/second.
3.3. Как запустить простой тест Вставки Обновления Удаления
3.3.1. Тест скорости с помощью HQbird
Вы можете использовать HQbird для тестирования скорости вашего диска с помощью «Simple IUD Test
». Зайдите в веб-консоль и найдите справа значок с надписью «Speed Test
». Затем в выпадающем меню выберите путь к базе данных, в которой вы хотите провести тест. А затем просто нажмите кнопку «Запустить
». Вот и все.

Через 5-10-20 минут вы увидите результаты теста скорости:

3.3.2. Тест скорости на сервере с любым Firebird.
Для того чтобы запустить тест на любом сервере Firebird, скопируйте и вставьте скрипт с сайта: https://ib-aid.com/en/simple-insert-update-delete-test-for-firebird/#how_to_run_firebird_performance_test и сохраните его в файл, например, /opt/script1.sql
или c:\temp\script1.sql
.
Затем измените путь в первой строке скрипта к создаваемой тестовой базе данных - она должна находиться на том же диске, где расположена основная база данных:
create database "localhost:<DISK>:<PATH>inserttest4.fdb"
user "SYSDBA" password "masterkey" page_size 16384;
или, для Linux
create database "localhost:/<path>/inserttest4.fdb"
user "SYSDBA" password "masterkey" page_size 16384;
Избегайте ситуации, когда тестируемый диск загружен длительной операцией, такой как резервное копирование или копирование больших объемов данных, или просто имеет пиковое количество пользователей. Лучший вариант - запустить скрипт в эксклюзивном режиме без пользователей.
Запустите скрипт из командной строки с помощью следующей команды:
/opt/firebird/bin/isql -i /opt/script1.sql
или
«C\:Program Files\Firebird\Firebird_your_version\isql.exe» -i .\script1.sql
Вывод будет на экране (ниже показана только первая часть для Вставки):
C:\HQbird\Firebird30> isql -i c:\Temp\test1.sql Use CONNECT or CREATE DATABASE to specify a database INSERTED_ROWS 1000000 ELAP_MS 58890 Current memory = 702384256 Delta memory = 3215392 Max memory = 704756112 Elapsed time= 58.894 sec Buffers = 40960 Reads = 9 Writes = 88015 Fetches = 25332353 Current memory = 702342416 Delta memory = -41840 Max memory = 704756112 Elapsed time= 4.846 sec Buffers = 40960 Reads = 1 Writes = 40254 Fetches = 2
3.3.3. Как интерпретировать результаты
Обратите внимание, что необходимо просуммировать время операции и время ее фиксации, а затем разделить 1000000 на общее время.
Для примера выше,
INSERT SPEED = 1000000 / (58,984+4,846) = 15666 вставок/секунду
Результаты в виде операций в секунду - например, 6000 вставок/секунду, 5200 обновлений/секунду, 7300 удалений/секунду - можно сравнить с таблицей/графиком измерений производительности.
Таблица находится здесь: https://ib-aid.com/images/testresult/insert_update_delete_results.xls
Если вы видите результаты выше середины графика/таблицы, значит, скорость диска в порядке, и причина медлительности кроется не в железе, а в другой области.
Еще одна вещь, которую следует проверить, - это время фиксации(commit). Если вы видите, что общее время теста содержит более 20 % времени фиксации, это означает, что могут быть проблемы с кэшем записи.
Если вы видите, что результат теста ниже среднего, а вы используете SSD-диски, значит, есть проблемы с конфигурацией диска или драйвером.
3.4. Возможные причины медленной работы диска
-
Неправильная файловая система для диска, на котором находится база данных Firebird
-
Отсутствие блока резервного питания(BBU) для RAID-массива (или разряженная батарея)
-
Отсутствие подходящего драйвера (или драйвер отключен производителем, чтобы предотвратить использование диска потребительского класса в серверной операционной системе) .
-
Ограничение IOPS для виртуальных машин (например, в Azure очень низкие ограничения IOPS для виртуальных машин общего назначения) .
-
Активный процесс резервного копирования или другая обработка (копирование, перегруппировка и т.д.) больших данных на диске.
-
Проблема с самим диском: плохие блоки, перегрев и т.д. Всегда проверяйте данные S.M.A.R.T для диска.
4. Шаг 4 из 5: Проверьте индексы базы данных Firebird на наличие общих проблем
Чтобы поддерживать базу данных Firebird в хорошей форме, все индексы должны быть актуальными, корректно настроенными и полностью работоспособными.
Давайте посмотрим, как выполнить эти проверки.
4.1. Проверка неактивных или неактивированных индексов
Индексы базы данных Firebird могут находиться в одном из трех состояний: активном, неактивном или неактивированном.
-
Активный индекс - это обычный индекс, который оптимизирует производительность запросов.
-
Неактивный индекс - это индекс, который был явно отключен командой
ALTER INDEX … INACTIVE
. Неактивный индекс не будет использоваться в запросах. -
Неактивированный индекс - это индекс, который должен был быть включен в процессе восстановления gbak, но процесс был завершен преждевременно (обычно из-за ошибки). Обычно неактивированные индексы не должны присутствовать в базе данных. Неактивированный индекс не будет использоваться в запросах.
Чтобы проверить состояние индексов в базе данных Firebird, выполните следующий запрос:
SELECT count(*) FROM RDB$INDICES WHERE RDB$INDEX_INACTIVE<>0;
Если результат равен 0, то все индексы активны. Если результат не равен 0, выполните следующий запрос, чтобы увидеть список проблемных индексов:
SELECT RDB$INDEX_NAME, RDB$INDEX_INACTIVE
ИЗ RDB$INDICES, ГДЕ RDB$INDEX_INACTIVE<>0;
и проверьте состояние перечисленных индексов. Значение 1 означает, что индекс неактивен, а значение 3 - что индекс находится в неактивном состоянии.
Чтобы активировать индекс, выполните команду для каждого индекса:
ALTER INDEX <indexnamexxx> ACTIVE;
4.2. Пересчет селективности (статистики) индексов в базе данных Firebird
Оптимизатор в Firebird (и в InterBase) использует 2 основных критерия при анализе запроса и выборе плана выполнения - размер таблиц (cardinality) и селективность индексов (selectivity).
Селективность индексов рассчитывается как 1, деленное на количество уникальных значений в индексируемом столбце (или столбцах). Например, если это индекс по первичному ключу, а в таблице 10 тысяч записей, то его селективность будет равна 1 / 10000 = 0,0001
. А если в той же таблице есть столбец с 10 различными значениями, то индекс по этому столбцу будет иметь селективность 1 / 10 = 0,1
. Для оптимизатора чем меньше селективность индекса, тем лучше.
Если оптимизатор всегда более или менее точно определяет размер таблицы, то селективность индексов не пересчитывается автоматически. В результате оптимизатор может оценить селективность, которая далека от реальности. Поэтому селективность необходимо пересчитывать вручную.
Пересчет селективности индексов происходит при их создании, при ALTER INDEX ACTIVE
и при SET STATISTICS indexname
.
Например, вы создали таблицу, создали индексы, а затем заполнили таблицу данными. Селективность всех индексов этой таблицы будет оставаться равной 0 до тех пор, пока вы не пересчитаете селективность.
Или вы создали таблицу, индексы, заполнили ее данными, сделали резервное копирование-восстановление (при восстановлении индексы будут созданы заново, и селективность станет актуальной). А потом вы изменили 30-40 % данных в некоторых таблицах (добавили, удалили или модифицировали). И селективность также будет неактуальна.
Посмотреть сохраненную селективность индексов можно с помощью запроса (селективность неактивных индексов будет равна -1)
select i.rdb$relation_name, i.rdb$index_name, i.rdb$statistics
from rdb$indices i
-- do not show indices for system tables
-- where coalesce (rdb$system_flag, 0) = 0
order by 1, 2
Пересчет статистики индексов в базе данных Firebird - это способ улучшить производительность ваших запросов. Статистика говорит Firebird о том, насколько избирательны ваши индексы, и помогает ему выбрать наилучший план выполнения. Вот шаги по пересчету статистики индексов в базе данных Firebird:
-
Подключитесь к вашей базе данных с помощью такого инструмента, как isql, FlameRobin и т.д.
-
Выполните команду
SET STATISTICS <имя_индекса>;
для каждого индекса, который вы хотите обновить. -
Зафиксируйте изменения командой
COMMIT;
. -
Вы можете проверить обновленную статистику с помощью команды
select i.rdb$relation_name, i.rdb$index_name, i.rdb$statistics from rdb$indices i order by 1, 2;
Вот и все. Вы пересчитали статистику индексов в базе данных Firebird. Вы можете делать это периодически, особенно после больших изменений в данных, чтобы поддерживать эффективность работы индексов.
4.3. Как проверить состояние индексов и пересчитать статистику с помощью HQbird
Чтобы проверить состояние индексов с помощью HQbird, выполните следующие действия:
-
Зайдите в веб-интерфейс по адресу http://localhost:8082 и выберите задание «
Пересчет статистики индексов
» для зарегистрированной базы данных. Это задание будет выполнять обе задачи. -
Откройте диалог и включите задание.
-
Задание будет выполнять как пересчет статистики, так и проверку состояния индекса. Расписание по умолчанию - еженедельно по субботам в 02:00 утра.
Если вам нужно немедленно пересчитать статистику индексов (например, если вы только что установили HQbird), вы можете нажать «
Запустить сейчас
» в виджете задания. -
Для баз данных размером более 20 ГБ мы рекомендуем пересчитывать индексы ежемесячно, а не еженедельно.
5. Шаг 5 из 5. Выбор правильного размера страницы для базы данных Firebird
5.1. Немного теории
Ваша база данных Firebird состоит из частей, которые имеют одинаковый размер. Эти части называются страницами. Размер страниц зависит от версии Firebird, которую вы используете. В Firebird 1 размер страниц по умолчанию составлял 1024 байта. В Firebird 2.5 размер страницы по умолчанию составлял 4096 байт. А в Firebird 3.0 и выше базы данных создаются с размером страницы 8192 байта. Для больших баз данных в Firebird 2.5 и 3 есть варианты до 16384, а в v4+ - 32768 байт.
1024 |
2048 |
4096 |
8192 |
16384 |
32768 |
|
2.5 |
возможно |
возможно |
значение по умолчанию |
возможно |
возможно |
Не реализовано |
3.0 |
Не поддерживается |
Не поддерживается |
возможно |
значение по умолчанию |
возможно |
Не реализовано |
4.0 |
Не поддерживается |
Не поддерживается |
возможно |
значение по умолчанию |
возможно |
возможно |
5.0 |
Не поддерживается |
Не поддерживается |
возможно |
значение по умолчанию |
возможно |
возможно |
Чтобы узнать размер страницы вашей базы данных, воспользуйтесь командой:
В Windows
gstat.exe -h Disk:path\database.fdb
В Linux
/opt/firebird/bin/gstat -h /pathto/database.fdb
и посмотрите строку «Page size
».
Размер страниц имеет большое значение для вашей базы данных Firebird, поэтому вам нужно выбрать правильный размер.
Чтобы изменить размер страницы, вам нужно использовать инструмент gbak
для резервного копирования и восстановления базы данных с добавлением опции -page_size <NN>
. Но будьте осторожны, это может занять много времени, если ваша база данных большая. Поэтому лучше с самого начала выбрать правильный размер страницы.
Как выбрать правильный размер страницы для базы данных Firebird? Необходимо учитывать следующие моменты:
-
Размер страницы по умолчанию
-
Размер базы данных
-
Глубина индексов
-
Размер сжатых записей, хранящихся на страницах для больших таблиц
-
Что делать - пересчитать конфигурацию после изменения размера страницы
Давайте рассмотрим все эти моменты:
5.2. Размер страницы по умолчанию
Как вы понимаете, размер страницы не может быть меньше, чем по умолчанию для конкретной базы данных. Если база данных создается командой CREATE DATABASE
без опции PAGE_SIZE
, то база данных по умолчанию будет создана с размером страницы по умолчанию. Если база данных была создана на предыдущей версии Firebird и конвертирована с помощью резервного копирования/восстановления, размер страницы может сохраниться, и он может быть меньше, чем по умолчанию, то есть неоптимальным. В этом случае необходимо изменить размер страницы на стандартный или выше. На практике это означает 8192 как минимум.
5.3. Размер базы данных
Для баз данных размером менее 20 Гб или без намерения вырасти больше этого размера без резервного копирования/восстановления (когда будет возможность изменить размер страницы), общая рекомендация - использовать 8192 байта в качестве размера страницы (и это размер по умолчанию для версий 3+).
Для больших баз данных используйте 16384 байта.
Что насчет 32768, будет ли лучше использовать самый большой из доступных вариантов?
Мы проводили тесты с базами данных размером до 1 Тб и не обнаружили прямого улучшения производительности по сравнению с 16384. Один из наших клиентов с базой данных 4 Тб сообщил, что 32768 страниц улучшили производительность. Таким образом, решение об использовании размера страницы 16K или 32K будет зависеть от следующих шагов.
5.4. Глубина индексов
Чтобы поддерживать производительность индексов на оптимальном уровне, они должны иметь глубину ⇐3
.
Как проверить глубину?
Используя только стандартный инструмент, это немного долгий процесс:
-
Запустите инструмент gstat для сбора статистики
gstat -r -user SYSDBA -pass masterkey localhost:Disk:pathdb.fdb > stats.txt
-
Откройте статистику в текстовом редакторе и найдите все упоминания слов «
Depth: 3
», «Depth: 4
», «Depth: 5
». Должны быть индексы с глубиной 2 и 3 (3, если база данных не очень маленькая), и, для оптимальной производительности, не должно быть индексов с глубиной 4 и 5.
В HQbird необходимо использовать инструмент HQbird Database Analyst из пакета HQbird Admin, который предназначен для анализа статистики баз данных.
Откройте HQbird Database Analyst, получите статистику базы данных (или откройте файл с собранной вручную статистикой), перейдите на вкладку Indices и отсортируйте по столбцу Depth:

Если вы видите индексы с Depth > 3
, необходимо увеличить размер страницы базы данных.
Если вы уже используете максимально возможный размер страницы, например 16384 на v3, рассмотрите возможность перехода на v4-5, где максимальный размер страницы составляет 32768.
5.5. Размер сжатых записей
Firebird хранит данные таблицы в сжатом виде. Вы можете увидеть в статистике баз данных из предыдущего шага информацию о размере записей в таблице, примерно так: (вывод может быть разным для разных версий):
TST (128) Primary pointer page: 148, Index root page: 149 Average record length: 20.99, total records: 100000 Average version length: 0.00, total versions: 0, max versions: 0 Data pages: 1516, data page slots: 1516, average fill: 62% Fill distribution: 0 - 19% = 1 20 - 39% = 0 40 - 59% = 3 60 - 79% = 1512 80 - 99% = 0
Необходимо проверить размер записей для самых больших таблиц и сравнить его с размером страницы.
Идея заключается в том, чтобы подсчитать, сколько записей хранится на одной странице - если на страницах размером 4096 байт хранятся записи средней длиной 700 байт, Firebird потребуется прочитать много страниц данных.
Конечно, это зависит от структуры базы данных и бизнес-логики, но чем больше размер записей, тем больший размер страницы требуется.
В «HQbird Database Analyst
» мы можем посмотреть размеры записей для таблиц в простой табличной форме: откройте или получите статистику, вкладка «Таблицы
», и отсортируйте по Record Length.
Помимо «Длины записи
», «Аналитика базы данных
» показывает параметр «Среднее заполнение
» и вычисляет производный параметр «Реальное заполнение
», чтобы показать, насколько эффективно хранятся данные на страницах базы данных.

5.6. Пересчет конфигурации после изменения размера страницы
Помните, что размер кэша Firebird измеряется в страницах? Если изменить размер страницы, то изменится и абсолютный размер кэша. Если вы установили 1 миллион страниц для размера страницы 8192, то абсолютный размер кэша составит 8 Гб, а если размер страницы увеличится до 16384 байт, то абсолютный размер кэша станет 16 Гб.
Чтобы избежать проблем со слишком большим кэшем, после изменения размера страницы пересчитайте конфигурацию в Configuration Calculator cc.ib-aid.com.
6. Резюме
Несмотря на то, что описанные выше шаги очень важны для повышения производительности, они не могут быть исчерпывающими. Если вы обнаружите, что, несмотря на тщательные проверки, производительность остается низкой, возможно, необходимо уточнить запросы, оптимизировать архитектуру и настроить транзакции.
Чтобы получить квалифицированную помощь в оптимизации производительности, воспользуйтесь нашими услугами по оптимизации, обратившись к нам по адресу support@ib-aid.com.
Мы предлагаем два основных варианта обслуживания, оба из которых могут быть настроены в соответствии с вашими потребностями:
-
Урегулирование инцидентов: Включает в себя два сеанса удаленного рабочего стола по цене 499 долларов США, предназначенных для оперативного решения проблем.
-
Комплексная оптимизация: Эта услуга, стоимостью 2990 долларов США, включает в себя тщательный процесс оптимизации, в том числе мониторинг производственных сред и несколько итераций для достижения наилучших результатов.