No obstante en las nuevas versiones de las bases de datos Oracle, la gestión de la memoria PGA se realiza de forma automática y mucho más dinámica.
Supongamos que ejecutamos algún tipo de sentencia SQL y que esta sentencia SQL tiene que realizar algún tipo de operación del tipo:
- Enlazar tablas usando un algoritmo de tipo hash (Hash join).
- Ordenar datos (operación de tipo SORT), por ejemplo cuando se aplican cláusulas como ORDER BY, DISTINCT o GROUP BY.
- Realizar cualquier operación que necesite la utilización de memoria.
El objetivo de la gestión automática de la memoria PGA es no utilizar toda la memoria a la vez. La idea es reservar siempre algo de memoria previniendo la incorporación momentánea de usuarios adicionales y evitando situaciones en la que un determinado usuario acapare toda la memoria disponible.
De todas formas los DBA (analistas de bases de datos) pueden elegir entre una gestión manual de la memoria o una gestión automática. Yo personalmente me inclino por utilizar por defecto la gestión automática de la memoria PGA.
Por lo tanto, es posible asignar valores fijos a los parámetros SORT_AREA_SIZE y HASH_AREA_SIZE, el problema es que los valores recomendables para estos parámetros van a variar a lo largo del tiempo, ya que dichos valores no pueden ser idénticos cuando la base de datos Oracle cuenta con, por ejemplo, cinco usuarios activos, frente a unas horas más tarde cuando el número de usuarios activos va a ser de cuatrocientos.
Por eso resulta muy recomendable asignar al parámetro WORKAREA_SIZE_POLICY el valor de AUTO, momento en el cual entra en juego el parámetro PGA_AGGREGATE_TARGET, parámetro que sirve para asignar la máxima cantidad de memoria PGA que la base de datos Oracle debe procurar utilizar. De esta manera, la base de datos Oracle distribuirá dicha memoria entre todas las sesiones activas. Además, desde la versión Oracle 9i Release 2, el paquete de estadísticas disponible a través de la vista de rendimiento dinámico V$, que es accesible desde Oracle Enterprise Manager, nos indica cual debe ser, en nuestro sistema, el valor óptimo del parámetro PGA_AGGREGATE_TARGET para minimizar las operaciones de entrada/salida en el espacio de alojamiento temporal. Esta información nos permitirá cambiar dinámicamente el tamaño de nuestra memoria PGA o tomar la decisión de aumentar el tamaño de la memoria RAM en nuestro servidor para conseguir un rendimiento óptimo de nuestra base de datos Oracle.
Situaciones en las puede ser necesario un uso extensivo de la memoria, por ejemplo, si necesitamos ejecutar diariamente un procedimiento PLSQL que realiza hash joins tremendamente grandes u otro tipo de acciones que requieren utilizar mucha memoria PGA, entonces puede ser recomendable crear un script SQL para ejecutar dicho procedimiento, script que utilizará el comando ALTER SESSION para que dicha sesión pueda hacer uso de todos los recursos de memoria PGA disponibles mediante la inicialización adecuada de los parámetros SORT_AREA_SIZE y HASH_AREA_SIZE.
En conclusión, mi recomendación es hacer uso de la gestión automática de la memoria PGA para las sesiones de usuario y aplicaciones que se ejecutan en el día a día. La gestión manual de la memoria PGA sólo tiene sentido para aquellos procesos con mucha carga de trabajo, que requieren un uso extensivo de la memoria PGA y que se ejecutarán en periodos de tiempo durante los cuales sólo estarán en ejecución este tipo de procesos (generalmente serán trabajos programados que se lanzan en horas con poca o ninguna actividad de usuarios).
2 comentarios:
Muy bueno tu artículo.
Deseo consultarte por el siguiente párrafo, cuando hablas de asignación de recursos para procesos batch:
"mediante la inicialización adecuada de los parámetros SORT_AREA_SIZE y HASH_AREA_SIZE"
Qué es una "inicialización adecuada" ? A cuánto llevo el SORT_AREA_SIZE / HASH_AREA_SIZE ?
Muchas gracias
Hola Belquad,
El valor recomendable para los parámetros SORT_AREA_SIZE y HASH_AREA_SIZE oscilará entre 1 y 2MB. No obstante, dependiendo de las características de la base de datos Oracle con que estemos tratando, es posible que sea preciso asignar valores más grandes.
Publicar un comentario en la entrada