Área de Tecnologías de la Información y las Comunicaciones Aplicadas
Área de Tecnologías de la Información y las Comunicaciones Aplicadas Universidad de Murcia
Área de Tecnologías de la Información y las Comunicaciones Aplicadas
ATICA arrow DBCONNECTOR arrow SQL - Comprimir una Tabla o Indice
21.09.2017
 
 
SQL - Comprimir una Tabla o Indice Imprimir E-mail

Desde la versión 9i R2 Oracle permite la compresión de los datos de una tabla. Y ya con la versión 11g R2 esta funcionalidad está muy madura y optimizada, de modo que la compresión de datos incluso mejora el rendimiento reduciendo la E/S, ya que Oracle maneja siempre la información comprimida, tanto en disco como en Buffer Caché.


Para facilitar en el futuro la creación de tablas comprimidas, se puede crear un tablespace de modo que cualquier tabla que se cree posteriormente en el mismo esté comprimida:

CREATE TABLESPACE ... default compress for oltp;

Nota: No afecta a los índices. Se puede usar con ALTER TABLESPACE, pero no modifica las tablas que ya existen.

select tablespace_name, COMPRESS_FOR from dba_tablespaces where tablespace_name = 'LOGATICA';

TABLESPACE_NAME            COMPRESS_FOR
------------------------------ ------------
LOGATICA

alter tablespace logatica default compress for oltp;
Tablespace altered.

select tablespace_name, COMPRESS_FOR from dba_tablespaces where tablespace_name = 'LOGATICA';

TABLESPACE_NAME            COMPRESS_FOR
------------------------------ ------------
LOGATICA               OLTP


Y también se puede crear una tabla comprimida:

CREATE TABLE ... compress for oltp;

Nota: se puede usar con ALTER TABLE

SELECT table_name, compression, compress_for FROM user_tables;

TABLE_NAME               COMPRESS COMPRESS_FOR
------------------------ -------- ------------
BORRAME_COMPRI               DISABLED

alter table BORRAME_COMPRI compress for oltp;
Table altered.

SELECT table_name, compression, compress_for FROM user_tables;

TABLE_NAME               COMPRESS COMPRESS_FOR
------------------------ -------- ------------
BORRAME_COMPRI               ENABLED    OLTP

Al activar la compresión de datos en una tabla con "ALTER TABLE", los datos existentes siguen sin comprimir, y los nuevos serán comprimidos, conviviendo ambos dentro de la misma tabla.


Además podemos comprimir un índice:

CREATE INDEX ... compress;

Nota: NO se puede usar con ALTER INDEX (a menos que se indique tras la claúsula REBUILD)

select index_name, compression from user_indexes;

INDEX_NAME               COMPRESS
------------------------ --------
PK_BORRAME_COMPRI           DISABLED


alter index pk_borrame_compri rebuild compress;
Index altered.

select index_name, compression from user_indexes;

INDEX_NAME               COMPRESS
------------------------ --------
PK_BORRAME_COMPRI           ENABLED
La compresión de datos resulta muy interesante sobre todo en tablas muy grandes, como pueden ser las de LOG o AUDITORIA. En este último caso (LOG/AUDITORIA), si sólo se hace INSERT en la tabla, se reducirá aún más el espacio ocupado definiendo un "PCTFREE 0". Nosotros hemos hecho pruebas de compresión de una tabla de LOGs con millones de filas, obteniendo un ahorro de espacio del 30%, que sube al 40% haciendo "PCTFREE 0".

Enlaces


Última modificación ( 30.07.2015 )
 
Área de Tecnologías de la Información y las Comunicaciones Aplicadas
Volver al incio del documento Volver al inicio del documento
Área de Tecnologías de la Información y las Comunicaciones Aplicadas