Nvidal’s Blog

Just another WordPress.com weblog

Manejo de tablas grandes en Oracle (Continuacion)

MANEJO DE PARTICIONES Oracle 10G

Continuando mi último artículo sobre el uso de las particiones de oracle, los tipos de particiones y su uso. En este artículo haremos referencia a varias funcionalidades que pueden resultar útiles en determinado momento en la definición de una tabla particionada.

Compresión de Tabla Particionada

Puedes comprimir alguna o todas las particiones usando la compresión de tablas. Este atributo puede ser declarado para un tablespace, una tabla o una partición de una tabla. Donde quiera que el atributo de compresión no sea especificado, este es heredado igual que cualquier otro atributo de almacenamiento.

El siguiente ejemplo crea una tabla particionada con una partición comprimida “costs_old”. EL atributo de compresión para la tabla y todas las otras particiones es heredada del tablespace.

CREATE TABLE costs_demo (
prod_id NUMBER(6), time_id DATE,
unit_cost NUMBER(10,2), unit_price NUMBER(10,2))
PARTITION BY RANGE (time_id)
(PARTITION costs_old
VALUES LESS THAN (TO_DATE(’01-JAN-2003′, ‘DD-MON-YYYY’)) COMPRESS,
PARTITION costs_q1_2003
VALUES LESS THAN (TO_DATE(’01-APR-2003′, ‘DD-MON-YYYY’)),
PARTITION costs_q2_2003
VALUES LESS THAN (TO_DATE(’01-JUN-2003′, ‘DD-MON-YYYY’)),
PARTITION costs_recent VALUES LESS THAN (MAXVALUE));

Llave de compresión con índices particionados

Se pude comprimir alguna o todas las particiones de un índice B-tree usando una llave de compresión. La llave de compresión es aplicable solo a un índice B-tree. Los índices bitmap son almacenados en una manera comprimida por defecto.

El siguiente ejemplo nos presenta un índice local particionado con todas las particiones excepto la más reciente.

CREATE INDEX i_cost1 ON costs_demo (prod_id) COMPRESS LOCAL
(PARTITION costs_old, PARTITION costs_q1_2003,
PARTITION costs_q2_2003, PARTITION costs_recent NOCOMPRESS);
Ventajas y desventajas de compression

El objetivo de la compresión es reducir el uso de espacio en disco y uso de memoria (especialmente, el buffer cache), puedes almacenar tablas y tablas particionadas en un formato comprimido en una base de datos oracle. Esto es muy utilizado para operaciones de read-only. La compresión de tablas puede también ser utilizado para agilizar ejecuciones de búsquedas. Sin embargo hay un alto costo de sobrecarga del CPU.

Mantenimiento de tablas particionadas

En esta parte presentamos las operaciones de mantenimiento de tablas particionadas. Donde la usabilidad de índices o índices particionados son afectados por las operaciones de mantenimiento, se debe considerar lo siguiente:

Solamente índices o índices particionados que no están vacías son candidatos para ser marcado UNUSUABLE. Si ellas están vacías, el estatus USABLE/UNUSABLE queda incambiable.

Solamente índices o índices particionados con el estado USABLE son actualizados por los subsecuentes DML.

Actualizando índices automáticamente

Antes de discutir las operaciones de mantenimiento para tablas particionadas e índices. Es importante discutir y entender los efectos de UPDATE INDEXES que puede ser especificado en la sentencia ALTER TABLE.

Por defecto muchas operaciones de tablas o tablas particionadas invalidan (marcan UNUABLE) los correspondientes índices o índices particionados. Tú debes reconstruir el índice completo o, en el caso de índices globales, cada uno de sus particiones. La base de datos te deja sobre escribir este comportamiento por defecto si especificas UPDATE INDEXES en su sentencia ALTER TABLE para las operaciones de mantenimiento. Especificando esta clausula les dice a la base de datos que actualice el índice al momento que ejecute la operación de mantenimiento DDL.

Esto provee los siguientes beneficios:

El índice es actualizado en conjunto con la operación basado en tabla. Con esto no es requerido reconstruir el índice.

El índice está altamente disponible porque este no consigue el estatus de UNUSUABLE. El índice se mantiene disponible aun mientras la operación DDL se está ejecutando y este puede ser usado para accesar las particiones de la tabla no afectada.

No tienes que buscar todos los índices inválidos para ser reconstruidos

Consideraciones cuando Actualizas Indices automáticamente.

Las siguientes implicaciones son valederas cuando se especifica UPDATE INDEXES.

La sentencia DDL en las particiones toman mas tiempos para ejecutar, porque indices que eran anteriormente marcado como UNUSUABLE son actualizado. Sin embargo, debes comparar este incremento con el tiempo que este toma para ejecutar DDL sin UPDATE INDEXE si el tamaño de la partición es menos que el 5% del tamaño de la tabla.

Las operaciones de DROP, TRUNCATE y EXCHANGE no son operaciones rápidas cuando utiliza UPDATE INDEX. Debes comparar el tiempo que toma hacer un DDL y hacer la reconstrucción de los índices.

Cuando actualiza la tabla con índices globales:

– El índice es actualizado en parte. La actualizaciones del índice son logged, y redo y se generan registros de undo, si se reconstruye un índice global completo puedes hacerlo usando el modo de NOLOGGING.

– Reconstruyendo el índice complete manualmente se crea uno mas eficiente, porque es mas compacto con mejor utilización de los espacios.

Añadir Particiones

Para añadir una nueva partición a una tabla particionada debes utilizar la sentencia ALTER TABLE …. ADD PARTITION; siempre que añada una nueva partición esta debe ser el valor mas alto de la partición. Para añadir una partición al principio o en el medio debes utilizar la clausula SPLIT PARTITION.

ALTER TABLE sales
ADD PARTITION jan96 VALUES LESS THAN ( ’01-FEB-1999′ )
TABLESPACE tsx;

Los índices locales y globales son mantenidos en estado USABLE; si es un RANGE-PARTITION. Para el HASH-PARTITION el índice pueden ser convertidos en UNSUABLE.

Para HASH-PARTITION:

Tablas tipo: HEAP(Regular), los índices locales para las nuevas partición y para las particiones existentes cuyos registros fueron redistribuidos son marcados como UNSUABLE y tienen que ser reconstruidos.

Para los índices globales todos los índices son puestos en estado de UNSUABLE y tienen que ser reconstruidos.

Nota: A menos que se utilice ALTER TABLE … UPDATE INDEX

Tablas tipo: Indexed-organized, los índices locales tienen el mismo efecto que el tipo HEAP o regular.

Para los índices globales los índices se mantienen USABLE.

Coalescing Partitions

Coalescing es la forma de reducir la cantidad de particiones en una tabla HASH-PARTITION o índice, o el numero de sub particiones en una tabla tipo RANGE-HASH. Cuando una hash-partition es coalescing, sus contenidos son redistribuidos entre uno o mas particiones restantes determinado por la función HASH.

ALTER TABLE ouu1 COALESCE PARTITION;

Los índices particionados pueden ser macados en estado de UNUSUABLE.

Tablas tipo: HEAP(Regular), los índices locales correspondientes a la partición seleccionada son borrados, los índices particionados correspondientes a una o mas particiones absorbidas son marcados UNUSUABLE y tienen que ser reconstruidos.

Para los índices globales todos los índices son puestos en estado de UNSUABLE y tienen que ser reconstruidos.

Tablas tipo: Indexed-organized, los indices locales tienen el mismo efecto que el tipo HEAP o regular.

Para los índices globales los índices se mantienen USABLE.

(Continuara …)

septiembre 14, 2009 - Posted by | Database, Oracle, Tecnologia

Aún no hay comentarios.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: