Sunteți pe pagina 1din 16

CI-5313 Arquitectura y Administracin de DBMSs I

Prof. NUNZIO SAVINO Septiembre-Diciembre 2001

Tema Nro. 2 Los Objetos de ORACLE 8: Almacenamiento y Caractersticas

Los Objetos de ORACLE8: Almacenamiento y Caractersticas (Parte Nro. 2)


Estructura Fsica para el Almacenamiento de Datos en Tablas
Ubicacin de Filas: ROWIDs extendidos y ROWIDs restringidos
El tipo de datos ROWID permite distinguir, a nivel lgico, una columna especial (pseudo columna) que posee toda tabla en ORACLE y que puede ser consultada en cualquier momento. Esta columna recibe el mismo nombre que el tipo de datos, es decir rowid. Por ser el rowid una pseudo columna de toda tabla en ORACLE, cada fila posee un valor de rowid que permite almacenar la direccin de la fila dentro de toda la estructura de memoria secundaria que ORACLE mantiene para tablas e ndices (estn o no particionados). Toda fila en una tabla no agrupada posee un nico ROWID que permite ubicar el primer row piece de la fila (primero, ya que si la fila est encadenada poseer varios row pieces). En el caso de tablas agrupadas, las filas de tablas diferentes que se encuentren en el mismo bloque de datos ORACLE podrn tener el mismo ROWID. Para seleccionar el rowid de una fila basta con utilizar el comando tradicional SELECT. Por ejemplo: SELECT rowid FROM EMPLEADO Devolver la direccin fsica del primer row piece de cada una de las filas de la tabla EMPLEADO. Los ROWIDs poseen las siguientes caractersticas: Es un identificador unvoco para cada fila en la base de datos (obviando el caso especial de clusters donde hay una estructura que controla de por s la relacin entre filas). Los ROWIDs no se almacenan fsicamente como una columna de cada tabla, por esta razn se dice que son pseudo columnas. Aunque el ROWID realmente no provee la direccin especfica de la fila sobre la abstraccin de bloques que provee el sistema de operacin, puede ser utilizado para localizar una fila ya que indica su ubicacin dentro de la abstraccin fsica que maneja ORACLE. Los ROWIDs proveen el mecanismo de acceso ms rpido para las filas de una tabla. Los ROWIDs se utilizan en las estructuras de ndice (que veremos posteriormente) para indicar las filas que poseen un conjunto de valores para la clave. En ORACLE se habla de dos formatos para los ROWIDs: los ROWIDs extendidos y los ROWIDs restringidos. Este trmino permite indicar dos tipos de estructuras para los ROWIDs. Los ROWIDs extendidos son los que actualmente se utilizan en ORACLE (a partir de la versin 8), mientras que los restringidos se utilizaron en versiones anteriores. Nuestro inters particular est en el de los ROWIDs extendidos que son los que se estudiarn a continuacin. La razn por la cual se introdujo este nuevo tipo de ROWIDs obedeci a un Pgina 1 de 16

CI-5313 Arquitectura y Administracin de DBMSs I

Prof. NUNZIO SAVINO Septiembre-Diciembre 2001

Tema Nro. 2 Los Objetos de ORACLE 8: Almacenamiento y Caractersticas

cambio en las polticas de almacenamiento del DBMS. En la versin 7 y sus anteriores, el nmero de archivo de datos era nico en toda la base de datos, imponiendo as una mayor restriccin en el espacio mximo de la misma. En ORACLE8 esta restriccin fue eliminada y el numero de archivo de datos es relativo al tablespace al que pertenece por lo que se permite que el nmero de archivos de datos exceda a los 1022, restriccin anterior del DBMS. El almacenamiento fsico de un ROWID extendido requiere de 10 bytes. Recordemos que si bien las filas de una tabla no poseen explcitamente la columna ROWID, este valor se almacena como parte de los bloques de datos (en el directorio de filas) y adicionalmente si una fila est encadenada se almacenar el ROWID de su prximo row piece. En cuanto a la estructura, un ROWID posee cuatro componentes: DON (Data Object Number): Es un nmero unvoco que el DBMS asigna a cada objeto (tabla o ndice, por ejemplo) dentro de la base de datos. RFN (Relative File Number): Es el nmero del archivo de datos en el que se encuentra el bloque de datos que contiene la fila. Este nmero de archivo de datos es relativo al tablespace que lo incluye en la estructura de memoria secundaria de ORACLE. BN (Block Number): Indica el nmero de bloque de datos relativo al archivo de datos que contiene el row piece . RN (Row Number): Indica la posicin de la fila dentro del directorio de filas almacenadas en el bloque de datos ORACLE referenciado. Aunque internamente el campo DON se almacena en 32 bits, el RFN en 10 bits, el BN en 22 bits y el RN en 16 bits, al desplegar un ROWID el DBMS utiliza un esquema de codificacin de base 64 en el cual se utilizan seis posiciones para el DON, tres posiciones para el RFN, seis posiciones para el BN y tres posiciones para el RN. En tal sentido, un ROWID tiene la forma OOOOOOFFFBBBBBBRRR (O significa informacin del DON, F indica posicin del RFN, B indica posicin del BN y R indica RN). El alfabeto de codificacin base 64 utilizado por ORACLE para el despliegue del rowid posee los smbolos (enumerados en orden en la base) A-Z, a-z, 0-9, + y /. Por ejemplo, si al ejecutar el query SELECT SUBSTR(ROWID,1,6) DAO, SUBSTR(ROWID,7,3) RFN, SUBSTR(ROWID,10,6) BN SUBSTR(ROWID,16,3) RN FROM EMPLEADO WHERE NRO_EMP = 1; se obtiene que el ROWID del empleado con nmero de ficha 1 es AAAAASAABAAAGF1AAV entonces se tiene que: El objeto al que pertenece dicha fila es el AAAAAS (objeto con identificador 18 en decimal, o dcimo octavo objeto creado en el DBMS). La fila se encuentra en el archivo de datos nmero AAB (1 en decimal) asociado al tablespace en el que se encuentra almacenada la tabla EMPLEADO.

Pgina 2 de 16

CI-5313 Arquitectura y Administracin de DBMSs I

Prof. NUNZIO SAVINO Septiembre-Diciembre 2001

Tema Nro. 2 Los Objetos de ORACLE 8: Almacenamiento y Caractersticas

La fila se encuentra almacenada en el bloque de datos ORACLE AAAGF1 (bloque nmero 24949 decimal) del archivo de datos en cuestin. La fila en cuestin es la fila AAV-sima (vigsimo segunda fila) que se ha almacenado en el bloque de datos ORACLE en cuestin.

Para localizar una fila, el DBMS utiliza el DON para obtener el nmero interno asignado al tablespace que contiene tal fila. Posteriormente, el RFN se utiliza para determinar el archivo de datos que contiene la fila, y el BN para determinar qu bloque de datos ORACLE almacena la fila. Finalmente, el RN permite indicar cul de las entradas del directorio de filas del bloque de datos ORACLE8 contiene el desplazamiento en el bloque de datos donde se ubica el row piece de la fila a ser leda.

Encadenamiento y Migracin
Como se mencion anteriormente, uno de los posibles efectos perniciosos que se generan durante la vida de una tabla es el encadenamiento de filas. Otro de los fenmenos que se puede producir es la migracin de filas. Cuando una instruccin de UPDATE incrementa la cantidad de espacio requerida por una fila pueden suceder dos cosas: 1. El DBMS no logra conseguir el espacio necesario para almacenar la fila en el bloque. En este caso se tratar de conseguir otro bloque que posea el espacio requerido. Si tal bloque existe, la fila se mover de bloque de datos y se hablar de migracin de una fila. 2. Si el DBMS no logra conseguir ningn bloque que permita albergar la fila completa, el DBMS separar la fila en varias row pieces, y como se mencion anteriormente ocurrir un encadenamiento de fila. Este fenmeno puede ocurrir tambin al insertar una fila si no se logra conseguir un bloque que permita albergarla por completo. La migracin y el encadenamiento van en detrimento del rendimiento de la base de datos porque: Las instrucciones de UPDATE requerirn de ms operaciones de E/S para poder cambiar los bloques de datos ORACLE que se han cambiado como resultado de la operacin. Las consultas que seleccionan filas que han sido migradas o encadenadas realizarn ms operaciones de lectura de disco para obtener todos los bloques de datos, si las de un mismo objeto lgico se encuentran ahora dispersas en varios bloques de datos. En general, se produce fragmentacin en los bloques de datos. El administrador de la base de datos tiene mecanismos para identificar cuales de las filas de una tabla se encuentran encadenadas o han sufrido migracin. Para tal fin ORACLE provee una operacin especial del comando ANALYZE que efecta procesos de medicin sobre los objetos gestionados por el DBMS. En nuestro caso particular, el comando ANALYZE TABLE <tabla> LIST CHAINED ROWS Permite obtener informacin sobre filas encadenadas y migradas de la tabla <tabla>. Pgina 3 de 16

CI-5313 Arquitectura y Administracin de DBMSs I

Prof. NUNZIO SAVINO Septiembre-Diciembre 2001

Tema Nro. 2 Los Objetos de ORACLE 8: Almacenamiento y Caractersticas

Para poder utilizar el comando se necesita de una tabla especial llamada CHAINED_ROWS la cual puede ser creada a travs del siguiente comando: create table CHAINED_ROWS ( owner_name varchar2(30), table_name varchar2(30), cluster_name varchar2(30), partition_name varchar2(30), head_rowid rowid, analyze_timestamp date ); Suponiendo la existencia de la tabla CHAINED_ROWS, para reducir el nmero de filas encadenadas y/o migradas de una tabla X de un usuario Y puede aplicarse el siguiente procedimiento: 1. Utilizar el comando ANALYZE para obtener las filas encadenadas y/o migradas de la tabla en estudio. ANALYZE TABLE X LIST CHAINED_ROWS 2. Verificar si existen filas encadenadas o migradas en la tabla X del usuario Y SELECT COUNT(*) FROM CHAINED_ROWS WHERE OWNER_NAME = Y AND TABLE_NAME = X 3. Si existen filas (el query devuelve un valor mayor que 0) existirn filas encadenadas o migradas en la tabla X del usuario Y. Para eliminar el efecto se puede seguir el siguiente procedimiento a. Crear una tabla temporal que posea la misma estructura que la tabla en estudio pero slo aquellas filas que presentan encadenamiento o migracin: CREATE TABLE X_TEMP AS SELECT * FROM Y.X WHERE ROWID IN ( SELECT HEAD_ROWID FROM CHAINED_ROWS WHERE OWNER_NAME = Y AND TABLE_NAME = X) b. Eliminar de la tabla original aquellas filas que presentan encadenamiento o migracin DELETE FROM Y.X Pgina 4 de 16

CI-5313 Arquitectura y Administracin de DBMSs I

Prof. NUNZIO SAVINO Septiembre-Diciembre 2001

Tema Nro. 2 Los Objetos de ORACLE 8: Almacenamiento y Caractersticas

WHERE ROWID IN ( SELECT HEAD_ROWID FROM CHAINED_ROWS WHERE OWNER_NAME = Y AND TABLE_NAME = X) c. Insertar en la tabla original las filas que antes presentaban problemas: INSERT INTO Y.X SELECT * FROM X_TEMP d. Borrar la tabla temporal creada para resolver el problema DROP TABLE X_TEMP 4. Eliminar las filas de la tabla de anlisis de migracin y encadenamiento. DELETE FROM CHAINED_ROWS 5. Volver a ejecutar el comando de anlisis de filas encadenadas o migradas en la tabla bajo estudio. ANALYZE TABLE X LIST CHAINED_ROWS 6. Si vuelven a aparecer filas de la tabla que se encuentran encadenadas, esto se deber estrictamente a que la operacin de insercin de filas problemticas realizado en el paso 3.d genera encadenamiento. En este caso el encadenamiento se producir porque la fila no puede ser almacenada en un bloque de datos ORACLE8 con los valores de PCTFREE y PCTUSED asignados a la creacin de la tabla en estudio. Pueden ocurrir dos cosas: a. Que bajo ninguna circunstancia (colocando inclusive 0 como valor del PCTFREE) pueda evitarse el encadenamiento, ya que el tamao de una nica fila sobrepase el tamao mximo permitido para datos (tamao de bloque de datos DB_BLOCK_SIZE menos el overhead del bloque de datos). En este caso se requiere de un estudio mucho mayor ya que es posible que la configuracin de la instancia no se haya realizado tomando en cuenta esta tabla o que no sea posible. Este proceso involucrara recrear toda la base de datos y requiere de mayor experticia de la que hasta ahora poseemos (implica hacer backup y/o exportar la base de datos, replanificacin de la instancia y regeneracin de la base de datos). En general, un bloque de datos ORACLE de tamao 4K u 8K reduce considerablemente este tipo de escenarios. b. Que bajo un estudio detallado, se logre determinar un mejor valor para los parmetros PCTFREE y PCTUSED. En tal caso ser necesario cambiar los parmetros de almacenamiento de la tabla para evitar el problema. En prximas clases estudiaremos la estructura completa del comando CREATE TABLE y sabremos como realizar este proceso.

Un aspecto importante a tener en cuenta es el hecho de que resolver encadenamiento y migracin trae implcito borrar temporalmente filas de una tabla, y que pueden existir Pgina 5 de 16

CI-5313 Arquitectura y Administracin de DBMSs I

Prof. NUNZIO SAVINO Septiembre-Diciembre 2001

Tema Nro. 2 Los Objetos de ORACLE 8: Almacenamiento y Caractersticas

restricciones de integridad referencial y triggers asociados a la tabla en anlisis o a vecindad (tablas relacionadas con ella). En tal sentido: 1. Este proceso debe realizarse slo cuando la base de datos no est operativa para los usuarios de la misma, de manera de evitar operaciones sobre las tablas que estn relacionadas con la tabla en estudio o sobre la misma tabla. 2. Es necesario deshabilitar todas las restricciones de integridad referencial hacia la tabla en cuestin y de la tabla en cuestin hacia otras tablas (particularmente para evitar borrados en cascada) antes del proceso y habilitarlas posteriormente al proceso. 3. Es altamente recomendable ir elaborando scripts de anlisis de migracin y encadenamiento a medida que se reciben solicitudes de creacin de esquemas por parte de los usuarios. Como DBA, mantener al da el estado y rendimiento de la base de datos es importantsimo para la supervivencia de las aplicaciones y resulta ms prctico desarrollar los scripts al momento del anlisis de los esquemas que una vez que estos se hayan puesto en produccin.

ndices
Un ndice es una estructura de memoria secundaria que permite el acceso directo a las filas de una tabla (est o no agrupada). ORACLE provee cinco tipos de ndices: Indices basados en B*-trees para tablas no agrupadas. Indices basados en B*-trees para tablas agrupadas. Indices basados en Hashing para tablas agrupadas. Indices Bitmap. Indice basados en B*-Trees para tablas organizadas por ndices. En tablas que no estn organizadas por ndice, los ndices son independientes de la estructura fsica de la tabla (o tablas agrupadas) y por lo tanto poseen requerimientos de espacio adicionales a los de la tabla sobre los que se encuentran definidos. La finalidad principal de un ndice es la definir un camino de acceso a los datos que garantice una mejora en el rendimiento de las operaciones de bsqueda. ORACLE efecta de manera automtica el mantenimiento de la consistencia de los ndices asociados a una tabla cada vez que se insertan y eliminan filas o se modifican valores de las columnas sobre las que se define un ndice. Si bien es cierto que los ndices aceleran las operaciones de consulta, tambin debe tomarse en cuenta que el mantenimiento de un ndice tiene efecto sobre el rendimiento de las operaciones de eliminacin, insercin y actualizacin ya que es doble el trabajo de manipulacin de bloques de datos (debe almacenarse informacin en los bloques de datos de una tabla y de los diferentes ndices sobre ella definidos). Los ndices pueden definirse sobre una o mltiples columnas de una tabla (o cluster). Sin embargo ORACLE impone dos restricciones: El nmero mximo de columnas para ndices basados en B*-Tree es de 32 columnas, mientras que para ndices bitmap es de 30 columnas.

Pgina 6 de 16

CI-5313 Arquitectura y Administracin de DBMSs I

Prof. NUNZIO SAVINO Septiembre-Diciembre 2001

Tema Nro. 2 Los Objetos de ORACLE 8: Almacenamiento y Caractersticas

El espacio requerido para almacenar una clave no puede exceder la mitad del espacio disponible para almacenar datos en un bloque ORACLE (recordemos que era tamao de bloque menos el espacio libre para actualizaciones menos el overhead para informacin de control del bloque de datos).

ORACLE permite la creacin de ndices que permitan albergar, para un mismo valor de la clave, una fila o varias filas. Los ndices UNIQUE garantizan que en una tabla (o cluster) no puedan existir dos filas con el mismo valor. Por defecto (si no se especifica lo contrario) al crear un ndice ser considerado como de claves repetidas. Es importante destacar que ORACLE slo genera en forma automtica los siguientes ndices cuando se crea una tabla: Un ndice UNIQUE basado en B*-tree para mantener las columnas que se hayan definido como clave primaria de una tabla utilizando el constraint PRIMARY KEY de una tabla no organizada por ndice. Un ndice UNIQUE basado en B*-tree para mantener la restriccin de unicidad de cada grupo de columnas que se haya declarado como nico utilizando el constraint UNIQUE. Un ndice basado en B*-tree para mantener las columnas que se hayan definido como clave primaria y todas las filas de una tabla organizada por ndice. Un ndice basado en hashing para mantener las filas de un grupo de tablas (cluster) organizado por hash. A estos ndices (aquellos generados automticamente) se les denominar Indices Primarios. El administrador de la base de datos podr crear otros ndices de acuerdo con el estudio de rendimiento de las aplicaciones y de la base de datos. A estos ndices creados especficamente para resolver problemas particulares de degradacin de rendimiento se les denominar Indices Secundarios. Una ltima variacin permitida por ORACLE en los ndices basados en B*-tree para tablas no agrupadas es el manejo de ndices de claves invertidas. En un ndice de claves invertidas el orden mantenido dentro de la estructura de rbol viene dado por el resultado de invertir el valor de cada columna que forma parte del ndice. Esta poltica busca resolver el problema de degradacin del rendimiento que ocurre cuando: Se presentan inserciones en las que el orden de la insercin de filas es exactamente igual al orden parcial definido sobre los valores de las claves. En bases de datos paralelas, donde mltiples instancias del DBMS acceden a un grupo de filas de una tabla ubicadas dentro de una rango de valores para sus claves. Si se invierten los valores de las claves el efecto producido ser el de dispersar claves que antes deban estar consecutivas en el orden establecido por el ndice. Al separar estas claves se reduce la contencin sobre el bloque de datos ORACLE que antes deba contenerlas. Estos ndices sirven slo para realizar bsquedas de igualdad (exact match queries) por lo que no deben utilizar si la tabla sobre la que se definir dar soporte a aplicaciones que hagan bsqueda por rango (range match queries).

Pgina 7 de 16

CI-5313 Arquitectura y Administracin de DBMSs I

Prof. NUNZIO SAVINO Septiembre-Diciembre 2001

Tema Nro. 2 Los Objetos de ORACLE 8: Almacenamiento y Caractersticas

B*Estructura de un ndice basado en B*-Tree


De acuerdo con la definicin de la estructura B*-tree, un ndice ORACLE de este tipo se estructura como un rbol cuya raz contiene mltiples entradas y valores de claves que apuntan al siguiente nivel del rbol. Cada una de estas entradas mantienen un orden sobre las claves que estn siendo almacenadas de forma tal que el apuntador a la izquierda de una clave C indicara la el bloque de nivel siguiente en el rbol donde se ubican claves menores que C. De igual forma, el apuntador a la derecha de una clave C indicara la el bloque de nivel siguiente en el rbol donde se ubican claves mayores que C. Todos los nodos internos del rbol tienen la misma estructura. Los nodos hoja contienen la entrada del ndice con toda la informacin necesaria para localizar la(s) fila(s) que contienen un valor especfico para la clave. Los nodos hoja se encuentran doblemente enlazados para facilitar el recorrido del ndice en orden ascendente o descendente. Cada entrada en un nodo hoja representar las filas que posee el mismo valor para la clave y posee la siguiente estructura: Un encabezado que almacena el nmero de columnas e informacin sobre el uso concurrente de la fila. Una secuencia de valores de longitud de columna y valor de columna que permiten expresar el valor de la clave almacenada en dicha entrada. El ROWID de la fila que posee el valor de la clave. Las siguientes convenciones son utilizadas para el almacenamiento en un ndice basado en B*Tree: En caso de que un ndice no sea UNIQUE, si mltiples filas poseen el mismo valor de la clave en la estructura del ndice se repetirn los valores de dichas claves. Esto constituye una pequea diferencia respecto a la definicin original de B*-trees. Si una fila posee para todas las columnas de la clave el valor NULL, en el ndice no existir una entrada correspondiente a dicha fila. Si la tabla no est particionada, se utilizan ROWIDs restringidos para indicar la direccin de la fila. Esto se debe a que todas las filas de la tabla no se encuentran en un mismo segmento y con esta poltica el ndice requiere de menos espacio en disco.

Estructura de un Indice Bitmap


Un ndice bitmap tambin est organizado como un B*-Tree, pero la estructura de los nodos hoja cambia para almacenar un bitmap definido sobre los valores de la clave en lugar de ROWIDs. Cada bit en el bitmap corresponde a un posible ROWID, y si el bit est encendido esto significa que el ROWID en cuestin posee el valor indicado para la clave. ORACLE almacena de forma comprimida los bitmap asociados a cada entrada del ndice utilizando para tal fin una tcnica propietaria. Ejemplo: En la Figura 4.1 puede observarse un ejemplo de un ndice bitmap. Suponiendo que sobre la tabla SOSPECHOSO se ha definido un ndice sobre el color de ojos de las personas con antecedentes penales, entonces se puede decir que. En el ndice se almacenarn un total de cuatro claves, tantas como los valores de la columna Ojos para el momento en el que se cre el ndice. Pgina 8 de 16

CI-5313 Arquitectura y Administracin de DBMSs I

Prof. NUNZIO SAVINO Septiembre-Diciembre 2001

Tema Nro. 2 Los Objetos de ORACLE 8: Almacenamiento y Caractersticas

Para el momento de creacin de la tabla existen 19 filas con ROWIDs restringidos ubicados en el rango 00000010.0001.0004 a 00000012.0009.0004. Cada entrada del ndice poseer un bitmap de tamao 19 bits con la informacin de las filas que poseen cierto valor de la clave.

TABLESPACE DATOS_PENALES DATAFILE DATOS01 (0004)


Rowids Block Number 00000010 00000010 00000010 00000010 00000010 00000011 00000010 00000011 00000011 00000012 00000012 00000012 00000011 00000012 00000012 Row Nr. 0001 0002 0003 0004 0005 0001 0006 0002 0003 0001 0002 0003 0004 0004 0005 0006 0007 0008 0009 File Nr. 0004 0004 0004 0004 004 0004 0004 0004 0004 0004 0004 0004 0004 0004 0004 0004 0004 0004 0004

SOSPECHOSO
CI 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 Nombre A B C D E F G H I J K L M N O P Q R S
Fec_Nac 12/12/64 01/28/44 11/07/68 12/03/71 03/19/40 10/21/75 05/05/43 02/28/57 06/30/80 04/01/61 08/02/61 09/05/65 08/16/44 12/31/75 02/15/84 08/30/59 07/07/78 09/28/80 01/19/69

Ojos 1 2 1 3 2 4 4 4 1 1 2 2 2 4 4 1 3 1 3

Ult_ing

Otros

INDICE BITMAP

00000012 00000012 00000012 00000012

Clave <4,

Start ROWID

End ROWID

Bitmap

00000010.0001.0004, 00000012.0009.0004, 0000011100000110000>

<3,

00000010.0001.0004, 00000012.0009.0004, 0001000000000000101>

<2,

00000010.0001.0004, 00000012.0009.0004, 0100100000111000000>

<1,

00000010.0001.0004, 00000012.0009.0004, 0000011100000110000>

Figura 4.1: Ejemplo de un ndice bitmap Al decidir entre los dos tipos de ndices: basados en B*-Tree e ndice bitmap se debe tener en cuenta que: Los ndices de tipo bitmap son particularmente eficientes cuando el universo de valores posibles para las columnas del ndice tiene una baja cardinalidad. Al existir un gran universo de posibles valores para la columna aumenta el nmero de posibles claves y adicionalmente el tamao de los bitmaps a ser mantenidos en las entradas del ndice. En

Pgina 9 de 16

CI-5313 Arquitectura y Administracin de DBMSs I

Prof. NUNZIO SAVINO Septiembre-Diciembre 2001

Tema Nro. 2 Los Objetos de ORACLE 8: Almacenamiento y Caractersticas

escenarios donde el universo de valores de las claves es muy grande, los ndices basados en B*-Tree son ms adecuados que los ndices bitmap. Los ndices de tipo bitmap son particularmente idneos en escenarios en los que no se producen o se producen muy pocas actualizaciones sobre las columnas que conforman la clave. Una actualizacin en una de estas columnas trae implcita la modificacin de dos o ms entradas del ndice (incluidos los bitmaps). De igual forma, la insercin de un nuevo valor de la clave trae implcita una reorganizacin masiva del ndice, la cual es extremadamente costosa. Los ndices de tipo bitmap permiten acelerar ms consultas que utilicen el operador de disyuncin sobre los atributos claves. Verificar si el valor de una columna de la clave est entre un grupo de valores es sencillo en un ndice bitmap ya que slo debe efectuarse el OR bit a bit de los bitmaps asociados a las entradas de los valores en el rango de bsqueda. En los ndices basados en B*-Trees esta operacin es ms costosa. Como regla general, los ndices basados en B*-Tree son mejores para ambientes de procesamiento de transacciones en lnea (OLTP On-Line Transaction Processing), en los que suelen existir tablas de alta volatilidad (gran nmero de operaciones de insercin y eliminacin) y de alta frecuencia de actualizacin. Por otra parte los ndices bitmap son muy tiles en ambientes donde se realizan consultas muy complejas sobre tablas muy poco voltiles y que prcticamente no sufren actualizaciones. Ambientes de este tipo son los derivados del uso de tcnicas de Data Warehousing o en Sistemas de soporte a la decisin (DSS Decisin Support Systems).

Manipulacin de ndices
Como se mencion anteriormente, ORACLE mantiene de forma automtica tanto los ndices primarios como los secundarios que se hayan definido sobre las tablas de un esquema. Los parmetros de almacenamiento fsico que pueden definirse sobre un ndice son los mismos definibles para una tabla excepto el parmetro PCTUSED. Las operaciones del DML trabajan sobre los ndices de la siguiente forma: Cuando se crea un ndice (utilizando el comando del DDL CREATE INDEX que veremos posteriormente), ORACLE automticamente asigna un segmento de ndice para almacenar la estructura del ndice a crear. Los parmetros de configuracin del segmento seguirn los valores por defecto o los indicados por el usuario en el comando CREATE INDEX. Los bloques de datos en los extents del ndice se irn llenando de acuerdo con los valores de la clave de la tabla hasta ocupar el espacio indicado por el parmetro PCTFREE (bien sea el valor por defecto o el indicado por el usuario en el comando CREATE INDEX). Esto quiere decir que de cada bloque se dejar un espacio equivalente al PCTFREE % del tamao disponible en el bloque (tamao de bloque de datos ORACLE menos el overhead del bloque). Este espacio se dejar para cuando se efecten inserciones en la tabla (se ejecute el comando INSERT del DDL). Crear un ndice sobre una tabla sin filas tendr como efecto generar la estructura de ndice sin claves pero con el segmento de ndices reservado y vaco. Cuando ocurre una operacin de insercin de una fila en la tabla, cada ndice es actualizado siguiendo el siguiente procedimiento:

Pgina 10 de 16

CI-5313 Arquitectura y Administracin de DBMSs I o

Prof. NUNZIO SAVINO Septiembre-Diciembre 2001

Tema Nro. 2 Los Objetos de ORACLE 8: Almacenamiento y Caractersticas

Se buscar la posicin de insercin en la estructura del ndice de acuerdo con los algoritmos de insercin de la estructura. o La clave a ser insertada ser almacenada como entrada en el mismo bloque de datos ORACLE donde se encuentra el nodo intermedio en el que debe almacenarse la clave en la estructura, para tal fin se utilizar el espacio reservado a travs del parmetro PCTFREE. o En caso de splits de nodos intermedios, stos se almacenarn preferentemente en el mismo bloque de datos ORACLE, utilizando el espacio reservado a travs del parmetro PCTFREE. o En cualquier caso slo se recurrir a un nuevo bloque de datos ORACLE cuando no sea posible aprovechar el espacio que se haba reservado a travs del parmetro PCTFREE. Cuando ocurre una eliminacin, esta se refleja slo lgicamente en la estructura de bloques de datos ORACLE que almacenan el ndice. Esto quiere decir que el espacio liberado por la eliminacin no se har realmente efectivo hasta que todas las entradas almacenadas en un bloque de datos ORACLE hayan sido eliminadas. Esto implica que el uso de espacio en operaciones entrelazadas de inserciones y eliminaciones no se aprovecha mientras un bloque de datos ORACLE por completo posee entradas de ndice y bloques intermedios que hayan sido eliminados. El mismo criterio aplica para la concatenacin de los nodos intermedios en la estructura del ndice basado en B*-Tree. Las actualizaciones se manejan como dos operaciones atmicas de eliminacin de clave e insercin de clave. Ntese que por lo tanto una actualizacin trae implcito un uso de espacio mucho mayor que la mera extensin del espacio para almacenar el nuevo valor de la clave, ya que la entrada del ndice no ser devuelta como espacio disponible de acuerdo con el procedimiento de eliminacin.

Es importante destacar que: El parmetro PCTFREE slo tiene efecto cuando se crea el ndice. Posteriormente el espacio que se haba declarado como libre es utilizado en las operaciones de insercin de filas y actualizacin de claves. Las operaciones de modificacin de columnas NO afectarn aquellos ndices en los que estas no formen parte de la clave. Esto se debe a las polticas de asignacin de ROWID de ORACLE. An cuando ocurra migracin o encadenamiento de una fila, sta no perder el ROWID inicial que le fue asignado y por lo tanto la entrada de la fila en los ndices definidos sobre la tabla que la incluye no se ven modificados tras este tipo de operaciones.

Estructura de una Tabla organizada por ndice


Como se mencion anteriormente, las tablas organizadas por ndice difieren de las tablas regulares en el hecho de que tanto las filas como el ndice basado en B*-Tree se mantienen en la misma estructura: en el ndice. A nivel de estructura fsica, la diferencia radica slo en las hojas del rbol. Cada entrada de las hojas del ndice contiene solamente la informacin sobre las columnas no clave de la fila cuyas columnas clave poseen el valor especificado en el

Pgina 11 de 16

CI-5313 Arquitectura y Administracin de DBMSs I

Prof. NUNZIO SAVINO Septiembre-Diciembre 2001

Tema Nro. 2 Los Objetos de ORACLE 8: Almacenamiento y Caractersticas

ndice. En tal sentido, las filas de una tablas organizada por ndice no poseen ROWID y slo se necesita un segmento para almacenar toda la tabla. Una tabla organizada por ndice difiere de una tabla en las siguientes caractersticas: Como las filas no poseen ROWID, la identificacin de una fila de una tabla organizada por ndice viene dada por el valor de las columnas que forman la clave primaria de la tabla. Sobre una tabla comn pueden mantenerse diferentes ndices. Al no existir ROWIDs en una tabla organizada por ndice no es posible crear ndices secundarios sobre la tabla. Cuando se efecta un barrido global (se devuelven o procesan todas las filas) de una tabla regular, el orden con el que se recorren las filas no es predecible para el usuario ya que depende de cmo fueron almacenadas stas a lo largo de la vida de la tabla. En una tabla organizada por ndice el orden de recorrido es estrictamente dirigido por el orden establecido sobre los valores de la clave primaria de las filas que posee la tabla. Sobre una tabla organizada por ndice no es posible definir constraints de tipo UNIQUE. Esto se debe a que todo constraint de tipo UNIQUE trae implcita la generacin automtica de un ndice secundario sobre la(s) columna(s) que (en conjunto) se declara(n) como nicas. Esta restriccin tiene, desde luego, impacto en lo que estamos acostumbrados a hacer cuando representamos claves alternas en un diseo relacional. En un escenario en el cual el diseo lgico relacional de una base de datos incluye tablas donde existan claves alternas que luego se modelan a nivel de diseo fsico en ORACLE como tablas organizadas por ndice, debern crearse tantos triggers sobre la tabla organizada por ndice como claves alternas posea la tabla. Cada trigger deber especificar la semntica de la unicidad requerida por el concepto de clave primaria toda vez que se inserte una fila o modifique alguno de los campos de la clave alterna cuya semntica preserva el trigger. Una tabla organizada por ndice no puede participar en una transaccin distribuida, no puede ser particionada y tampoco replicada. En este curso no estudiaremos los aspectos relativos a bases de datos distribuidas por lo que a nuestro nivel no es de relevancia para el diseo este tipo de restricciones que imponen las tablas organizadas por ndice. Un aspecto de entonacin interesante en las tablas organizadas por ndice es diseo fsico de este tipo de tablas utilizando ROAs (Row Overflow Areas). La motivacin principal para la definicin de este tipo de estructura anexa, e intrnsicamente relacionada con las tablas organizadas por ndice, radica en el hecho de que una tabla organizada por ndice puede poseer columnas que sean de tipos de datos con grandes requerimientos de espacio, o filas cuyo tamao promedio requiera mucho espacio (por ejemplo el de una tabla con muchas columnas). En este tipo de escenarios el almacenamiento de las entradas del ndice podra ser tal que existiera una entrada del ndice por bloque de datos lo cual degenerara enormemente el rendimiento de las operaciones de consulta de datos. Cuando se crea una tabla organizada por ndice con ROA: El DBMS crea una tabla lgica (para el usuario el manejo de una tabla organizada por ndice es transparente) con el nombre definido en la instruccin CREATE TABLE. La informacin de dicha tabla se almacena en el diccionario de datos de igual forma que sucede con las tablas comunes. Pgina 12 de 16

CI-5313 Arquitectura y Administracin de DBMSs I

Prof. NUNZIO SAVINO Septiembre-Diciembre 2001

Tema Nro. 2 Los Objetos de ORACLE 8: Almacenamiento y Caractersticas

Se genera un segmento de ndice cuyo nombre es el nombre del constraint de clave primaria definido (o un nombre automtico en el caso de que no se le asigne nombre a tal constraint). Los parmetros de almacenamiento y el tablespace donde residir este segmento sern los indicados en el comando o en la configuracin del usuario que crea la tabla. Se crea un segmento de tablas correspondiente a la ROA. En este segmento se almacenarn las row pieces de aquellas filas con gran requerimiento de espacio. El nombre de este segmento de tabla es SYS_IOT_OVER_n, donde n es el object_id de la tabla organizada por ndice que fue generado internamente por el DBMS en el primer paso de este procedimiento.

Adicionalmente a los parmetros de entonacin propios de una tabla comn, las tablas organizadas por ndice permiten indicar cierta informacin de control sobre el ROA. Estos parmetros estn estrechamente relacionados y son: PCTTHRESHOLD: Este parmetro permite establecer el denominado umbral de overflow. Este parmetro (con valores permitidos entre 0 y 50) permite indicar qu porcentaje del espacio reservado en todo bloque de ndice para una tabla no organizada puede ser utilizado por una fila de la tabla. Si el espacio requerido por una fila excede al espacio calculado en base al tamao de la zona reservada y el umbral de overflow, entonces todas las columnas de la tabla que vengan despus de la indicada en la clusula INCLUDING (tomando como orden el establecido en el comando CREATE TABLE) se colocarn como un row piece en el ROA. Por el contrario, si la clusula OVERFLOW no se especifica, toda fila que exceda el umbral de overflow no podr ser insertada. INCLUDING: Permite indicar el punto de divisin entre las columnas que sern almacenadas en la porcin de ndice y en el ROA. Este punto de divisin consiste en una de las columnas de la tabla, de acuerdo con el orden en el que se especifican en el CREATE TABLE. Si este parmetro no se especifica y una fila excede el umbral de overflow, entonces todas las columnas que no forman parte de la clave primaria sern almacenadas en el ROA. Son aceptables como puntos de divisin la ltima columna que forma parte de la clave primaria o cualquier columna que no forma parte de la clave primaria. OVERFLOW: especifica la informacin de ubicacin y parmetros de entonacin del segmento donde se almacenar el ROA. La informacin incluye el nombre de un tablespace y sus parmetros de almacenamiento y utilizacin de bloques (PCTFREE; PCTUSED, PCTINCREASE, MINEXTENT, MAXEXTENTS, etc.). La figura 4.2 muestra la estructura de una tabla organizada por ndice con ROA.

Pgina 13 de 16

CI-5313 Arquitectura y Administracin de DBMSs I

Prof. NUNZIO SAVINO Septiembre-Diciembre 2001

Tema Nro. 2 Los Objetos de ORACLE 8: Almacenamiento y Caractersticas

Tablespace de la Tabla Organizada por Indice n Segmento = Nombre de PK Tipo = Indice

Tablespace del ROA Segmento = SYS_IOT_OVER_n Tipo = Tabla

Filas en el umbral de overflow

Fila fuera del umbral de overflow Bloque de Datos ORACLE

Figura 4.2 Relaciones entre segmentos de una tabla organizada por ndice

B*Tablas Agrupadas con ndices basadas en B*-Tree y en Hashing


La estructura general de este tipo de estructuras se discuti anteriormente. Para ahondar en el tema se recomienda la lectura de: Captulo 8 del Concepts Manual, pgs. 8-32 a 8-42. Captulo 10 del ORACLE Tuning Manual, pgs. 10-24 a 10-26.

Soporte Soporte al Anlisis y Estimacin del Uso de Memoria Secundaria


ORACLE provee un comando especial ANALYZE para obtener informacin dinmica sobre las estructuras que almacenan datos. Las funciones que realiza este comando son: Recoger estadsticas sobre los objetos de un esquema de datos particular. Estas estadsticas pueden ser o bien calculadas directamente por el uso del objeto o estimadas de acuerdo a modelos internos que maneja el DBMS y utilizando una muestra aleatoria del objeto a evaluar. Estas estadsticas se almacenan en el diccionario de datos y se representan como columnas particulares que se mantienen en las tablas utilizadas para recoger toda la informacin particular sobre cada tipo de objeto. Eliminar estadsticas de los objetos de un esquema almacenado en la base de datos.

Pgina 14 de 16

CI-5313 Arquitectura y Administracin de DBMSs I

Prof. NUNZIO SAVINO Septiembre-Diciembre 2001

Tema Nro. 2 Los Objetos de ORACLE 8: Almacenamiento y Caractersticas

Validar la integridad de las estructuras de memoria secundaria que se utilizan para representar un objeto a nivel fsico. Por ejemplo, en situaciones no comunes (principalmente debidas a fallas en el hardware o en el sistema) un ndice puede corromperse y no realizar su trabajo correctamente. Cuando se valida un ndice se puede confirmar que cada entrada en el mismo apunte a la fila correcta en la tabla asociada al ndice. Identificar las filas encadenadas o migradas en una tabla o cluster. En particular este comando y su uso se discutieron anteriormente.

Los tipos de estadsticas que se ofrecen son los siguientes:

Para Tablas: o Nmero de filas. o Nmero de bloques de datos ORACLE que para los momentos del clculo (computo exacto o estimacin) contienen datos de la tabla. o Nmero de bloques de datos ORACLE que para el momento del clculo (cmputo o estimacin) no se han utilizado. o Espacio promedio disponible en los bloques de datos donde se almacenan las filas de la tabla. o Filas de la tabla que se encuentran encadenadas o migradas. o Longitud promedio de una fila de la tabla incluyendo el overhead impuesto por ORACLE para su almacenamiento. Estas estadsticas se almacenan en las vistas XXX_TABLES (XXX es DBA, USER u ALL) que mantiene el diccionario de datos. Para Indices: o Profundidad del ndice. o Nmero de hojas en el ndice. o Nmero de claves indizadas. o Nmero promedio de bloques hoja por clave indizada. o Nmero promedio de bloques de datos por clave indizada. o Factor de agrupacin, es decir cuan bien ordenadas se encuentran las filas sobre los posibles valores de claves indexadas. Estas estadsticas se almacenan en las vistas XXX_INDEXES (XXX es DBA, USER u ALL) que mantiene el diccionario de datos. Para Columnas de una tabla: El cmputo de estadsticas para columnas se basa en el uso de histogramas de valores que representan informacin estadstica sobre los valores utilizados en las columnas de una tabla. Las estadsticas computadas incluyen: o Nmero de valores diferentes para las columnas o Valor mximo y mnimo para cada categora de valores presente en el histograma. Este tipo de cmputos sale del alcance de esta asignatura y por lo tanto no se discutir su utilizacin en el diseo fsico y entonacin de la base de datos.

Pgina 15 de 16

CI-5313 Arquitectura y Administracin de DBMSs I

Prof. NUNZIO SAVINO Septiembre-Diciembre 2001

Tema Nro. 2 Los Objetos de ORACLE 8: Almacenamiento y Caractersticas

Para Tablas Agrupadas: Para un conjunto de tablas agrupadas indexadas ORACLE permite obtener estadsticas: o En el caso de que el ndice se base en B*-Trees se podr obtener el nmero promedio de bloques de datos ORACLE que cada clave requiere para almacenar todas las filas del cluster. o En el caso de ndices basados en hashing se podr obtener el nmero promedio de bloques de datos ORACLE que cada clave en el hashing requerir para almacenar las filas que posean dicho valor para la clave. Las estadsticas anteriores pueden ser obtenidas consultando las vistas XXX_CLUSTERS (XXX puede ser USER o DBA).

Alguna de las variaciones para el comando ANALYZE son las siguientes: ANALYZE TABLE <tabla> COMPUTE STATISTICS que permite efectuar el cmputo de las estadsticas de la tabla indicada. ANALYZE TABLE <tabla> ESTIMATE STATISTICS que permite estimar estadsticas de la tabla indicada. Adicionalmente se puede indicar el tamao de la muestra (utilizando la clusula SAMPLE <numero> ROWS) o el porcentaje de la tabla a muestrear (utilizando la clusula SAMPLE <numero> PERCENT). ANALYZE TABLE <tabla> DELETE STATISTICS que eliminar las estadsticas computadas o estimadas anteriormente sobre la tabla indicada.

Las variaciones antes mencionadas aplican para ndices y clusters. En lo que respecta a validacin de estructuras, la opcin VALIDATE STRUCTURE del comando ANALYZE permite realizar esta funcin. Si la estructura no presenta corrupciones no se retornar ningn error. En caso contrario la instruccin devolver error en la estructura y ser necesario regenerar la misma (utilizando una secuencia de comandos DROP del objeto y CREATE del objeto). De igual forma, si se desea evaluar un objeto ms todas aquellas estructuras directamente asociadas a l se puede utilizar la clusula CASCADE. Por ejemplo el comando ANALYZE TABLE EMPLEADO VALIDATE STRUCTURE CASCADE; analizar la estructura de la tabla EMPLEADO y la de todos los ndices que sobre ella se hayan definido.

Pgina 16 de 16

S-ar putea să vă placă și