lunes, 21 de julio de 2025

Fragmentacion de tablas Oracle

Como sabemos, las base de datos transacciones por las operaciones DML (Update, Insert y Delete)  generan un efecto de fragmentación en los segmentos de tablas e indices.

En un blog anterior se especifica a detalle como realizar la recuperación del espacio sub-utilizado Recuperar espacio inutilizado de los segmentos SHRINK SPACE

Ahora en este blog vamos a determinar la cantidad de información que podemos recuperar de los segmentos de tablas e indices.
Veamos un ejemplo.

Creamos una tabla FRAMENTACION.

CREATE TABLE FRAGMENTACION TABLESPACE USERS AS SELECT ROWNUM FILA, O.* FROM ALL_OBJECTS OCROSS JOIN (SELECT ROWNUM FROM DUAL CONNECT BY LEVEL<=5);

Veamos la asignación al segmento de tabla FRAMENTACION.
SELECT SEGMENT_TYPE,BLOCKS,BYTES / (1024*1024)MB FROM DBA_SEGMENTS WHERE OWNER='SCOTT' AND SEGMENT_NAME='FRAGMENTACION';
SEGMENT_TYPE           BLOCKS         MB------------------ ---------- ----------TABLE                   10240         801 row selected.

Borremos algunos datos de la tabla  FRAMENTACION.
DELETE FROM FRAGMENTACION WHERE MOD(FILA,10)<=3;
223779 rows deleted.

Veamos el espacio asignado al segmento de la tabla FRAMENTACION

SELECT SEGMENT_TYPE,BLOCKS,BYTES / (1024*1024)MB FROM DBA_SEGMENTS WHERE OWNER='SCOTT' AND SEGMENT_NAME='FRAGMENTACION';
SEGMENT_TYPE           BLOCKS         MB------------------ ---------- ----------TABLE                   10240         801 row selected.

Nos damos cuenta que el espacio asignado es el mismo, esto debido a que los bloques de datos no se liberan por completo, a esto se le llama fragmentación.  


No hay comentarios:

Publicar un comentario