Firebird OLTP-EMULator тест
OLTP-EMUL - это официальный тест Firebird, который эмулирует реалистичную OLTP-нагрузку на Firebird 2.5 и выше. Используйте его для проверки производительности и регрессионного тестирования при множестве одновременных сессий ISQL. Внимательно прочитайте это руководство перед запуском теста.
Клонирование репозитория
Windows
git clone --config core.autocrlf=true https://github.com/FirebirdSQL/oltp-emul
Linux / POSIX
git clone --config core.autocrlf=false https://github.com/FirebirdSQL/oltp-emul
Краткое руководство основано на работе Павла Зотова (Москва). Вопросы по самому тесту: [email protected]. Поддержка IBSurgeon: [email protected].
1. Предварительные требования
На хосте, который будет запускать сессии ISQL, установите клиент Firebird и убедитесь, что доступны следующие исполняемые файлы:
isql(в некоторых пакетах POSIX:isql-fb)fbsvcmgr
2. Выбор и копирование файла конфигурации
В папке src выберите конфигурацию по умолчанию, соответствующую вашей основной версии Firebird и ОС, затем скопируйте её без суффикса .default.
| Firebird | ОС | Файл конфигурации |
|---|---|---|
| 2.5 | Windows | oltp25_config.win.default |
| 2.5 | Linux | oltp25_config.nix.default |
| 3.0 | Windows | oltp30_config.win.default |
| 3.0 | Linux | oltp30_config.nix.default |
| 4.0 | Windows | oltp40_config.win.default |
| 4.0 | Linux | oltp40_config.nix.default |
# Windows copy .\oltp30_config.win.default .\oltp30_config.winLinux
cp ./oltp30_config.nix.default ./oltp30_config.nix
3. Важные настройки
Отредактируйте скопированную конфигурацию. Особое внимание обратите на:
- fbc - путь к
isqlна машине, запускающей сессии - clu - необязательное нестандартное имя исполняемого файла ISQL (например,
isql-fbв пакетах POSIX) - dbnm - полный путь и имя файла базы данных на сервере (только ASCII; не псевдоним, если вы хотите, чтобы скрипт создал базу)
- host, port, usr, pwd - параметры подключения
- tmpdir - каталог для журналов ISQL и временных файлов теста
- init_docs - документы для создания до измеряемой нагрузки (сначала попробуйте 3000-5000)
- warm_time / test_time - фазы прогрева и измерений, в минутах
- sleep_min / sleep_max - пауза между транзакциями (установите
sleep_maxв 0, чтобы отключить паузы) - sleep_ddl - необязательная UDF для пауз (предпочтительнее, чем shell
sleep/cscript); исполняемые файлы вutil/udf64/ - wait_for_copy - пауза после инициализации, чтобы вы могли сделать снимок БД перед прогревом/измерением (полезно для повторных запусков)
После инициализации тест выполняет прогрев в течение warm_time минут, затем измеряет в течение test_time минут.
4. Windows и советы по firebird.conf
Исключите антивирус / сканирование ОС из tmpdir и временных папок Firebird (FIREBIRD_TMP / TMP / TEMP и TempDirectories в firebird.conf). Выравнивание FIREBIRD_TMP с TempDirectories уменьшает замедления при множестве сессий ISQL.
Увеличьте как минимум:
DefaultDbCachePagesLockHashSlotsLockMemSizeFileSystemCacheThreshold- должно быть задано явно и быть больше, чемDefaultDbCachePages(тест отклоняет отсутствующее/закомментированное значение, кроме некоторых раскладок пакетов POSIX)
Выделите примерно 25% оперативной памяти под кэш страниц. Не устанавливайте DefaultDbCachePages выше 2048 для Classic / SuperClassic. Размер страницы жёстко задан как 8192.
Пример средней нагрузки (~100 сессий):
| Параметр | SuperServer 3.0+ | [Super]Classic 3.0+ | [Super]Classic 2.5 |
|---|---|---|---|
DefaultDbCachePages |
~0.25 × RAM / 8192 | 1024 | 1024 |
LockHashSlots |
8191 | 16001 | 16001 |
LockMemSize |
4194304 | 16777216 | 16777216 |
Готовые конфигурации см. в Калькуляторе конфигурации и эталонных конфигурациях.
5. Запуск теста
Откройте оболочку, перейдите в src и выполните:
1run_oltp_emul <FbMajor> <NumSessions> [nostop]
- FbMajor -
25,30или40для Firebird 2.5 / 3.0 / 4.0 - NumSessions - количество запускаемых сессий ISQL
- nostop - необязательно; пропустить интерактивные паузы (полезно при запуске из планировщика)
Если файл базы данных не существует и dbnm - полный путь (не псевдоним), скрипт может создать базу. Неполные или пустые предыдущие базы пересоздаются по мере необходимости.
6. Отчёты и остановка
После времени прогрева + измерений сессии останавливаются автоматически. Первая сессия ISQL записывает итоговый отчёт в tmpdir. При make_html = 1 в Windows также создаётся HTML-отчёт (медленнее).
Именование отчётов зависит от file_name_with_test_params:
- Закомментировано (по умолчанию) - например,
oltp**.report.txt regular- имена с временными метками, удобные для просмотра множества запусков в списке файловbenchmark- имена, подходящие для сравнения настроек/вариантов DDL
Отчёты включают архитектуру и настройки, общую и поинтервальную производительность (CNT_OK_PER_MINUTE / AVG_TIMES_PER_MINUTE), дополнительные данные мониторинга, исключения, статистику БД, соотношения версий/записей, проверку изменённых таблиц и diff firebird.log до/после.
Вы также можете выполнять запросы:
select * from srv_mon_perf_dynamic; select * from srv_mon_perf_total;
Досрочная остановка
Используйте 1stoptest.tmp (.bat / .sh), создаваемый в tmpdir при каждом запуске. Для многомашинных запусков можно вместо этого включить ExternalFileAccess в firebird.conf, задать use_external_to_stop в конфигурации OLTP и записать символ в этот файл остановки (очищайте его перед каждым новым запуском).
Воспроизводимые базовые показатели
Установите wait_for_copy = 1, дождитесь завершения инициализации, скопируйте БД, затем восстанавливайте эту копию перед каждым сравнительным запуском, чтобы каждое измерение начиналось с одной и той же точки.
Что моделирует нагрузка
Сценарий повторяет бизнес-документы в стиле автосервиса:
- Заказы клиентов (или внутренние) на запчасти
- Заказы объединяются и отправляются поставщику
- Счёт от поставщика (полный или частичный)
- Поступление на склад; заказанные клиентом запчасти резервируются
- Продажи и списания со склада
- Отмены возможны на нескольких этапах
- Частичные/полные оплаты и отмены, влияющие на остатки
- Первая сессия формирует отчёты о производительности, исключениях, статистике и проверке