affinity mask (opción)

Actualizado: 5 de diciembre de 2005

Para llevar a cabo la función de multitarea, Microsoft Windows 2000 y Windows Server 2003 en ocasiones mueven los subprocesos entre diferentes procesadores. Aunque es eficaz desde el punto de vista del sistema operativo, esta actividad puede reducir el rendimiento de Microsoft SQL Server en casos de elevadas cargas de trabajo, ya que cada caché de procesador se recarga repetidamente con los datos. La asignación de procesadores a subprocesos específicos puede mejorar el rendimiento en estas condiciones al eliminar las operaciones de repetición de carga del procesador y reducir la migración de subprocesos entre procesadores (con lo que se reduce el cambio de contexto); dicha asociación entre un subproceso y un procesador se denomina afinidad del procesador.

SQL Server 2005 admite la afinidad del procesador mediante dos opciones de máscara de afinidad: affinity mask (también denominada CPU affinity mask) y affinity I/O mask. Para obtener más información acerca de la opción affinity I/O mask, vea affinity I/O mask (opción). La compatibilidad de la afinidad de CPU y de E/S con servidores que tienen entre 33 y 64 procesadores requiere el uso adicional de affinity64 mask (opción) y affinity64 I/O mask (opción) respectivamente.

[!NOTA] La compatibilidad de la afinidad con servidores que tienen entre 33 y 64 procesadores sólo está disponible en sistemas operativos de 64 bits.

La opción affinity mask, que existía en versiones anteriores de SQL Server, controla la afinidad de la CPU de forma dinámica.

En Microsoft SQL Server 2005, la opción affinity mask se puede configurar sin necesidad de reiniciar la instancia de SQL Server. Cuando utilice sp_configure, deberá ejecutar RECONFIGURE o RECONFIGURE WITH OVERRIDE después de establecer una opción de configuración. Si utiliza SQL Server Express, es necesario reiniciar después de modificar la opción affinity mask.

Los cambios en las máscaras de afinidad se producen de forma dinámica, lo que permite el inicio y cierre a petición de los programadores de CPU que enlazan los subprocesos en SQL Server. Esto puede ocurrir cuando cambien las condiciones del servidor. Por ejemplo, si se agrega al servidor una nueva instancia de SQL Server, puede ser necesario realizar ajustes en la opción affinity mask para redistribuir la carga del procesador.

Las modificaciones de las máscaras de bits de afinidad requieren que SQL Server habilite un nuevo programador de CPU y deshabilite el programador de CPU existente. A continuación se pueden procesar otros lotes en los programadores nuevos o restantes.

Para iniciar un nuevo programador de CPU, SQL Server crea un nuevo programador y lo agrega a la lista de programadores estándar. El nuevo programador sólo se tiene en cuenta para los nuevos procesos por lotes entrantes. Los procesos por lotes actuales continúan ejecutándose en el mismo programador. Los subprocesos de trabajo migran al nuevo programador cuando se liberan o cuando se crean nuevos subprocesos de trabajo.

Para cerrar un programador, es necesario que todos los procesos por lotes del programador finalicen sus actividades y se cierren. Los programadores que se han cerrado se marcan como sin conexión para que no se programe ningún proceso por lotes nuevo en ellos.

Tanto si se agrega un nuevo programador como si se quita, las tareas permanentes del sistema, como lockmonitor, checkpoint, subproceso de tarea del sistema (DTC en procesamiento) y el proceso de señal, continúan ejecutándose en el programador mientras el servidor esté operativo. Estas tareas permanentes del sistema no se migran de forma dinámica. Para redistribuir la carga del procesador para estas tareas del sistema entre los programadores, es necesario reiniciar la instancia de SQL Server. Si SQL Server intenta cerrar un programador asociado con una tarea permanente del sistema, ésta continúa ejecutándose en el programador sin conexión (sin migración). Este programador está enlazado a los procesadores de la máscara de afinidad modificada y no debe imponer ninguna carga en el procesador con el que se estableció la afinidad antes del cambio. La existencia de programadores sin conexión adicionales no debería afectar significativamente a la carga del sistema. En caso contrario, es necesario reiniciar el servidor de base de datos para volver a configurar las tareas.

La máscara de afinidad de E/S afecta directamente a las tareas de afinidad de E/S (como lazywriter y logwriter). Si no se ha establecido la afinidad para las tareas lazywriter y logwriter, siguen las mismas reglas definidas para las demás tareas permanentes, como lockmonitor o checkpoint.

Para asegurarse de que la nueva máscara de afinidad es válida, el comando RECONFIGURE comprueba que las afinidades normales de CPU y E/S se excluyen mutuamente. En caso contrario, se envía un mensaje de error a la sesión de cliente y al registro de errores de SQL Server para indicar que no se recomienda dicha configuración. La ejecución de la opción RECONFIGURE WITH OVERRIDE permite afinidades de CPU y E/S que no se excluyen mutuamente.

Si especifica una máscara de afinidad que intenta asignarse a una CPU inexistente, el comando RECONFIGURE envía un mensaje de error a la sesión de cliente y al registro de errores de SQL Server. El uso de la opción RECONFIGURE WITH OVERRIDE no tiene efecto en este caso y se vuelve a enviar el mismo error de configuración.

También puede excluir la actividad de SQL Server de los procesadores a los que el sistema operativo Windows 2000 o Windows Server 2003 han asignado cargas de trabajo específicas. Si establece el valor 1 para un bit que representa un procesador, el motor de base de datos de SQL Server selecciona dicho procesador para la asignación de subprocesos. Si establece el valor 0 (predeterminado) para affinity mask, los algoritmos de programación de Windows 2000 o Windows Server 2003 establecen la afinidad del subproceso. Si establece affinity mask en cualquier valor distinto de cero, la afinidad de SQL Server interpreta el valor como una máscara de bits que especifica los procesadores que se pueden seleccionar.

Mediante la separación de los subprocesos de SQL Server para que se ejecuten en determinados procesadores, Microsoft Windows 2000 o Windows Server 2003 pueden evaluar mejor el control de los procesos específicos de Windows por parte del sistema. Por ejemplo, en un servidor de 8 CPU en el que se ejecutan dos instancias de SQL Server (instancia A y B), el administrador del sistema puede utilizar la opción affinity mask para asignar el primer conjunto de 4 CPU a la instancia A y el segundo conjunto de 4 CPU a la instancia B. Para configurar más de 32 procesadores, establezca las opciones affinity mask y affinity64 mask. Los valores de affinity mask son los siguientes:

  • Una opción affinity mask de un byte cubre hasta 8 CPU en un equipo con varios procesadores.
  • Una opción affinity mask de dos bytes cubre hasta 16 CPU en un equipo con varios procesadores.
  • Una opción affinity mask de tres bytes cubre hasta 24 CPU en un equipo con varios procesadores.
  • Una opción affinity mask de cuatro bytes cubre hasta 32 CPU en un equipo con varios procesadores.
  • Para cubrir más de 32 CPU, configure una máscara de afinidad de cuatro bytes para las primeras 32 CPU y una máscara affinity64 de hasta cuatro bytes para las restantes CPU.

Como la configuración de la afinidad del procesador de SQL Server es una operación especial, se recomienda utilizarla sólo cuando sea necesario. En la mayor parte de los casos, el mejor rendimiento se obtiene con la afinidad predeterminada de Microsoft Windows 2000 o Windows Server 2003. Al configurar las máscaras de afinidad, también debe considerar los requisitos de CPU para otras aplicaciones. Para obtener más información, vea la documentación del sistema operativo Windows.

[!NOTA] Puede utilizar el Monitor de sistema de Windows para ver y analizar el uso individual del procesador.

Al especificar la opción affinity mask, debe utilizarla en conexión con la opción de configuración affinity I/O mask. No habilite la misma CPU en las opciones affinity mask y affinity I/O mask simultáneamente. Los bits correspondientes a cada CPU deben estar en uno de los tres estados siguientes:

  • 0 en la opción affinity mask y 0 en la opción affinity I/O mask.
  • 1 en la opción affinity mask y 0 en la opción affinity I/O mask.
  • 0 en la opción affinity mask y 1 en la opción affinity I/O mask.
ms187104.Caution(es-es,SQL.90).gifAdvertencia:
No configure la afinidad de CPU en el sistema operativo Windows y la máscara de afinidad en SQL Server simultáneamente. Esta configuración intenta lograr el mismo resultado y, si las configuraciones son incoherentes, pueden producirse resultados imprevisibles. La mejor forma de configurar la afinidad de CPU de SQL Server es utilizar el procedimiento sp_configure de SQL Server.

Ejemplo

Como ejemplo de configuración de la opción affinity mask, si los procesadores 1, 2 y 5 están seleccionados como disponibles con el valor 1 para los bits 1, 2 y 5, y el valor 0 para los bits 0, 3, 4, 6 y 7, se especifica el valor hexadecimal 0x26 o el valor decimal equivalente 38. Enumere los bits de derecha a izquierda. La opción affinity mask comienza a contar los procesadores de 0 a 31, de forma que en el siguiente ejemplo el contador 1 representa el segundo procesador del servidor.

sp_configure 'show advanced options', 1;
RECONFIGURE;
GO
sp_configure 'affinity mask', 38;
RECONFIGURE;
GO

A continuación se indican los valores de affinity mask para un sistema con 8 CPU.

Valor decimal Máscara de bits binarios Permitir subprocesos de SQL Server en procesadores

1

00000001

0

3

00000011

0 y 1

7

00000111

0, 1 y 2

15

00001111

0, 1, 2 y 3

31

00011111

0, 1, 2, 3 y 4

63

00111111

0, 1, 2, 3, 4 y 5

127

01111111

0, 1, 2, 3, 4, 5 y 6

255

11111111

0, 1, 2, 3, 4, 5, 6 y 7

La opción affinity mask es una opción avanzada. Si utiliza el procedimiento almacenado del sistema sp_configure para modificar el valor, sólo puede cambiar la opción affinity mask si show advanced options tiene establecido el valor 1. El nuevo valor surte efecto inmediatamente después de ejecutar el comando RECONFIGURE de Transact-SQL sin necesidad de reiniciar la instancia de SQL Server.

Acceso no uniforme a memoria (NUMA)

Cuando se utiliza el acceso no uniforme a memoria (NUMA) basado en hardware y se ha establecido affinity mask, se establecerá la afinidad de cada programador de un nodo con su propia CPU. Cuando no se establece affinity mask, se establece la afinidad de cada programador con el grupo de CPU en un nodo NUMA y un programador asignado al nodo NUMA N1 puede programar trabajos en cualquier CPU del nodo, pero no en las CPU asociadas con otro nodo.

Cualquier operación que se ejecute en un solo nodo NUMA únicamente puede utilizar las páginas de búfer de ese nodo. Cuando una operación se ejecuta en paralelo en las CPU de varios nodos, se puede utilizar la memoria de cualquiera de estos nodos.

Consideraciones acerca de las licencias

La afinidad dinámica está estrictamente restringida por las licencias de CPU. SQL Server no permite la configuración de las opciones de máscara de afinidad que infrinjan las directivas de las licencias.

Inicio

Si una máscara de afinidad especificada infringe las directivas de las licencias durante el inicio de SQL Server o al adjuntar la base de datos, la capa del motor finalizará el proceso de inicio o la operación para adjuntar o restaurar la base de datos; después restablecerá a cero el valor de ejecución de sp_configure para la máscara de afinidad y enviará un mensaje de error al registro de errores de SQL Server.

Reconfigurar

Si una máscara de afinidad determinada infringe las directivas de las licencias al ejecutar el comando RECONFIGURE de Transact-SQL, se envía un mensaje de error a la sesión de cliente y al registro de errores de SQL Server para requerir que el administrador de la base de datos vuelva a configurar la máscara de afinidad. En este caso no se acepta ningún comando RECONFIGURE WITH OVERRIDE.

Vea también

Conceptos

Establecer las opciones de configuración del servidor

Otros recursos

Supervisar el uso de recursos (Monitor de sistema)
RECONFIGURE (Transact-SQL)
sp_configure (Transact-SQL)

Ayuda e información

Obtener ayuda sobre SQL Server 2005

Historial de cambios

Versión Historial

5 de diciembre de 2005

Contenido nuevo:
  • Se agregó la sección sobre NUMA.