Esta página fue traducida automáticamente. Lee el original en inglés. English

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.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. Ajustes importantes

Edita la configuración copiada. Presta especial atención a:

  • fbc - ruta a isql en la máquina que lanza las sesiones
  • clu - nombre opcional no estándar del binario ISQL (p. ej., isql-fb en 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_max en 0 para deshabilitar las pausas)
  • sleep_ddl - UDF opcional para pausas (preferido sobre sleep / cscript del shell); binarios en util/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:

  • DefaultDbCachePages
  • LockHashSlots
  • LockMemSize
  • FileSystemCacheThreshold - debe establecerse explícitamente y ser mayor que DefaultDbCachePages (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, 30 o 40 para 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 carpetas
  • benchmark - 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:

  1. Pedidos de clientes (o internos) de piezas
  2. Pedidos combinados y enviados a un proveedor
  3. Factura del proveedor (total o parcial)
  4. Recepción de existencias; piezas pedidas por clientes reservadas
  5. Ventas y bajas de existencias
  6. Cancelaciones posibles en múltiples pasos
  7. Pagos parciales/totales y cancelaciones que afectan los saldos
  8. La primera sesión produce informes de rendimiento, excepciones, estadísticas y validación