114 lines
3.5 KiB
Markdown
114 lines
3.5 KiB
Markdown
# 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:
|
|
|
|
```bash
|
|
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:
|
|
|
|
```powershell
|
|
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:
|
|
|
|
```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
|
|
|
|
```bash
|
|
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:
|
|
|
|
```bash
|
|
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:
|
|
|
|
```bash
|
|
npm run benchmark:optimize
|
|
```
|
|
|
|
Revertir:
|
|
|
|
```bash
|
|
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.
|