Son muchos los factores que entran en juego, a la hora de conseguir buenos rendimientos, en la entrada y salida de los discos: factores como el número, tamaño y velocidad de los discos, tamaño de la unidad, si los discos están dedicados, compartidos, o son virtuales, los niveles de RAID, la velocidad del bus, almacenamiento (SAN) así como las configuración de adaptadores (HBA), versiones de los controladores, carga de trabajo…, un punto importante que frecuentemente se pasa por alto es la alineación en las particiones de disco.
La mala o errónea configuración del almacenamiento, para el software de Microsoft SQL Server, produce penalización en los tiempos de I/O (entradas y salidas en disco). El no realizar una alineación de partición correcta puede causar una degradación del rendimiento. La alineación de la partición del disco es un requisito para las particiones/discos/volumenes que exigen un alto rendimiento, para los que se crearon dispositivos de disco en RAID en versiones anteriores a Windows Server 2008, donde era necesario aplicar dicho alineamiento. Hoy día, gracias a Windows Server 2008, se crea un desplazamiento inicial en las particiones con un tamaño suficiente (1024kb) para que queden alineados, casi con toda probabilidad (esto se tocará en detalle mas adelante)
En ocasiones se piensa erróneamente que el alineamiento es útil sólo para Microsoft Exchange Server. De hecho, la alineación de partición es importante para todos los servidores de los cuales se espera un alto rendimiento, especialmente de SQL Server.
Datos necesarios para una correcta alineación
La unidad fundamental del almacenamiento de los datos en SQL Server es la página. El espacio en disco asignado a un archivo de datos (.mdf o .ndf) de una base de datos se divide lógicamente en páginas numeradas de forma contigua de 0 a n. Las operaciones de E/S de disco se realizan a nivel de página. Es decir, SQL Server lee o escribe páginas de datos enteras. El tamaño de página es de 8 KB. Esto significa que las bases de datos de SQL Server tienen 128 páginas por megabyte.
Starting Partition Offset
Starting Partition Offset, es el desplazamiento inicial en la partición del volumen, que garantice la omisión de asignación de páginas de datos en “n” sectores ocultos (creados por el hardware de almacenamiento) al principio de los volúmenes. El valor de Starting Partition Offset, nos da el tamaño exacto o superior de la Partition Offset, esta cifra representa el tamaño de los sectores ocultos (creados por el hardware de almacenamiento) al principio de la partición, donde se alberga informaciones tales como, la tabla de particiones que localizan la ubicación física de los diferentes volúmenes, la famosa “firma” del disco y el código máquina que se encarga de recibir el control de la BIOS tras el POST e invoca el código del Boot Sector de la partición que esté activa, que será quien comience a cargar los binarios del sistema operativo. La primera partición, donde albergará las páginas de datos no comienza inmediatamente después, en el segundo sector, sino que se suele desplazar un número.
Es necesario conocer el valor de recomendación de Starting partition Offset a la hora de alinear las particiones. El hardware reporta un número de sectores ocultos iniciales (en muchos casos 63) que hace que sistemas Windows Server 2003 alineen incorrectamente la partición basándose en este dato. Si vuestro proveedor de hardware no tiene ninguna recomendación sería deseable conocer el tamaño de estos sectores ocultos (hidden sectors) para tomar una decisión. Por este motivo, se ha creado para las particiones un desplazamiento inicial, para sistemas Windows Server 2008, con un tamaño suficiente (1024kb), garantizando la no utilización de los sectores ocultos, para que queden alineados los discos que forman esas particiones, casi con toda probabilidad.
Para versiones Windows Server 2003 y anteriores, Definir el desplazamiento inicial a 32 KB o incluso a 64 KB, suele ser este último, el mínimo más común, válido para la partición inicial de desplazamiento para SQL Server debido a las correlaciones más frecuentes de discos.
Windows Server 2008 por defecto tiene la alineación a 1024 KB (es decir, 1.048.576 bytes). Este valor proporciona una solución normalmente buena. Se correlaciona bien con tamaños tales como 64 KB, 128 KB y 256 KB, así como los valores de uso menos frecuente de 512 KB y 1024 KB. Garantizando la omisión de asignación de datos a estructuras de sectores ocultos creados por el hardware de almacenamiento.
Stripe_Unit_Size
Stripe_Unit_Size es la unidad mínima de asignación en la escritura en banda (En el caso de una Cabina, donde se asignan varios discos o porciones de varios discos a un Volumen, se balancea la escritura/lectura en una serie de discos, cada escritura/lectura por disco tiene un tamaño mínimo, ese es el dato que necesitamos conocer. Los técnicos dedicados al almacenamiento o proveedor del mismo, pueden proporcionar este dato. Debería ser múltiplo de 8, ya que 8 Kb es el tamaño de página, y de esta forma asegurar la inclusión de páginas completas, en la unidad mínima de asignación en la escritura en banda (Stripe_Unit_Size).
De esta forma, se intenta garantizar páginas de datos completas, dentro de un mismo posicionamiento de la cabeza lectora en disco, sin que la última página quede fragmentada al final y al principio de dos posicionamientos, evitando de esta forma, el segundo posicionamiento si no fuera necesaria la lectura de mas páginas de datos.
Partition Offset, File Allocation Unit Size, and Stripe Unit Size
Hay dos reglas, que se cumplen para una correcta alineación de discos. Los resultados de los cálculos siguientes han de dar un valor entero:
Partition_Offset ÷ Stripe_Unit_Size