Blog gratis
Reportar
Editar
¡Crea tu blog!
Compartir
¡Sorpréndeme!
img
img

 

 

SQL Server
Blog. (Apuntes y Recopilaciones) por Norman M. Pardell

img
img
06 de Abril, 2011 · alineación

Alineamiento de particiones, en discos para bases de datos SQL Server

 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

Stripe_Unit_Size ÷ File_Allocation_Unit_Size

 De las dos reglas anteriores, la primera es mucho más importante para conseguir un rendimiento óptimo.

 Como nota, comentar que el File_Allocation_Unit_Size, se puede especificar explícitamente a la hora de formatear, un tamaño de 64 KB, valor máximo permitido en NTFS (64 KB), que se recomienda por ejemplo para los volúmenes que vayan a almacenar bases de datos de Exchange o SQL.

Ejemplo de escenario con desalineación en los discos

Dada una partición con desplazamiento inicial “Starting Partition Offset” de 32.256 bytes (31,5Kb) y con un tamaño de escritura en banda “Stripe Unit Size” de 65.536 bytes (64 Kb), el resultado de Partition_Offset ÷ Stripe_Unit_Size es de 0.4921875, no es un número entero, por lo que se consideran que los discos no están alineados.


Ejemplo de escenario con alineación en los discos

 

Dada una partición con desplazamiento inicial “Starting Partition Offset” de 1048576 bytes (1Kb) y con un tamaño de escritura en banda “Stripe Unit Size” de 65.536 bytes (64 Kb), el resultado de Partition_Offset ÷ Stripe_Unit_Size es exactamente 8, un numero entero exacto, lo cual se puede decir que la alineación es correcta.


 A modo de ejemplo en estudios realizados, sobre rendimiento con accesos a I/O en bases de datos de SAP sobre SQL Server, usando servidores de 8-cores y 16GB de memoria y sobre cabinas de almacenamiento “EMC Symetrix SAN”, ajustando el Stripe_Unit_Size se han obtenido mejoras de rendimiento de:

Con Stripe_Unit_Size a 8 KB se obtienen mejoras del  18%

Con Stripe_Unit_Size a 64 KB se obtienen mejoras del  26%

Con Stripe_Unit_Size a 256 KB se obtienen mejoras del  23%.

Frente a Volúmenes de discos, no alineados.

 

Consultar el estado de los actuales discos

 La sintaxis del comando WMIC mas utilizada para sacar todos los datos del disco es la siguiente: 

wmic partition get BlockSize, BootPartition, DeviceID, DiskIndex, HiddenSectors, NumberOfBlocks,  StartingOffset, Name, Index 

 Pero se puede sacar más datos con la multitud de sintaxis que tiene el comando, mirándole la ayuda con: wmic partition get /? Se puede sacar mucho mas.

  Y para profundizar en sacar más datos detallados de los discos lo podemos hacer con él: fsutil fsinfo ntfsinfo “letra de unidad” D:  por ejemplo.

 

Crear particiones alineadas en nuevos discos asignados.

 Cuando creamos una partición sobre una LUN con Windows Server 2008, Windows Vista o posteriores, ya se incluye por defecto un offset de 1 MB (1048576 bytes). Esto produce un alineamiento automático para casi todos los Stripe Sizes presentes en los sistemas de almacenamiento, ya que 1 MB es un múltiplo de 64 KB, 128 KB, 256 KB y 512 KB. No obstante siempre es posible afinar o incrementar dicho valor exactamente igual que lo haremos en Windows Server 2003, o incluso podemos configurándolo desde el registro.

En Windows Server 2000 y Windows Server 2003 usaremos las herramientas DISKPAR y DISKPART. Puede actualizar la versión de diskpar en su Windows Server 2003, desde: http://support.microsoft.com/kb/923076/en-us y para alinear particiones puede usar diskpar.exe: http://technet.microsoft.com/en-us/library/bb643097(EXCHG.80).aspx y http://technet.microsoft.com/en-us/library/bb643096(EXCHG.80).aspx

Ejemplo para alinear una partición de discos utilizando 64 KB de E/s

 

Usando el comando Diskpart:

 

Aling = N es el número de kilobytes (KB) desde el principio del disco al inicio de alineación “Starting Partition Offset”. Size = N se especifica en megabytes (MB). Si no se especifica ningún tamaño, la partición se extenderá para todo su tamaño. Por ejemplo, "align = 64 size = 1000" es igual una alineación de 64 KB de E/s para un tamaño de partición de 1000 MB (1 GB).

 

Posibles ejemplos:

 

Diskpart Select disk 0

Create partition primary align=64 size=10000

Create partition primary align=64 size=40000

Create partition primary align=64

 

 

Os dejo una referencia de interés, para más información al respecto (RECOMENDADA SU LECTURA): http://msdn.microsoft.com/en-us/library/dd758814(v=sql.100).aspx

 

Apunte y recopilación por Norman M. Pardell

Puedes consultarme, si deseas cualquier aclaración, pregunta o sugerencia en: Contacto, contestaré tan pronto como me sea posible.

publicado por normanmpardell a las 10:00 · Sin comentarios  ·  Recomendar
Comentarios (0) ·  Enviar comentario
Esta entrada no admite comentarios.
img
.Sobre mí
FOTO

Norman M. Pardell

MCITP: Database Administrator & Database Developer, SQL Server 2008. MCC Award Certificate. Consultor Senior de bases de datos en Capgemini España, S.L. Asesoramiento en implementación, desarrollo y gestión de bases de datos en grandes compañías. Actualmente, asignado a proyecto en compañía líder en el sector energético global. Más de 10 años trabajando con SQL Server (y otros gestores de BBDD)

» Ver perfil

img
.Secciones
» Inicio
img
.Enlaces
» Microsoft MSDN Foros
» Windows Server 2012
img
.Más leídos
» Asignar la cantidad correcta de Memoria para SQL Server
» Base de Datos Sospechosa (Suspect)
» Como modificar la Intercalación (Collation) en SQL Server
» Como renombrar una instancia de SQL Server. sp_dropserver. sp_addserver
» Detectar bloqueos. SQL Server V.2005 y superiores
» Funciones SQL Server. Funciones escalares y funciones con valores de tabla.
» Integridad y corrupción en las bases de datos: DBCC CHECKDB
» Log de transacciones ( .ldf ). SQL Server.
» Migrando SQL Server 2005, 2008, 2008 R2 a SQL Server 2012
» Transacciones activas. SQL server 2008
img
.Nube de tags [?]
                                                           
img img
FULLServices Network | Crear blog | Privacidad