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

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.5Windowsoltp25_config.win.default
2.5Linuxoltp25_config.nix.default
3.0Windowsoltp30_config.win.default
3.0Linuxoltp30_config.nix.default
4.0Windowsoltp40_config.win.default
4.0Linuxoltp40_config.nix.default
# Windows
copy .\oltp30_config.win.default .\oltp30_config.win

Linux

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.

Увеличьте как минимум:

  • DefaultDbCachePages
  • LockHashSlots
  • LockMemSize
  • FileSystemCacheThreshold - должно быть задано явно и быть больше, чем 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, дождитесь завершения инициализации, скопируйте БД, затем восстанавливайте эту копию перед каждым сравнительным запуском, чтобы каждое измерение начиналось с одной и той же точки.

Что моделирует нагрузка

Сценарий повторяет бизнес-документы в стиле автосервиса:

  1. Заказы клиентов (или внутренние) на запчасти
  2. Заказы объединяются и отправляются поставщику
  3. Счёт от поставщика (полный или частичный)
  4. Поступление на склад; заказанные клиентом запчасти резервируются
  5. Продажи и списания со склада
  6. Отмены возможны на нескольких этапах
  7. Частичные/полные оплаты и отмены, влияющие на остатки
  8. Первая сессия формирует отчёты о производительности, исключениях, статистике и проверке