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.  


Optimiza los imports con IMPDP agregando el parametros TRANSFORM=DISABLE_ARCHIVE_LOGGING:Y

Oracle Data Pump (impdp) es una herramienta poderosa para la importación de datos en bases de datos Oracle. Uno de los parámetros menos conocidos pero altamente efectivos para mejorar el rendimiento durante la importación es TRANSFORM=DISABLE_ARCHIVE_LOGGING:Y.

¿Qué hace este parámetro?

El parámetro TRANSFORM=DISABLE_ARCHIVE_LOGGING:Y desactiva temporalmente el registro en el archivo de redo log (archive logging) durante la operación de importación. Esto significa que las operaciones de escritura realizadas por impdp no se registran para recuperación en caso de fallo, lo cual puede acelerar significativamente el proceso de importación.

Beneficios de usarlo

Ejemplo de uso

impdp usuario/password DIRECTORY=dir DUMPFILE=datos.dmp LOGFILE=import.log TRANSFORM=DISABLE_ARCHIVE_LOGGING:Y
    

Consideraciones importantes

  • Este parámetro no debe usarse en entornos de producción donde la recuperación ante fallos es crítica.
  • Solo afecta a objetos que se importan; no desactiva el archive logging para toda la base de datos.
  • Requiere privilegios adecuados para que impdp pueda aplicar esta transformación.
  • Es compatible con Oracle 12c y versiones posteriores.

Conclusión

El uso de TRANSFORM=DISABLE_ARCHIVE_LOGGING:Y en Oracle impdp puede ser una estrategia eficaz de tuning para acelerar importaciones en entornos controlados. Como siempre, se recomienda realizar pruebas antes de aplicar en escenarios reales y evaluar el impacto en la recuperación de datos.

Optimización del Rendimiento en Oracle con el Parámetro filesystemio_options

El rendimiento es una prioridad constante. Uno de los parámetros menos comprendidos pero altamente influyentes en entornos que utilizan almacenamiento basado en archivos es filesystemio_options. Este parámetro puede marcar una diferencia significativa en la forma en que Oracle interactúa con el sistema operativo y el subsistema de almacenamiento.

¿Qué es filesystemio_options?

Disponible desde la version 11g de Oracle y por defecto filesystemio_options es NONE, este parámetro filesystemio_options controla cómo Oracle accede a los archivos del sistema operativo cuando se utilizan archivos de datos en sistemas de archivos (en lugar de dispositivos RAW o ASM). Este parámetro puede afectar directamente el rendimiento de I/O (entrada/salida) de la base de datos.

Valores posibles:

  • NONE: Oracle utiliza el acceso estándar del sistema operativo (buffered I/O).
  • DIRECTIO: Habilita la E/S directa, que omite la caché del búfer del sistema operativo, lo que puede mejorar el rendimiento al reducir la sobrecarga, especialmente en entornos con sus propios mecanismos de almacenamiento en caché.
  • ASYNCH: Habilita la E/S asíncrona, donde las operaciones de Oracle se pueden paralelizar y el sistema operativo maneja la E/S en segundo plano.
  • SETALL: Habilita tanto el direct I/O como el asynchronous I/O si están disponibles. El mas recomendable ya que Oracle eligirá el mejor método.

¿Por qué es importante?

El acceso a disco es uno de los cuellos de botella más comunes en bases de datos. Usar directIO puede reducir la duplicación de caché entre Oracle y el sistema operativo, mientras que asyncIO permite que Oracle continúe procesando mientras espera que se completen las operaciones de disco.

Mejores prácticas para su uso

  1. Evaluar el entorno de almacenamiento: No todos los sistemas de archivos o plataformas soportan directIO o asyncIO. Verifica la compatibilidad con tu sistema operativo y tipo de almacenamiento.
  2. Usar setall en la mayoría de los casos: Si tu sistema lo soporta, setall es generalmente la mejor opción, ya que permite a Oracle aprovechar tanto el acceso directo como el asincrónico.
  3. Monitorear el rendimiento: Usa herramientas como AWR, ADDM o iostat para medir el impacto de los cambios.
  4. Evitar cambios en producción sin pruebas previas: Siempre prueba en un entorno de desarrollo o staging antes de aplicar en producción.

Cómo verificar y cambiar el parámetro

Puedes verificar el valor actual con:

SHOW PARAMETER filesystemio_options;

Y cambiarlo (requiere reinicio de instancia):

ALTER SYSTEM SET filesystemio_options='SETALL' SCOPE=SPFILE;

Consideraciones adicionales

  • En sistemas con Oracle ASM, este parámetro no tiene efecto ya que Oracle ASM maneja su sistema de archivos.
  • En entornos virtualizados o con almacenamiento en red (NFS), el comportamiento puede variar.
  • Algunos sistemas de archivos como XFS o EXT4 en Linux tienen mejor soporte para directIO.

Referencias