Mejorar el performance, reordenando la tabla

mayo 24, 2011
admin

Reordenar datos de una tabla a otra en oracle database 11g 10g con indices + Performance

Cuando se tienen problemas de performance en cualquier aplicacion de bases de datos, uno de los mejores tips de performance que puedo hacer, aparte de configurar adecuadamente las variables de ambiente, es reestructurar las tablas importantes de Oracle.

por ejemplo, tenemos una tabla de un datawarehouse o una tabla muy grande y Oracle para guardar los archivos lo hace como van llegando e identifica los archivos por el RowID o por la primary key que tenga asignada, pero no deja de estar desordenado.

Hacer esto me mejoro el performance del business intelligence 5 veces en lectura de consultas, el chiste aqui es reordenar la tabla basado en las columnas que utiliza para identificar los datos y esto es algo sencillo.

Para empezar esto no se puede hacer mientras la base de datos este en utilizacion ya que la tabla que reorganizaremos estara inaccesible por un rato (el tiempo depende del tamaño).

primero clonamos la tabla en otra con otro nombre (de preferencia en el mismo esquema y mismo tablespace que la primera)

create tabla DATOSTEMP as select * from DATOS order by COLUMNAID1, COLUMNAID2 tablespace TBLSPCDATOS;

esto clonara la tabla, pero ordenando la nueva a nivel logico, de esa manera las lecturas mejoraran enormemente

luego renombramos la tabla original DATOS a otro nombre

alter table DATOS rename to DATOSBKP;

y ponemos la nueva tabla en su lugar

alter table DATOSTEMP rename to DATOS;

listo la tabla estara reordenada, pero al hacer esto no nos trajimos los indices y eso puede ser otro problema, para recrear los indices ejecutamos los siguientes comandos

set pagesize 0
set long 90000
set feedback off
set echo off
spool recreaindex.sql
select dbms_metadata.get_ddl(‘INDEX’, index_name) from user_indexes where table_name = ‘DATOSBKP’;

despues de que nos arroje los resultados, escribimos

spool off;

y dentro de nuestro directorio del sistema operativo creo un archivo que se llama recreaindex.sql
lo editamos con un editor de textos, por ejemplo VI o nano

 vi recreaindex.sql

vienen los scripts de creacion de todos los indices, alli le agregamos un ; al final de cada parrafo (despues del nombre del TABLESPACE)
y si no hemos eliminado los indices anteriores, le cambiamos ligeramente el nombre del indice

Saludos.

No comments

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *