Saltar a contenido

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.
ecenter:
  jobs:
    max-concurrent:
      CUBE: 6
      API: 2
      DELIVERY: 2

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.

Véase también#