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 за паузе (пожељнији од љуске
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% RAM-а за кеш страница. Немојте постављати 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 |
За готове конфигурације погледајте Configuration Calculator и референтне конфигурације.
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, дождитесь завершения инициализации, скопируйте БД, затем восстанавливайте эту копию перед каждым сравнительным запуском, чтобы каждое измерение начиналось с одной и той же точки.
Что моделирует нагрузка
Сценарий следует бизнес-документам в стиле автосервиса:
- Заказы клиентов (или внутренние) на запчасти
- Заказы объединяются и отправляются поставщику
- Счет поставщика (полный или частичный)
- Поступление на склад; заказанные клиентом запчасти резервируются
- Продажи и списания со склада
- Отмены возможны на нескольких этапах
- Частичные/полные платежи и отмены, влияющие на остатки
- Первая сессия создает отчеты о производительности, исключениях, статистике и проверке