Hola a tod@s, hoy queríamos compartir con vosotros una configuración que hemos tenido que aplicar en Oracle para limitar los recursos de una base de datos con Resource Manager.
La problemática es que en un servidor de producción tenemos también arrancada una instancia de desarrollo. Cuando se hacen pruebas no controladas, esta instancia podría afectar al rendimiento del entorno productivo por lo que se decidió limitar los recursos de CPU de la instancia para no afectar a los procesos productivos. Esta configuración la hemos hecho con Resource Manager.
¿Qué es Oracle Database Resource Manager?
Oracle Database Resource Manager es un componente integrado de la base de datos que permite:
- Definir planes de recursos que agrupan directivas sobre cómo repartir CPU, I/O y paralelismo.
- Crear consumer groups (grupos de sesiones) y asignarles límites absolutos de utilización.
- Controlar en tiempo real el consumo de recursos para evitar que una carga intensa degrade otras cargas críticas.
- Priorizar tareas de producción frente a pruebas o batch jobs, garantizando acuerdos de nivel de servicio (SLAs).
- Implementar hard‐caps (topes rígidos) para limitar el uso de CPU incluso sin contención.
- Establecer umbrales de tiempo o I/O para forzar preemption y reparto justo de recursos.
- Aislar entornos de desarrollo, data-warehouses y OLTP en la misma instancia.
- Mejorar la estabilidad bajo picos de carga y evitar “noisy neighbors” en entornos consolidados.
- Integrarse con opciones de paralelismo y gestión de undo para controlar sesiones intensivas de memoria.
- Facilitar la planificación y el cumplimiento de políticas corporativas de uso de recursos.
Preparación del entorno
Después de la definición vamos a realizar nuestras pruebas. Hemos utilizado una instancia Oracle 19c con 6 CPU’s. Para estas pruebas, vamos a limitar la utilización de la instancia de desarrollo para que solo pueda utilizar un máximo de 2 CPU’s (el 33% aproximadamente).
Antes de nada, nos aseguramos que la instancia no tenga ningún plan de recursos activo, para ello lanzamos:


Creación del plan y grupos de consumidores
Una vez desactivamos, creamos nuestro plan, un grupo de consumidores de recursos y la directiva. Para ello hemos lanzado lo siguiente:

Crear las directivas del plan


En este caso aplicamos la directiva del 33%, tanto para un grupo llamado DEV_SESSIONS_GROUP como OTHER_GROUPS, que es el grupo por defecto de los usuarios que no tienen definido un grupo de recursos en concreto.
Una vez creado, lanzamos los siguientes comandos para validar los cambios que hemos hecho y que los guarde:

Con estos pasos ya tenemos las directivas creadas y podemos empezar a aplicarlas y hacer nuestras pruebas. Para hacer las pruebas de CPU hemos utilizado 4 sesiones lanzando lo siguiente:

Este proceso directamente consume el 100% de una CPU. Sin activar el resource manager, al estar 4 sesiones lanzando el proceso se ve así la CPU de la máquina:

Activación del plan
Vamos a ver que pasa cuando activamos el plan que hemos creado:

Ahora la CPU la tenemos controlada y se mantiene muy cercana al 33% que hemos puesto de límite:

Lo importante es que el cambio es en caliente y podemos volver a desactivarlo si lo necesitamos:


La CPU vuelve a subir al 83%.
Conclusiones
De esta forma sencilla, limitar recursos en Oracle con Resource Manager permite aislar entornos de instancias Oracle spara que en caso de subida de una de ellas no afecte al resto. En este caso lo hemos aplicado a una instancia, pero en el caso de que tengamos varias y que no queramos que se peleen por los recursos es una buena opción. Espero que os sea de utilidad, nos vemos en próximas entradas, pero si queréis que este tipo de tareas la realicen expertos en bases de datos Oracle, no dudéis en contactarnos sin compromiso.
¿Aún no conoces Query Performance? Descubre cómo puede ayudarte en tu entorno Oracle. Más información en su página de LinkedIn.
Sígue a GPS en LinkedIn
