Uso de memoria de O3 Server
O3 Server utiliza los recursos de forma eficiente. La forma eficiente de utilizar la memoria del O3 Server permite flexibilidad y escalabilidad.
Generalidades
Pruebas detalladas han probado que un cantidad importante de tiempo es consumida cada vez que un cubo se abre desde el O3 Server. Esto se debe a la carga física de la metadata, así como también el establecimiento de las estructuras de datos. Entonces, por qué no reutilizar el trabajo que ya ha sido hecho? Esta simple pregunta y su respuesta nos conducen a la creación de una cache de cubos residente en el O3 Server. Esta caché de cubos mantiene los cubos abiertos aun cuando no hay usuarios conectados a ellos.
Estos cubos pueden ser monitoreados utilizando el Administrador del O3 Server, debajo del sub árbol "Cubos Abiertos".
Con el Administrador del O3 Server también es posible controlar la cantidad de cubos que son mantenidos en ese estado (abiertos, sin conexión). Este parámetro se llama ""Cantidad de Cubos en cache" y se encuentra en el panel de servicios de los cubos, junto con el parámetro "Estado".
Un tamaño de cache de n cubos indica que, como máximo, se mantendrán n cubos sin conexión, esperando por nuevos usuarios que los utilicen nuevamente. Como esos cubos no utilizados consumen recursos de memoria que pueden ser requeridos por otros cubos, cuando la caché está llena, eventualmente serán cerrados y descartados.
Con el Administrador del O3 Server siempre es posible forzar la eliminación de cualquier cubo de la caché, simplemente removiéndolo del subárbol "Cubos Abiertos".
Abriendo cubos al iniciar el Servidor
Otra característica interesante, es "La prioridad de lectura al iniciar". Este parámetro puede ser fijado utilizando el Administrador del O3 Server, para cada cubo publicado en el O3 Server. Se encuentra en el mismo editor en donde se ingresa el camino al archivo local.
El propósito de este parámetro es sugerir al O3 Server que cada vez que es levantado, ciertos cubos deberían ser cargados automáticamente. Esto asegura que, cuando el primer usuario se conecte a cualquiera de esos cubos, todo el proceso de carga inicial ya fue hecho, por lo cual la consulta inicial toma considerablemente menos tiempo.
Este parámetro puede tomar uno de los siguientes 6 valores:
- Ninguna
- Muy baja
- Baja
- Normal
- Alta
- Muy Alta
"Ninguna" es el valor por defecto para cubos nuevos, y significa que el cubo no será cargado al iniciar el servidor. Los otros ayudan al O3 Server a saber en qué orden serán cargados. Se pueden levantar en el inicio como máximo n cubos, siendo n el tamaño de la caché mencionado anteriormente.
¿Cómo funciona la caché de cubos?
La característica principal es que distribuye automáticamente los recursos disponibles de memoria entre los cubos abiertos, cerrando automáticamente los cubos sin conexiones si se necesita más memoria.
Se utilizan tres variables para controlar su comportamiento:
- una propiedad del sistema para especificar la máxima cantidad de memoria disponible,
- la cantidad mínima de bloques de memoria que los cubos necesitan para correr, y
- la máxima cantidad de bloques que los cubos pueden utilizar en memoria.
La propiedad del sistema mencionada anteriormente es "ideasoft.o3.pool.totalMaxCache", que tiene un valor por defecto de 25000 bloques. Esto significa que, por defecto, O3 Server utilizará solamente hasta 25000 bloques de memoria para distribuir entre todos sus cubos, tengan estos conexiones abiertas o no. Esta property se encuentra definida en el archivo <O3>\jboss\server\default\ideasoft-o3\GServer.properties.
La cantidad mínima de bloques necesarios para los cubos es calculada, sumando la cantidad mínima de bloques necesaria para abrir cada cubo. Este número resultado debe ser menor que el especificado en la propiedad anterior. Cada vez que un cubo nuevo va a ser utilizado, el mínimo es recalculado y si el resultado excede el máximo permitido, y no hay cubos abiertos sin conexiones, el pedido es denegado. En situaciones como esta, se genera un log para que el Administrador del Server pueda saber que está pasando. Si por el contrario, existen cubos abiertos sin conexiones, estos son cerrados, liberando así recursos.
La máxima cantidad de bloques para cada cubo es utilizado para distribuir la memoria disponible entre los cubos abiertos. El criterio utilizado para esta distribución es que mayor máximo significa más memoria con respecto a los otros cubos abiertos.
La cantidad mínima de bloques necesarias para un cubo, y el máximo permitido, son especificados en tiempo de diseño, con O3 Designer, utilizando los parámetros "Min Cache" y "Max Cache".
Cuando los cubos son publicados en el O3 Server, estos parámetros pueden modificarse en tiempo de ejecución, para controlar la cantidad de memoria que cada cubo recibe. Valores que se vuelven a su valor original (modelo multidimensional), cuando se resetea el O3 Server.