Firebird OLTP-EMULator test
OLTP-EMUL es la prueba oficial de Firebird que emula una carga de trabajo OLTP realista en Firebird 2.5 y versiones posteriores. Úsala para comprobaciones de rendimiento y regresión bajo muchas sesiones ISQL concurrentes. Lee esta guía atentamente antes de ejecutar la prueba.
Clona el repositorio
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
Inicio rápido basado en el trabajo de Pavel Zotov (Moscú). Preguntas sobre la prueba en sí: [email protected]. Soporte de IBSurgeon: [email protected].
1. Requisitos previos
En el host que ejecutará las sesiones ISQL, instala un cliente de Firebird y asegúrate de que estos binarios estén disponibles:
isql(en algunos paquetes POSIX:isql-fb)fbsvcmgr
2. Elige y copia un archivo de configuración
En la carpeta src, elige la configuración predeterminada que coincida con tu versión principal de Firebird y tu sistema operativo, luego cópiala sin el sufijo .default.
| Firebird | SO | Archivo de configuración |
|---|---|---|
| 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. Ajustes importantes
Edita la configuración copiada. Presta especial atención a:
- fbc - ruta a
isqlen la máquina que lanza las sesiones - clu - nombre opcional no estándar del binario ISQL (p. ej.,
isql-fben paquetes POSIX) - dbnm - ruta completa y nombre de archivo de la base de datos en el servidor (solo ASCII; no un alias si quieres que el script la cree)
- host, port, usr, pwd - parámetros de conexión
- tmpdir - directorio para registros ISQL y archivos temporales de prueba
- init_docs - documentos a crear antes de la carga de trabajo medida (prueba primero con 3000-5000)
- warm_time / test_time - fases de calentamiento y medición, en minutos
- sleep_min / sleep_max - pausa entre transacciones (establece
sleep_maxen 0 para deshabilitar las pausas) - sleep_ddl - UDF opcional para pausas (preferido sobre
sleep/cscriptdel shell); binarios enutil/udf64/ - wait_for_copy - pausa después de la inicialización para que puedas hacer una instantánea de la base de datos antes del calentamiento/medición (útil para ejecuciones repetidas)
Después de la inicialización, la prueba ejecuta el calentamiento durante warm_time minutos y luego mide durante test_time minutos.
4. Consejos para Windows y firebird.conf
Excluye el escaneo de antivirus / SO de tmpdir y de las carpetas temporales de Firebird (FIREBIRD_TMP / TMP / TEMP, y TempDirectories en firebird.conf). Alinear FIREBIRD_TMP con TempDirectories reduce las ralentizaciones bajo muchas sesiones ISQL.
Aumenta al menos:
DefaultDbCachePagesLockHashSlotsLockMemSizeFileSystemCacheThreshold- debe establecerse explícitamente y ser mayor queDefaultDbCachePages(la prueba rechaza un valor faltante/comentado, excepto en algunos diseños de paquetes POSIX)
Apunta aproximadamente al 25% de la RAM para la caché de páginas. No establezcas DefaultDbCachePages por encima de 2048 para Classic / SuperClassic. El tamaño de página está fijado en 8192.
Ejemplo de carga media (~100 sesiones):
| Parámetro | 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 |
Para configuraciones listas para usar, consulta la Calculadora de configuración y las configuraciones de referencia.
5. Ejecuta la prueba
Abre un shell, cambia a src y ejecuta:
1run_oltp_emul <FbMajor> <NumSessions> [nostop]
- FbMajor -
25,30o40para Firebird 2.5 / 3.0 / 4.0 - NumSessions - número de sesiones ISQL a lanzar
- nostop - opcional; omite las pausas interactivas (útil desde un programador de tareas)
Si el archivo de base de datos no existe y dbnm es una ruta completa (no un alias), el script puede crearlo. Las bases de datos anteriores incompletas o vacías se recrean según sea necesario.
6. Informes y detención
Después del tiempo de calentamiento + medición, las sesiones se detienen automáticamente. La primera sesión ISQL escribe el informe final en tmpdir. Con make_html = 1 en Windows, también se produce un informe HTML (más lento).
El nombre del informe depende de file_name_with_test_params:
- Comentado (predeterminado) - p. ej.,
oltp**.report.txt regular- nombres con marca de tiempo adecuados para navegar por muchas ejecuciones en un listado de carpetasbenchmark- nombres adecuados para comparar ajustes/variantes de DDL
Los informes incluyen arquitectura y ajustes, rendimiento general y por intervalo (CNT_OK_PER_MINUTE / AVG_TIMES_PER_MINUTE), detalles de monitoreo opcionales, excepciones, estadísticas de la base de datos, proporciones de versión/registro, validación de tablas modificadas y un diff de firebird.log antes/después.
También puedes consultar:
select * from srv_mon_perf_dynamic; select * from srv_mon_perf_total;
Detener antes de tiempo
Usa 1stoptest.tmp (.bat / .sh) creado en tmpdir en cada lanzamiento. Para lanzamientos multi-host, puedes habilitar ExternalFileAccess en firebird.conf, establecer use_external_to_stop en la configuración de OLTP y escribir un carácter en ese archivo de detención (límpialo antes de cada nueva ejecución).
Líneas base repetibles
Establece wait_for_copy = 1, deja que la inicialización termine, copia la base de datos y luego restaura esa copia antes de cada ejecución comparativa para que cada medición comience desde el mismo punto.
Qué modela la carga de trabajo
El escenario sigue documentos comerciales de estilo taller de automóviles:
- Pedidos de clientes (o internos) de piezas
- Pedidos combinados y enviados a un proveedor
- Factura del proveedor (total o parcial)
- Recepción de existencias; piezas pedidas por clientes reservadas
- Ventas y bajas de existencias
- Cancelaciones posibles en múltiples pasos
- Pagos parciales/totales y cancelaciones que afectan los saldos
- La primera sesión produce informes de rendimiento, excepciones, estadísticas y validación