Estructuras de Oracle

Un segmento almacena la informaci�n de una estructura l�gica de Oracle dentro de un Tablespace. Est� formado por una o m�s extensiones y, a medida que va creciendo el segmento se van asignando nuevas extensiones al mismo. Hay cuatro tipos de segmentos: de datos, de �ndices, temporales y de rollback.

.�Segmentos de datos e �ndices

En un segmento de datos se almacenan todos los datos de una tabla que no est� particionada o que no forme parte de un cluster, de una partici�n de una tabla particionada o, de un cluster de tablas. Se crea el segmento de datos a la hora de ejecutar la sentencia create que crea la tabla, cluster o partici�n. En dicha sentencia se indican tambi�n los valores de la cl�usula storage, que se han explicado en el cap�tulo que hace referencia a las extensiones, y va a determinar la forma en que dicho segmento va a ir asignando y desasignando las extensiones.

En el caso de los �ndices, existe un segmento para cada �ndice no particionado o para cada partici�n de un �ndice particionado. Al igual que con las tablas, los segmentos de �ndices se crean al ejecutar la sentencia de creaci�n de �ndices en la cual, tambi�n se pueden indicar valores para la cl�usula storage y as� parametrizar la forma en que se le asignar�n las extensiones a medida que vaya creciendo.

.�Segmentos temporales

Cuando Oracle procesa las consultas se puede ver en la necesidad de utilizar espacio en disco para poder llevar a cabo algunas partes del parsing (an�lisis) y de la ejecuci�n de la misma. Solamente utilizar� este tipo de segmentos cuando no pueda realizar la consulta �ntegramente en memoria o cuando no pueda buscarse un m�todo alternativo para realizarla utilizando los �ndices.

Hay varios tipos de sentencias en las que Oracle se ve en la obligaci�n de utilizar los segmentos temporales:

SELECT ... ORDER BY. 
CREATE INDEX. 
SELECT ... GROUP BY. 
SELECT ... UNION ... 
SELECT DISTINCT ... 
SELECT INSERSEC ... 
SELECT MINUS ... 

Se puede dar el caso en el que algunas consultas en las que intervengan joins en los que no haya �ndices que faciliten la uni�n y en las que se den a la vez sentencias del tipo "group by" y "order by" o incluso "distinct", en las que no solo se requiere de un nuevo segmento temporal sino que pueden adquirirse dos segmentos para poder realizar dichas consultas.

Como es natural, cuantas m�s operaciones se hagan en memoria mejor ser� el rendimiento del sistema, por lo que si en nuestra aplicaci�n existe un n�mero considerable de consultas de las mencionadas anteriormente, resulta muy apropiado hacer un tunning para decidir si ampliar la zona de memoria reservada para las ordenaciones, aumentando el valor del par�metro SORT_AREA_SIZE.

En Oracle tambi�n existen las tablas temporales y los �ndices temporales para dichas tablas. Estos objetos tamb�en utilizan segmentos temporales, pero se les asigna y desasigna de forma diferente a como se hace con las consultas, creaci�n de �ndices y ordenaciones.

.�Asignaci�n de segmentos temporales en consultas.

En las consultas, los segmentos temporales se van asignando seg�n se van necesitando y, al terminar la ejecuci�n de la sentencia, se desasignan. Para determinar en qu� tablespace se van a crear los segmentos temporales necesarios para estas consultas, a cada usuario de la base de datos, se le asigna un tablespace para dicha funci�n. Esto se realiza con el siguiente comando:

Alter user nombre_de_usuario default tablespace nombre_tablespace_temporal; 

Por defecto, en la creaci�n del usuario tambi�n se le puede asignar un tablespace temporal y, si no se le indica, el sistema le asigna por defecto siempre el tablespace SYSTEM. Es muy importante que ning�n esquema o usuario tenga como tablespace temporal el SYSTEM por varios motivos. En primer lugar, porque SYTEM no es un tablespace temporal y por lo tanto, no est� optimizado para la gesti�n de los segmentos temporales, en segundo lugar, al utilizar SYSTEM como tablespace temporal, se aumenta la fragmentaci�n de dicho tablespace por culpa de los segmentos temporales que se van creando y borrando en medio de segmentos de datos e �ndices con lo que disminuye dr�sticamente el rendimiento del tablespace principal de la base de datos, y por �ltimo, se corre el peligro de que se llene este tablespace por culpa de alguna select mal escrita y que se descontrole aumentando desproporcinadamente el tama�o del segmento temporal creado para ejecutarla.

.�Asignaci�n de segmentos temporales para tablas temporales

El segmento requerido para una tabla temporal y para sus �ndices temporales se asigna en el momento de producirse la primera insert en dicha tabla. Este segmento al igual que en el caso anterior, se crear� en el tablespace temporal del usuario que est� creando la tabla temporal. Para conocer el tablespace por defecto de un usuario y su tablespace temporal, podemos consultar la vista dba_users.

Select username, default_tablespace, temporary_tablespace from dba_users; 

La explicaci�n del funcionamiento de las tablas temporales excede los objetivos de este manual por lo que no se va a profundizar m�s en ellas, simplemente se indicar� aqu� que la eliminaci�n del segmento temporal que se ha creado se har� dependiendo del tipo de tabla temporal que se ha creado. Cuando la tabla temporal es espec�fica para una transacci�n, Oracle eliminar� el segmento creado al finalizar dicha transacci�n, y si por el contrario, la tabla es espec�fica para la sesi�n, su segmento se eliminar� al terminarse esta sesi�n.

.�Temas Relacionados

Relacionado directamente con este tema, se pueden estudiar tambi�n los siguientes temas:

  • �Qu� son las tablas temporales y para qu� se utilizan?.
  • �C�mo saber cuanto espacio se est� utilizando en un segmento temporal?.
  • �C�mo saber qu� sentencias se est�n ejecutando en los segmentos temporales?.
  • �Cuantas extensiones debe tener un segmento de datos o �ndices?.
  • �Qu� son las transacciones y los parametros Initrans y Maxtrans?.

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
SIGUIENTE ARTÍCULO