semillero-INVIMA/benchmarks
2026-07-12 21:04:18 -05:00
..
migrations PROYECTO INVIMA 2026-07-12 21:04:18 -05:00
queries PROYECTO INVIMA 2026-07-12 21:04:18 -05:00
results PROYECTO INVIMA 2026-07-12 21:04:18 -05:00
scripts PROYECTO INVIMA 2026-07-12 21:04:18 -05:00
config.json PROYECTO INVIMA 2026-07-12 21:04:18 -05:00
ground_truth.example.json PROYECTO INVIMA 2026-07-12 21:04:18 -05:00
INFORME_OPTIMIZACION_BUSQUEDA.md PROYECTO INVIMA 2026-07-12 21:04:18 -05:00
INFORME_OPTIMIZACION_QUERY02.md PROYECTO INVIMA 2026-07-12 21:04:18 -05:00
INFORME_RENDIMIENTO.md PROYECTO INVIMA 2026-07-12 21:04:18 -05:00
README.md PROYECTO INVIMA 2026-07-12 21:04:18 -05:00
RESUMEN_ARTICULO.md PROYECTO INVIMA 2026-07-12 21:04:18 -05:00

Benchmarks de rendimiento INVIMA

Este directorio contiene un arnes reproducible para medir las siete consultas SQL representativas usadas en la evaluacion del modelo INVIMA.

Requisitos

  • Node.js.
  • PostgreSQL accesible con las mismas variables del backend:
    • PGHOST
    • PGUSER
    • PGPASSWORD
    • PGDATABASE
    • PGPORT
  • Dependencias instaladas en backend/node_modules o en la raiz.

No se escriben contrasenas en los resultados. Las variables sensibles se leen desde el entorno.

Consultas

Las consultas estan en benchmarks/queries/query_01.sql a query_07.sql. Fueron tomadas de la seccion "Demora de consultas SQL" de analisis_modelo_invima.md y de la logica real de backend/invima/service.js.

Ejecucion rapida de validacion

Antes del protocolo completo, se recomienda validar el entorno con una corrida corta:

npm run benchmark:resources
BENCHMARK_STATEMENT_TIMEOUT_MS=60000 npm run benchmark:explain:before
BENCHMARK_REPETITIONS=1 npm run benchmark:baseline
BENCHMARK_CONCURRENCY_LEVELS=1 BENCHMARK_CONCURRENCY_REQUESTS=7 npm run benchmark:concurrency
npm run benchmark:report

Busqueda textual marcapasos

Para optimizar solo query_06 y query_07 sin tocar la linea base completa:

npm.cmd run benchmark:search:validate:before
$env:BENCHMARK_QUERY_IDS="query_06,query_07"
npm.cmd run benchmark:explain:before
npm.cmd run benchmark:optimize
npm.cmd run benchmark:explain:after
$env:BENCHMARK_REPETITIONS="100"
$env:BENCHMARK_WARMUPS="5"
npm.cmd run benchmark:optimized
npm.cmd run benchmark:search:validate
npm.cmd run benchmark:search:report

En PowerShell:

$env:BENCHMARK_REPETITIONS="1"; npm run benchmark:baseline
$env:BENCHMARK_CONCURRENCY_LEVELS="1"; $env:BENCHMARK_CONCURRENCY_REQUESTS="7"; npm run benchmark:concurrency
npm run benchmark:report

Protocolo completo

npm run benchmark:all

El protocolo completo ejecuta:

  • 5 calentamientos por consulta.
  • 100 mediciones por consulta.
  • 700 operaciones secuenciales medidas.
  • 500 operaciones concurrentes medidas.
  • Migracion de optimizacion reversible.
  • Informe Markdown.

Si una busqueda tarda demasiado, use un timeout controlado:

BENCHMARK_STATEMENT_TIMEOUT_MS=60000 npm run benchmark:baseline

El fallo quedara registrado en los CSV; no se deben eliminar consultas para aparentar cumplimiento.

Optimizacion reversible

Aplicar:

npm run benchmark:optimize

Revertir:

npm run benchmark:rollback

Las migraciones no cambian registros regulatorios. Solo crean indices, ajustan estadisticas y ejecutan ANALYZE.

Archivos de salida

  • results/baseline_raw.csv: ejecuciones secuenciales crudas antes de optimizar.
  • results/baseline_summary.csv: resumen antes de optimizar.
  • results/optimized_raw.csv: ejecuciones secuenciales crudas despues de optimizar.
  • results/optimized_summary.csv: resumen despues de optimizar.
  • results/concurrency_raw.csv: ejecuciones concurrentes crudas.
  • results/concurrency_summary.csv: resumen de concurrencia.
  • results/explain_before/*.json: planes completos antes de optimizar.
  • results/explain_after/*.json: planes completos despues de optimizar.
  • INFORME_RENDIMIENTO.md: informe tecnico en espanol.
  • RESUMEN_ARTICULO.md: texto breve para articulo.

Metricas no calculables sin referencia

EA, MSE, precision y exhaustividad no calculables por ausencia de un conjunto de referencia validado. ground_truth.example.json define la estructura para agregar esa referencia posteriormente.