TableSpace Temporal

Perdona que nuevamente te moleste.
Tengo una duda en el manejo de los tableSpaces Temporales. Algunos de los usuarios están por defecto asignados a un tablespace temporal del tamaño de 2GB. Hoy en la mañana el tamaño del tablespace era de 0,39 MB. Pero después de ejecutar una consulta más hecha se lleno por completo. ¿En qué momento la información temporal desaparece limpiando el espacio ocupadp?, o bien si la información permanece, ¿cuál es el mejor método para calcular la cantidad de MB que debo aumentar en el tablespace? Y ¿Qué cuidados debo tener?
Muchas Gracias por la futura respuesta + todas aquellas que ya me has dado.
1

1 Respuesta

64.225 pts. Diego Rodrigo Munoz Herrera, de 34 anios de edad,...
El tma es asi:
Los usuarios se conectan a la base de datos y ejecutan consultas que eventualmente realizan sorts.
Los sorts se ejecutan en memoria ocupando como máximo lo que se indica en el parámetro SORT_AREA_SIZE en el init. Ora. (Usualmente seteado por default en 65k ) Este parámetro es para cada usuario pero puede ser modificado "en caliente" para una sesión especifica.
Una vez que el requerimiento de memoria excede al parámetro SORT_AREA_SIZE todos los datos se bajan a disco. Si, a los tablespaces temporales, que es donde se sigue realizando el sort.
Obviamente esto toma más tiempo para un ordenamiento que el que se puede tomar ejecutándolo en memoria.
Al bajar los datos a disco, Oracle crear segmentos temporales (tablas temporales) que toman como initial extent el parámetro seteado para el tablespace temporal que esta asociado al usuario (Alter tablespace default storage (initial 65k)) por ejemplo.
Y así es como se llena de datos el tablespace temporal.
¿En qué momento se eliminan los tablespaces temporales?.
Hasta donde sé... en el momento que a Oracle le da la gana... pero por ahí he leído (pero no comprobado) que ejecutando un coalesce al tablespace estos segmentos se eliminan.
¿Cómo podemos setear parámetros que permitan optimizar esto?
1) Asignar un sort_area_size más grande : Para que la mayoría de los sorts se hagan en memoria.
Yo, por ejemplo, lo seteo en 1M.
OJO: Este parámetro es por usuario así que ten cuidado, si tienes muchas sesiones, cada una de ellas va a reservar 1Mb para sus sorts.
OJO: hay otro parámetro relacionado : El sort_area_retained_size .. este parámetro indica que DESPUÉS de bajar a disco los datos de memoria, cuanto espacio dejaremos para la sesión para otros sorts ... de manera que sorts adicionales dentro del query se hagan en memoria. Cual es parámetro optimo .. no se .. por ahí yo lo dejo 102400 (10% del sort_area_size).
2) Asignar un default initial_extent igual al sort_area_size o que sea múltiplo de el. Así evitamos que al internar bajar 1MB de datos de memoria, estos se fragmenten en el tablespace temporal.
Por ejemplo yo lo seteo en : Sort_area_size por 2.
Nada más,
Suerte
Diego.
PD. Como siempre no se olvide de cerrar la pregunta.
Oye, Excelente respuesta. No tengo más que agradecerte y felicitarte no solo por tu conocimiento so no también por la manera en que expresas las respuestas. Muchas Gracias.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas