Fragmentacion de tablas

Buenas noches

Existen algunas tablas que al tener demasiadas consultas y modificaciones se ponen lentos.

Averiguando me comentaron que debo de tener tablas fragmentadas, asi como regenerar los indices y actualizar las estadisticas.

mi duda es :

- como listar las tablas que estan fragmentadas

- como bajar la fragmentacion de dichas tablas

- el proceso de regenerar los indices y actualizar las estadisticas tienen alguna consecuencia negativa (por ejemplo en sql server este proceso aumenta en gran cantidad el log de sql server)

 

Slds 

Hola Luis

Para eliminar la fragmentación de las tablas de tu base de datos Oracle, si te puedes permitir que no se pueda acceder a ellas mientras dura el proceso, lo más efectivo es hacer un export de las tablas, y después un import. De esta manera, al importarlas, ya se guardan los datos contiguos y se elimina la fragmentación que pueda haber. Si no puedes hacer el export/import, también hay otras maneras. Echa un vistazo a este post para más detalles. Estos consejos de OMARE también te pueden ayudar.

Y si tu base de datos es 10g o superior seguro que el comando shrink table te va a ser de utilidad para compactar los datos de las tablas.

Para consultar el nivel de fragmentación de las tablas, puedes utilizar esta sentencia, obtenida del blog de Bulachi):

  select /*+ rule */ a.owner, a.segment_name, a.segment_type, round(a.bytes/1024/1024,0) MBS,
      round((a.bytes-(b.num_rows*b.avg_row_len) )/1024/1024,0) WASTED,
      'ALTER TABLE '||a.owner||'.'||a.segment_name||' ENABLE ROW MOVEMENT'||';'||'ALTER TABLE '||a.owner||'.'||a.segment_name||' SHRINK SPACE COMPACT'||';'||'ALTER TABLE '||a.owner||'.'||a.segment_name||' SHRINK SPACE;' "SCRIPT"
from dba_segments a, dba_tables b
where a.owner=b.owner and
      a.owner not like 'SYS%' and a.segment_name = b.table_name and a.segment_type='TABLE'
group by a.owner, a.segment_name, a.segment_type, round(a.bytes/1024/1024,0) ,round((a.bytes-(b.num_rows*b.avg_row_len) )/1024/1024,0)
having round(bytes/1024/1024,0) >10
order by round(bytes/1024/1024,0) desc;

La regeneración de los índices y mantener las estadísticas actualizadas en principo siempre va a ser beneficioso para optimizar el rendimiento de una base de datos Oracle y, que yo sepa, no tiene un efecto demasiado grande sobre los logs de Oracle, que igualmente ya deberían estar controlados para que no crezcan indefinidamente. Lo único que has de tener en cuenta es que estos procesos consumen recursos en el momento en que se ejecutan, así que tendrías que buscar ventanas de actuación en las que la base de datos tenga poca actividad o los usuarios no estén conectados.

 

Hola:

 

Me gustaría saber si alguien sabe de un buen curso semi-presencial o mejor online sobre migración de datos, en versión avanzada y/o pl/sql avanzado, necesito un reciclaje un poco dirijido.

Si me podéis recomendar, os lo agradezco.