ARTICULO: Alineado de datos en la partición y DIRECT IO

En la actualidad es muy normal utilizar granjas de máquinas virtuales para llevar el peso de las bases de datos Informix. Esta solución funciona muy bien y da mucha flexibilidad, pero si no se hace bien es posible que el rendimiento sea peor de lo esperado.

A la hora de hacer nuevas particiones, algunos sistemas operativos establecen el inicio de la partición en los primeros sectores del disco, de forma que se aprovecha más la capacidad del disco. Sin embargo, esto tiene un problema con Informix si estamos utilizando DIRECT IO.

El problema viene dado por los tamaños de los bloques de los dispositivos y el punto de inicio de la partición. Normalmente los dispositivos tienen tamaños de bloque de 4096 bytes, pero el desplazamiento que se pone al particionar con fdisk es de 32256 bytes (63 bloques de 512 bytes) u otro similar pero que no es múltiplo del tamaño de bloque del dispositivo.

Como ya hemos dicho 32256 no es un múltiplo de 4096 y, por tanto, los datos no quedan correctamente alineados. Esto no significa que el sistema no funcione, pero sí que significa que puede ocurrir una pérdida de rendimiento por el desalineado de los datos y así puede quedar reflejado en los logs del sistema, indicando que el proceso oninit tiene un problema de rendimiento por el desalineado de datos.

Si no se utiliza DIRECT IO este problema no aparece, ya que el propio sistema operativo se encarga de realizar la gestión de los tamaños de bloque, pero si es posible es recomendable utilizar DIRECT IO ya que es más rápido y consume menos recursos del sistema.

Para evitar este problema es necesario establecer un desplazamiento inicial de la partición de 2048 bloques de 512 bytes, con lo cual alineamos con todos los tamaños de bloque que sean divisores de 1048576 bytes (1KB, 2 KB, 4 KB, 8 KB, 16 KB, 32 KB, 64 KB, 128 KB, 256 KB y 512 KB) y únicamente desperdiciamos 1 MB de disco, algo insignificante con los tamaños actuales.

Podemos ver el desplazamiento en un sistema Linux por medio del comando fdisk –lu. A continuación vemos dos ejemplos, uno correcto y otro incorrecto sobre el alineado de discos:

Disco /dev/sda: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders, 20971520 sectores en total
Units = sectores of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0002e596

Disposit. Inicio Comienzo Fin Bloques Id Sistema
/dev/sda1 * 2048 20971519 10484736 83 Linux

Disco /dev/sdc: 53.7 GB, 53687091200 bytes
64 heads, 32 sectors/track, 51200 cylinders, 104857600 sectores en total
Units = sectores of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xca382dff

Disposit. Inicio Comienzo Fin Bloques Id Sistema
/dev/sdc1 63 104857599 52428784 83 Linux

Para cualquier información acerca del mundo de informix o cualquier otro producto de IBM, no dude en consultarnos.

Proyectos y Soluciones
Proyectos y Soluciones
Artículos: 163