Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Inittrans, Maxtrans
Extents Segmentos Clusula Storage Introduccin tablespaces, datafiles Tablespaces Datafiles Tablas
Clase 2: Estructuras lgicas y fsicas(I) Claudia Gonzlez ___________________________________________________________________________________ Estructuras Fsicas: bloque de datos del sistema operativo, datafile, redo log file, control file. Estructuras Lgicas: bloque de datos de Oracle, extent, segmento, tablespace, base de datos.
Bloques de Datos
Oracle maneja el espacio de almacenamiento en datafiles de una base de datos en unidades llamadas bloques de datos. Un bloque de datos es la unidad ms pequea de datos usada por una base de datos. Oracle solicita los datos en mltiplos de los bloques de datos de Oracle y no del sistema operativo. El tamao estndar del bloque se puede conocer consultando el parmetro DB_BLOCK_SIZE. Los tamaos de los bloques de datos deben ser un mltiplo de los tamaos de bloques del sistema operativo, entonado para evitar I/Os innecesarios.
Clase 2: Estructuras lgicas y fsicas(I) Claudia Gonzlez ___________________________________________________________________________________ Directorio de tablas Contiene informacin acerca de las tablas que contienen tuplas en el bloque. Directorio de Registros Contiene informacin de las tuplas actuales en el bloque (incluyendo direcciones para cada row piece trozo de registro en el rea de datos). Despus que el espacio ha sido asignado en el directorio de registros de un bloque de datos, ste no es reclamado cuando el registro es borrado. Oracle reutiliza el espacio slo cuando se insertan nuevos registros en el bloque. Overhead El encabezado del bloque de datos, directorio de tablas y directorio de registros son denominados de forma colectiva como overhead. Datos de los registros Contiene la tabla o datos de ndices. Los registros puede atravesar bloques. Espacio libre El espacio libre es asignado para la insercin de nuevos registros y para la actualizacin de registros que requieran espacio adicional. En los bloques de datos asignados para segmentos de datos de una tabla o clster o para los segmentos de un ndice, el espacio libre puede almacenar registros de transacciones. Un registro de una transaccin es requerido un un bloque para cada instruccin de INSERT, UPDATE, DELETE y SELECT FOR UDATE que accede una o ms registros en el bloque. En la mayora de los SOs un registro de una transaccin requiere 23 bytes.
Clase 2: Estructuras lgicas y fsicas(I) Claudia Gonzlez ___________________________________________________________________________________ por una instruccin de commit de aquella que libera el espacio para poder utilizarlo. El espacio liberado puede o no ser contiguo con el rea de espacio libre en el bloque. Oracle fusiona los espacios libres slo cuando: una instruccin de INSERT o UPDATE intenta usar un bloque que contiene suficiente espacio libre para contener un nuevo trozo de un registro y el espacio libre esta fragmentado.
Explicar bien el grfico anterior... INITTRANS y MAXTRANS permiten especificar el nmero inicial y mximo de slots para transacciones concurrentes que se crearn en el bloque que almacene ndices o datos. Los slots de transacciones se utilizan para almacenar la informacin de las transacciones que estn haciendo cambios sobre el bloque de datos en un instante dado. Una transaccin puede utilizar un slot si est cambiando mas de una fila o entrada de un ndice. INITTRANS, cuyo valor por defecto es 1 para los segmentos de datos y 2 para los segmentos de ndices, garantiza un mnimo nivel de concurrencia. Por ejemplo, si INITTRANS se define como 3 para cierto objeto lgico (y por lo tanto para los bloques de datos de los extents incluidos en los segmentos asociados al objeto), se asegura que al menos tres transacciones concurrentes podrn hacer cambios en el bloque. Si se requiere ms espacio (ms transacciones concurrentes requieren de alguno de los bloques de datos en el segmento) el espacio se tomar del espacio libre del bloque. MAXTRANS, cuyo valor por defecto es de 255, delimita el nmero de transacciones que pueden hacer cambios a los datos en un bloque de datos o ndices. Una vez definido, este parmetro garantiza que habr suficiente espacio en el bloque para albergar la informacin del nmero de
Extents
Un extent es una unidad lgica de asignacin de espacio de almacenamiento en una base de datos hecha de un nmero continuo de bloques de datos. Uno o ms extents hacen un segmento. Cuando el espacio existente en el segmento est completamente usado, Oracle asigna un nuevo extent para el segmento. Cuando se crea una tabla, Oracle asigna el segmento de datos de la tabla con un extent inicial que se corresponde con un nmero de bloques de datos. Si los bloques de datos del extent inicial del segmento llegan a estar llenos y se requiere ms espacio, Oracle asigna un extent incremental para el segmento. Un extent incremental es un extent subsiguiente del mismo tamao que el anterior o ms grande. Por propsitos de mantenimiento, el encabezado del bloque de cada segmento contiene un directorio de los extents en el segmento.
En los tablespaces manejados por el diccionario de datos, cuando un segmento requiere un extent ms grande de los extents disponibles, Oracle identifica y combina los extents continuos para formar uno ms grande. sto se denomina fusin de extents. Este proceso no es necesario en los tablespaces manejados localmente, porque los bitmaps registran automticamente el espacio libre.
Segmentos
Un segmento es conjunto de extents que contiene todos los datos de una estructura de almacenamiento lgica (como puede ser una tabla) en un tablespace. Por ejemplo para cada tabla, Oracle asigna uno o ms extents para forma un segmento de datos de la tabla. Oracle utiliza 4 tipos de segmentos: Segmentos de Datos Segmentos de ndices
Segmentos de Datos
Son utilizados para almacenar los datos de: Una tabla que no es particionada o clster Una particin de una tabla particionada Un clster de tablas
Segmentos de ndices
Cada ndice no particionado tiene un segmento para almacenar sus datos. En el caso de los ndices particionados cada particin tiene un segmento asignado
Segmentos Temporales
Las siguientes operaciones requieren del uso de segmentos temporales:
CREATE INDEX SELECT ... ORDER BY SELECT DISTINCT ... SELECT ... GROUP BY SELECT ... UNION SELECT ... INTERSECT SELECT ... MINUS
Los segmentos temporales se pueden almacenar en cualquier tablespace disponible para el usuario, uno de esos puede ser el tablespace temporal, se usa por defecto cuando el usuario tiene asignado algn tablespace temporal. Si no hay ningn tablespace temporal definido para el usuario se utiliza SYSTEM. Oracle borra los segmentos temporales cuando la instruccin se completa. Las tablas temporales se almacenan en segmentos temporales. Las tablas temporales pueden tener el alcance de una transaccin o de una sesin. Dependiendo de su alcance son borradas cuando la transaccin o la sesin termine.
Segmentos de Ordenamiento
Los segmentos de ordenamiento son usados cuando un segmentos es compartido por muchas operaciones de ordenamiento. Un segmento de ordenamiento existe para cada instancia que lleva a cabo una operacin de ordenamiento en un tablespace dado. Los segmentos de ordenamiento crecen, mediante la peticin de extents, hasta que el tamao del segmento es mayor o igual a la demanda total de almacenamiento de todas las operaciones de ordenamiento activas en una instancia, no son liberados.
Clusula Storage
INITIAL NEXT Tamao, en bytes, del primer extent asignado cuando un segmento es creado. Este parmetro no puede especificarme mediante una instruccin ALTER. Tamao, en bytes, del prximo extent incremental a ser asignado a un segmento. El segundo extent es igual al tamao asignado en NEXT. Los siguientes extents tendrn el tamao del NEXT previo multiplicado por (1 + PCTINCREASE/100). NEXTi=(1+ PCTINCREASE/100) NEXTi-1. Hacer ejemplo... Porcentaje que representa el incremento del tamao del nuevo extent con respecto al anterior extent asignado a un segmento. Si el PCTINCREASE es 0, entonces todos los extents son del mismo tamao. Si el PCTINCREASE es mayor que 0, entonces cada NEXT extent debe ser calculado, y crecer en el porcentaje especificado en el PCTINCREASE. PCTINCREASE no puede ser negativo.
PCTINCREASE
MINEXTENTS
El nmero total de extents para ser asignados cuando el segmento es creado. Esto permite una gran asignacin de espacio en el momento de creacin, an si el espacio contiguo no esta disponible. El nmero total de extents, incluyendo el primero, que pueden ser asignados para un segmento.
MAXEXTENTS
Tablespaces, Datafiles
Una base de datos Oracle consiste de una o ms unidades de almacenamiento lgico llamados tablespaces, que almacenan colectivamente todos los datos de la base de datos. Cada tablespace en una base de datos Oracle consiste de uno o ms archivos llamados datafiles, que son estructuras fsicas del sistema operativo. Los datos de una base de datos son almacenados colectivamente en datafiles que constituyen cada tablespace de la base de datos. Oracle internamente utiliza interfaces estndar de file system para crear y borrar archivos segn lo necesite para las siguientes estructuras de la base de datos: Tablespaces Online redo lo files Control files
Undo tablespaces
Son utilizados para informacin de undo. Cada transaccin, a penas se ejecuta la primera operacin DML, es asignada a un segmento de undo en el tablespace de undo actual. Si la instancia no tiene un tablespace de undo, la transaccin se asigna al segmento de undo del tablespace SYSTEM. Cada tablespace est compuesto de un conjunto de datafiles de undo que son locally managed. Como otros tipos de tablespaces, los bloques de undo son agrupados en extents y el status de cada
Clase 2: Estructuras lgicas y fsicas(I) Claudia Gonzlez ___________________________________________________________________________________ extent es representado en un bitmap.
Tablespace Temporal
Cuando SYSTEM es locally managed sus segmentos no se pueden utilizar como segmentos temporales. Para aquellos manejados por el diccionario de datos si se puede.
Clase 2: Estructuras lgicas y fsicas(I) Claudia Gonzlez ___________________________________________________________________________________ eliminando la necesidad de fusionar los extents libres adyacentes. El manejo de los extents localmente evita operaciones de manejo de espacio recursivo. Como las que pueden ocurrir en los tablespaces manejados por el diccionario si el consumo o liberacin de espacio en un extent resulta en otra operacin que consume o libera espacio en una tabla del diccionario de datos o un segmento de rollback.
Automticamente: Oracle utiliza bitmaps para manejar el espacio libre en el segmento. Un bitmap, es un mapa que describe el estado de cada bloque de datos en un segmento con respecto a la cantidad despacio en el bloque disponible para la insercin de registros. Mientras ms o menos espacio este disponible en un bloque de datos, su nuevo estado es reflejado en el bitmap. Los bitmaps permite a Oracle manejar el espacio libre ms automticamente, de esta manera el manejo del espacio se denomina manejo automtico del espacio del segmento. Manualmente: Oracle utiliza un free list para el manejo del espacio libre en un segmento. Free list son listas de los bloques de datos que tienen espacio disponible para la insercin de tuplas. Manejo manual.
Datafiles
Oracle crea un datafile para un tablespace mediante la asignacin de una cantidad especfica de espacio en disco ms el overhead requerido para el encabezado del archivo.
Clase 2: Estructuras lgicas y fsicas(I) Claudia Gonzlez ___________________________________________________________________________________ Cuando un datafile es creado, el espacio asignado en disco es reclamado y se le da un formato, pero no contendr ningn dato del usuario. Oracle reserva el espacio para resguardar los datos para segmentos futuros asociados al tablespace. A medida que los datos crecen en el tablespace, Oracle utiliza el espacio libre en el datafile para asignarlo a los extents del segmento. Un objeto de un esquema no corresponde a un datafile especfico. Un datafile es un repositorio para los datos de cualquier objeto en un tablespace especfico. Oracle asigna espacio para los datos asociados con un objeto del esquema en uno o ms datafiles de un tablespace. Por lo cual, un objeto puede atravesar ms de un datafile.
Tablas Regulares
Tablas heap.
Tablas particionadas
Permiten particionar los datos en piezas ms pequeas y manejables, llamadas particiones o an subparticiones. Los ndices pueden particionarse de la misma manera. Cada particin puede ser manejada individualmente y puede operar independientemente de otras particiones, proveiendo una estructura que puede ser entonada ms apropiadamente para su disponibilidad y desempeo. Se toca en detalle en la siguiente clase.
Clase 2: Estructuras lgicas y fsicas(I) Claudia Gonzlez ___________________________________________________________________________________ B, organizados por la clave primaria. Junto con las columnas de la clave primaria se almacenan el resto de las columnas tambin. Cada entrada en el rbol B contiene: <primary_key_value ,
non_primary_key_column_values> .
Las tablas organizadas por ndice son similares a la configuracin de una tabla ordinaria y un ndice en una o ms de las columnas, pero en lugar de mantener por separado las dos estructuras, una para la tabla y otra para el rbol B, la base de datos mantiene solamente un nico rbol B. En lugar de almacenarse un apuntador (rowid) para recuperar el registro en la tabla, se almacenan las columnas no claves.
Tablas Organizadas por ndice con rea de Overflow Las entradas de un ndice en un rbol B generalmente son bastante pequeas, porque ellas consisten nicamente del valor de la clave y un apuntador (rowid). En las tablas organizadas por ndice, sin embargo, las entradas del rbol B pueden ser grandes, porque ellas consisten de un registro completo. Esto podria afectar el desempeo en caso de ser registros muy grandes. Por ellos Oracle provee la clsula OVERFLOW, se puede especificar un tablespace de overflow, de ser necesario, y el registro se dividir en dos partes, una que ser almacenada en el rbol B y la otra el rea de overflow. Las entradas en el rbol contendrn los valores de la clave primaria, opcionalmente algunas columnas no claves y un apuntador (rowid fsico) sealando al rea de overflow donde se encuentra el resto del registro. Con el OVERFLOW, se pueden utilizar dos clusulas: PCTTHRESHOLD e INCLUDING, para controlar como Oracle determina cuando un registro debe ser almacenado en dos partes y a partir de cul columna se particiona el registro. Usando PCTTHRESHOLD, se puede especificar el valor lmite como un porcentaje del tamao del bloque, si todas las columnas no claves pueden ser acomodadas en ese lmite especificado, el registro
Clase 2: Estructuras lgicas y fsicas(I) Claudia Gonzlez ___________________________________________________________________________________ no se particionar. De otra manera comenzando con la primera columna no clave que no pueda ser acomodada, el resto de las columnas no claves ser almacenadas en el rea de overflow. La clusula INCLUDING permite especificar el nombre de la columna, entre las columnas no claves, durante la creacin de la tabla, tal que el resto de las columnas que se encuentren despus de esta columna sern almacenadas en el rea de overflow. Aunque dependiendo del PCTTHRESHOLD, algunas columnas no claves que se encuentren antes de la columna especificada con la clusula INCLUDING podran tener que almacenarse en el rea de overflow.
Tablas Cluster
Son una estructura fsica para almacenar los datos en una tabla. Un cluster es un grupo de tablas que comparten los mismos bloques de datos porque ellas comparten columnas comunes y son usadas juntas frecuentemente. Por ejemplo las tablas employees y departments comparten la columna department_id. Al clusterizar las tablas employees y departments, Oracle almacena fsicamente todos los registro para cada departamento junto con su correspondientes empleados en el mismo bloque de datos, como se muestra a continuacin:
Entre las ventajas que ofrece esta estructura se tiene El I/O de disco reduce para los joins de las tablas clusterizadas.
El tiempo de acceso mejora para los joins de las tablas clusterizadas. La clave del closter es almacenada slo una vez en el cluster y en el ndice del cluster, sin importar cuantos registros de diversas tablas la contengan. Por lo tanto, se requiere menos espacio para almacenar la estructura del cluster y el ndice que las tablas no clusterizadas.
Hash Clusters Los Hash cluster agrupan las tablas de datos en una manera similar al ndice regular del cluster (que utiliza un ndice en lugar de una funcin de hash). Sin embargo, un registro almacenado en un hash cluster se basa en el resultado de aplicar una funcin de hash al valor de la clave de los registros del cluster. Todos los registros con el mismo valor de la clave son almacenados juntos en el disco. Los Hash cluster son una mejor opcin que el clster regular con un ndice o una tabla indexada cuando una tabla se requiere con frecuencia para consultas de igualdad (por ejemplo para retornar todos los registros para el departamento 10). El valor de la clave de hash resultante apunta directamente al rea n disco que almacena los registros. Para usar hashing se debe crear un hash cluster y cargar las tablas en el cluster. Oracle almacena fsicamente los registros de una tabla en el hash cluster y los retorna de acuerdo a los resultados de la funcin de hash. Oracle usa una funcin de hash para generar una distribucin de los valores numricos, llamados valores de hash, que esta basada en los valores especficos de la clave del cluster. Oracle tiene una estructura de hash? Para una sla tabla se puede usar el hash cluster como una estructura de hash simple.