Recursos, trabajos y consultas#
Cómo se reparte el trabajo de Empowerment Center entre la memoria del backend, la BD propia y las bases de datos de los clientes, y los límites que lo protegen. Los valores por defecto sirven para empezar; esta página dice qué mirar en la consola de operación para saber cuándo cambiarlos.
Memoria#
La JVM del backend toma para su montón el 75 % del límite de memoria de su contenedor (-XX:MaxRAMPercentage=75 en la imagen) y termina si se queda sin memoria (-XX:+ExitOnOutOfMemoryError), para que el orquestador la reinicie.
| Contenedor | Variable | Por defecto |
|---|---|---|
| Backend | ECENTER_BACKEND_MEMORY |
4g (unos 3 GB de montón) |
| BD propia | ECENTER_DB_MEMORY |
1g |
| Navegador sin interfaz | ECENTER_RENDER_MEMORY |
2g, con 1 GB de memoria compartida |
| Frontal | ECENTER_FRONTEND_MEMORY |
256m |
| Motor de rutas | ECENTER_ROUTING_MEMORY |
6g |
Sin límite de contenedor (sin contenedores, o con un orquestador que no lo ponga), fije el montón a mano: JAVA_TOOL_OPTIONS="-Xmx3g -XX:+ExitOnOutOfMemoryError".
Cuándo subirla. La consola de operación abre la alerta de memoria cuando la ocupada tras la última recolección pasa del 90 % del máximo (ecenter.operations.alerts.memory-percent). Lo que más ocupa son los cubos calculados, que se quedan en memoria mientras se usan:
| Propiedad | Por defecto | Qué es |
|---|---|---|
ecenter.cube.max-bytes |
256MB |
La memoria estimada más grande de un cubo calculado. Si la pasa, el trabajo falla. |
ecenter.cube.cached-pivots |
16 |
Las disposiciones de cubos ya pivotadas que se conservan en memoria. |
ecenter.cube.pivot-ttl |
10m |
Lo que se conserva una disposición pivotada sin usarse. |
ecenter.jobs.result-ttl |
30m |
Lo que se conserva un trabajo terminado y su resultado. Pasado ese tiempo, el usuario tiene que volver a calcular. |
La BD propia#
El backend usa un pool de conexiones a la BD propia que comparten las peticiones, los trabajos y el mantenimiento.
| Propiedad | Variable | Por defecto |
|---|---|---|
spring.datasource.hikari.maximum-pool-size |
SPRING_DATASOURCE_HIKARI_MAXIMUM_POOL_SIZE |
10 |
Cuándo subirlo. Si Administración › Operación › Resumen enseña en BD propia conexiones esperando, súbalo (por ejemplo, a 20 con muchos trabajos a la vez). Con varias instancias, la suma de sus pools no puede pasar del max_connections de PostgreSQL (100 en la imagen de PostGIS).
Los pools de las BD de los clientes#
Cada conexión tiene su propio pool de sesiones con la BD del cliente, que comparten todos los trabajos de la instancia: cubos, gráficos, mapas, formularios, listas, datos externos, entregas y consultas por la API.
| Propiedad | Por defecto | Qué es |
|---|---|---|
ecenter.datasource.pool.max-size |
5 |
Las sesiones abiertas como mucho con la BD de cada conexión. Variable: ECENTER_DATASOURCE_POOL_MAXSIZE. |
ecenter.datasource.pool.min-idle |
0 |
Las sesiones sin uso que se mantienen abiertas. Con 0, se cierran todas al quedar libres. |
ecenter.datasource.pool.idle-timeout |
5m |
Lo que dura abierta una sesión sin uso por encima de min-idle. Al menos 10s. |
ecenter.datasource.pool.connection-timeout |
15s |
Lo que espera un trabajo a que quede una sesión libre. Pasado, el trabajo falla, aunque haya hilos libres. Al menos 250ms. |
ecenter.datasource.pool.retire-timeout |
10m |
Al cambiar los datos de acceso de una conexión o desactivarla, lo que se espera como mucho a que terminen las sesiones en uso del pool anterior antes de cerrarlas. |
ecenter.datasource.catalog.refresh-wait |
10s |
Lo que Refrescar catálogo espera a su trabajo antes de dejarlo en segundo plano. |
Cómo dimensionarlo. Sume los trabajos que pueden consultar a la vez la misma conexión: los de cada clase que de verdad coinciden (véase Los trabajos), más las lecturas que se hacen en la propia petición (los valores de un selector, los detalles de un formulario). Con 5 sesiones, cinco cubos largos a la vez sobre la misma conexión ya hacen esperar al sexto.
Cuándo subirlo. Si el Resumen de la consola enseña sesiones esperando en la columna Pool de una conexión, o hay trabajos que fallan porque la BD no responde a tiempo. No pase de las sesiones que admite la BD del cliente para el usuario de la conexión, contando las demás instancias.
Los trabajos#
Lo que puede tardar (calcular un cubo, renovar una lista, cargar datos externos) se ejecuta como trabajo en una cola por clase. Cada clase tiene su número de trabajos a la vez; los demás esperan su turno.
| Clase | Qué trabajos | A la vez por defecto |
|---|---|---|
CUBE |
Cubos, cubos de detalle y totales calculados por la BD. | 4 |
CHART |
Gráficos. | 4 |
MAP |
Mapas. | 4 |
FORM |
Lectura de los registros de un formulario. | 4 |
LIST |
Renovación de las listas. | 4 |
EXTERNAL_DATA |
Análisis, integración y carga de datos externos. | 4 |
PUBLICATION |
Publicación en el portal (congelar los datos). | 4 |
LEGACY_IMPORT |
Análisis e importación de una instalación de Empowerment Center 7. | 4 |
API |
Consultas de la API de consulta, del MCP y la consulta ad hoc. | 2 |
DELIVERY |
Entregas de las suscripciones y evaluaciones de las alertas de datos. | 2 |
OTHER |
El resto: refrescar el catálogo, cargar agrupaciones, comprobaciones de la consola… | 4 |
| Propiedad | Por defecto | Qué es |
|---|---|---|
ecenter.jobs.default-concurrency |
4 |
Los trabajos a la vez de una clase que no tiene el suyo. |
ecenter.jobs.max-concurrent.<CLASE> |
API: 2, DELIVERY: 2 |
Los trabajos a la vez de una clase. |
ecenter.jobs.max-queued-per-user |
100 |
Los trabajos de un usuario que pueden esperar en la cola de una clase. El siguiente se rechaza con 429 TOO_MANY_JOBS y la cabecera Retry-After (en la API de consulta y el MCP, TOO_MANY_RUNNING). No cuentan los que lanzan el planificador, las suscripciones y las alertas. Variable: ECENTER_JOBS_MAXQUEUEDPERUSER. |
ecenter.jobs.result-ttl |
30m |
Lo que se conserva un trabajo terminado y su resultado. |
Cuándo cambiarlo. Si la consola enseña trabajos que esperan mucho en una cola (la alerta salta a los 10 minutos) y la BD del cliente aguanta más, suba esa clase y el pool de sus conexiones a la vez. Si un usuario procesa libros con muchos documentos y llega al tope de la cola, suba max-queued-per-user. Las colas y los trabajos son de cada instancia.
Las consultas a la BD del cliente#
| Propiedad | Por defecto | Qué es |
|---|---|---|
ecenter.querying.timeout |
5m |
El tiempo máximo de una sentencia en la BD del cliente. |
ecenter.querying.max-rows |
100000 |
Las filas de una consulta cuando quien la pide no dice su máximo, y el tope de la consulta ad hoc. |
ecenter.querying.ad-hoc-wait |
30s |
Lo que la consulta ad hoc espera a su resultado antes de responder que sigue en marcha. |
Cubos y gráficos#
| Propiedad | Por defecto | Qué es |
|---|---|---|
ecenter.cube.max-rows |
200000 |
Las combinaciones de valores de las dimensiones que se traen de la BD para un cubo. |
ecenter.cube.max-bytes |
256MB |
La memoria estimada más grande de un cubo calculado. |
ecenter.cube.warn-rows |
100000 |
Las filas estimadas por la BD a partir de las que se pide confirmación antes de calcular un cubo. 0, no preguntar nunca. Lo usan también la API de consulta y el MCP. |
ecenter.cube.max-view-cells |
20000 |
Las celdas de una ventana del visor. |
ecenter.cube.max-export-cells |
1000000 |
Las celdas de una exportación (Excel, texto o HTML). |
ecenter.cube.cached-pivots |
16 |
Las disposiciones pivotadas que se conservan en memoria. |
ecenter.cube.pivot-ttl |
10m |
Lo que se conserva una disposición pivotada sin usarse. |
ecenter.charts.max-points |
20000 |
Los puntos de un gráfico: sus categorías por sus series. |
Formularios y listas#
| Propiedad | Por defecto | Qué es |
|---|---|---|
ecenter.forms.max-rows |
10000 |
Los registros que se leen de un formulario o de un detalle. Si hay más, se marcan como incompletos y hay que acotar la segmentación. |
ecenter.forms.lookup-usage-wait |
30s |
Lo que espera la petición de quién usa un valor de una tabla auxiliar antes de dejarlo en segundo plano. |
ecenter.recordlists.timeout |
30m |
El tiempo máximo de cada sentencia al renovar una lista, y de la espera a otra renovación de la misma lista. |
Datos externos#
| Propiedad | Por defecto | Qué es |
|---|---|---|
spring.servlet.multipart.max-file-size |
100MB (ECENTER_MAX_UPLOAD) |
El fichero más grande que se sube. |
ecenter.externaldata.max-rows |
5000000 |
Filas por tabla de un fichero. |
ecenter.externaldata.max-columns |
1000 |
Columnas por tabla de un fichero. |
ecenter.externaldata.upload-ttl |
24h |
Lo que se conserva una subida sin integrar ni cargar. |
ecenter.externaldata.timeout |
30m |
El tiempo máximo de cada sentencia al cargar. |
ecenter.externaldata.check-timeout |
60s |
El de las comprobaciones que se hacen en la petición (la clave, el enlace). |
ecenter.externaldata.sample-rows |
10 |
Filas de la muestra de cada tabla. |
ecenter.externaldata.preview-rows |
40 |
Filas de cada hoja de Excel que se enseñan para elegir su cabecera y sus rangos. |
ecenter.externaldata.upload-directory |
(vacía: ecenter-external en el directorio temporal) |
La carpeta de los ficheros de las subidas mientras duran. Variable: ECENTER_EXTERNALDATA_UPLOADDIRECTORY. |
ecenter.externaldata.max-shared-strings |
200MB |
Lo que puede ocupar sin comprimir la tabla de textos de un .xlsx, que se lee entera en memoria. |
ecenter.externaldata.max-xls |
30MB |
Lo que puede ocupar un .xls, que se lee entero en memoria. Con más, se pide guardarlo como .xlsx. |
Importante
La carpeta de las subidas es de uso exclusivo de ECenter: se borran de ella los ficheros de las subidas que caducan. No la comparta con otras aplicaciones. Está en el disco de la instancia, el que vigila la alerta de espacio libre.
Capas geográficas#
| Propiedad | Por defecto | Qué es |
|---|---|---|
ecenter.maps.upload-ttl |
24h |
Lo que se conserva un fichero subido sin crear la capa. |
ecenter.maps.max-features |
200000 |
Las entidades de un fichero. |
ecenter.maps.max-dots |
20000 |
Los puntos de una densidad de puntos. |
Agrupaciones#
| Propiedad | Por defecto | Qué es |
|---|---|---|
ecenter.metadata.groupings.max-buckets |
200 |
Divisiones de una agrupación, sin contar «Resto». |
ecenter.metadata.groupings.max-ranges |
200 |
Rangos de una agrupación, entre todas sus divisiones. |
ecenter.metadata.groupings.max-values |
50000 |
Valores asignados de una agrupación, entre todas sus divisiones. |
ecenter.metadata.groupings.load-timeout |
5m |
El tiempo máximo de cada sentencia de la carga de su tabla de trabajo en la BD del cliente. |
ecenter.metadata.groupings.load-wait |
10s |
Lo que Cargar ahora espera antes de dejar la carga en segundo plano. |
Lo que pasa de los tres primeros se rechaza al guardar la agrupación; nunca se recorta.
Importación desde Empowerment Center 7#
| Propiedad | Por defecto | Qué es |
|---|---|---|
ecenter.legacy-import.groupings.max-rows |
100000 |
Las filas que se leen de cada tabla de agrupaciones de EC7. Lo que pase no se lee y se avisa. |
ecenter.legacy-import.groupings.read-timeout |
2m |
El tiempo máximo de cada lectura. |