Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Nota:
Esta característica se quitará en una versión futura de Microsoft SQL Server. No utilice esta característica en nuevos trabajos de desarrollo y modifique lo antes posible las aplicaciones que actualmente la utilizan. Use ALTER SERVER CONFIGURATION (Transact-SQL) en su lugar.
Para llevar a cabo varias tareas, Microsoft Windows a veces mueve subprocesos de proceso entre diferentes procesadores. Aunque es eficaz desde el punto de vista del sistema operativo, esta actividad puede reducir el rendimiento de SQL Server en casos de elevadas cargas, ya que cada caché de procesador se vuelve a cargar repetidamente con los datos. La asignación de procesadores a subprocesos específicos puede mejorar el rendimiento en estas condiciones mediante la eliminación de las recargas del procesador y la reducción de la migración de subprocesos entre procesadores (lo que reduce el cambio de contexto); dicha asociación entre un subproceso y un procesador se denomina afinidad de procesador.
SQL Server admite afinidad de procesador mediante dos opciones de máscara de afinidad: máscara de afinidad (también conocida como máscara de afinidad de CPU) y máscara de E/S de afinidad. Para obtener más información sobre la opción de máscara de afinidad I/O, consulte Affinity Input-Output mask Server Configuration Option. La compatibilidad de afinidad de CPU e E/S con servidores con 33 a 64 procesadores requiere el uso adicional de la opción de configuración del servidor affinity64 mask y affinity64 Input-Output mask Server Configuration Option, respectivamente.
Nota:
La compatibilidad de la afinidad con servidores que tienen entre 33 y 64 procesadores solo está disponible en sistemas operativos de 64 bits.
La opción de máscara de afinidad, que existía en versiones anteriores de SQL Server, controla dinámicamente la afinidad de CPU.
En SQL Server, la opción de máscara de afinidad se puede configurar sin necesidad de reiniciar la instancia de SQL Server. Al usar sp_configure, debe ejecutar RECONFIGURE o RECONFIGURE WITH OVERRIDE después de establecer una opción de configuración. Cuando se usa SQL Server Express, cambiar la opción de máscara de afinidad requiere un reinicio.
Los cambios en las máscaras de afinidad se producen de forma dinámica, lo que permite el inicio y apagado 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 una nueva instancia de SQL Server al servidor, puede ser necesario realizar ajustes en la opción de máscara de afinidad 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 uno nuevo y lo agrega a la lista de programadores estándar. El nuevo programador solo 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. Un programador de tareas que se ha apagado se marca como offline para que no se programen nuevos lotes en él.
Ya sea que se agregue o se quite un nuevo programador, las tareas permanentes del sistema, como el lockmonitor, el checkpoint, el hilo de tarea del sistema (procesamiento de DTC), y el proceso de señal continúan ejecutándose en el planificador mientras el servidor está operativo. Estas tareas permanentes del sistema no se migran dinámicamente. Para redistribuir la carga del procesador para estas tareas del sistema entre programadores, es necesario reiniciar la instancia de SQL Server. Si SQL Server intenta apagar un programador asociado con una tarea permanente del sistema, esta 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 colocar ninguna carga en el procesador con el que se afinó antes del cambio. Tener programadores extra sin conexión no debería afectar significativamente la carga del sistema. Si no es así, se requiere un reinicio del servidor de bases de datos para volver a configurar estas tareas.
Las tareas de afinidad de E/S (como lazywriter y logwriter) se ven directamente afectadas por la máscara de afinidad de E/S. Si las tareas de escritura diferida y de escritura de registros no tienen afinidad asignada, siguen las mismas reglas definidas para otras tareas permanentes, como el monitor de bloqueos o el punto de control.
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 son mutuamente excluyentes. Si no es así, se notifica un mensaje de error a la sesión del cliente y al registro de errores de SQL Server, lo que indica que no se recomienda este tipo de configuración. La ejecución de las opciones RECONFIGURE WITH OVERRIDE permite afinidades de CPU e E/S que no son mutuamente excluyentes.
Si especifica una máscara de afinidad que intenta asignar a una CPU inexistente, el comando RECONFIGURE notifica un mensaje de error a la sesión del cliente y al registro de errores de SQL Server. El uso de la opción RECONFIGURE WITH OVERRIDE no tiene ningún efecto en este caso y se vuelve a notificar el mismo error de configuración.
También puede excluir la actividad de SQL Server de los procesadores asignados a asignaciones de cargas de trabajo específicas por el sistema operativo Windows 2000 o Windows Server 2003. Si establece un bit que representa un procesador en 1, el motor de base de datos de SQL Server selecciona ese procesador para la asignación de subprocesos. Cuando se establece affinity mask
en 0 (valor predeterminado), los algoritmos de programación de Microsoft 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.
Al separar los subprocesos de SQL Server de ejecutarse en determinados procesadores, Microsoft Windows 2000 o Windows Server 2003 pueden evaluar mejor el control del sistema de procesos específicos de Windows. Por ejemplo, en un servidor de 8 CPU que ejecuta dos instancias de SQL Server (instancia A y B), el administrador del sistema podría usar la opción affinity mask para asignar el primer conjunto de 4 CPU a la instancia A y el segundo conjunto de 4 en la instancia B. Para configurar más de 32 procesadores, establezca la máscara de afinidad y la máscara affinity64. Estos son los valores para affinity mask
:
Un byte
affinity mask
cubre hasta 8 CPU en un equipo de varios procesadores.Un dos bytes
affinity mask
cubre hasta 16 CPUs en un equipo multiprocesador.Tres bytes
affinity mask
cubren hasta 24 CPUs en un ordenador multiprocesador.Un dato de cuatro bytes
affinity mask
cubre hasta 32 CPUs en un ordenador multiprocesador.Para cubrir más de 32 CPU, configure una máscara de afinidad de cuatro bytes para las primeras 32 CPU y hasta una máscara de afinidad de cuatro bytes64 para las CPU restantes.
Dado que establecer la afinidad de procesador de SQL Server es una operación especializada, se recomienda usar solo cuando sea necesario. En la mayoría de los casos, la afinidad predeterminada de Microsoft Windows 2000 o Windows Server 2003 proporciona el mejor rendimiento. También debe tener en cuenta los requisitos de CPU para otras aplicaciones al establecer las máscaras de afinidad. Para obtener más información, vea la documentación del sistema operativo Windows.
Nota:
Puede usar el Monitor de sistema de Windows para ver y analizar el uso individual del procesador.
Al especificar la opción affinity I/O mask, debe utilizarla junto con la opción de configuración affinity mask. No active la misma CPU en el conmutador affinity mask
y en la opción de máscara de afinidad de E/S. Los bits correspondientes a cada CPU deben estar en uno de los tres estados siguientes:
0 en la máscara de afinidad y en la máscara de afinidad de E/S.
1 en la opción de máscara de afinidad y 0 en la opción de máscara de E/S de afinidad.
0 en la opción de máscara de afinidad y 1 en la opción de máscara de I/O de afinidad.
Precaución
No configuréis la afinidad de CPU en el sistema operativo Windows ni configuréis la máscara de afinidad en SQL Server. Esta configuración intenta lograr el mismo resultado y, si las configuraciones no son coherentes, puede obtener resultados impredecibles. La afinidad de CPU de SQL Server se configura mejor mediante la opción sp_configure en SQL Server.
Ejemplo
Como ejemplo de establecer la opción de máscara de afinidad, si los procesadores 1, 2 y 5 están seleccionados como disponibles con bits 1, 2 y 5 establecidos en 1 y bits 0, 3, 4, 6 y 7 establecidos en 0, se especifica un valor hexadecimal de 0x26 o el equivalente decimal de 38
. Numera los bits de derecha a izquierda. La opción affinity mask inicia el recuento de procesadores de 0 a 31, de modo que en el ejemplo siguiente, el contador 1
representa el segundo procesador del servidor.
sp_configure 'show advanced options', 1;
RECONFIGURE;
GO
sp_configure 'affinity mask', 38;
RECONFIGURE;
GO
Estos son affinity mask
valores para un sistema de 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 máscara de afinidad es una opción avanzada. Si usa el procedimiento almacenado del sistema sp_configure para cambiar la configuración, solo puede cambiar affinity mask
cuando mostrar opciones avanzadas esté establecida en 1. Después de ejecutar el comando Transact-SQL RECONFIGURE, la nueva configuración surte efecto inmediatamente sin necesidad de reiniciar la instancia de SQL Server.
Acceso a memoria no uniforme (NUMA)
Cuando se utiliza el acceso a memoria no uniforme (NUMA) basado en hardware y se establece la máscara de afinidad, cada planificador de un nodo será afinado a su propia CPU. Cuando no se establece la máscara de afinidad, cada programador se asocia al grupo de CPU dentro del nodo NUMA, y un programador asignado al nodo NUMA N1 puede asignar tareas en cualquier CPU del nodo, pero no en las CPU asociadas a 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.
Problemas de licencias
La afinidad dinámica está estrictamente restringida por las licencias de CPU. SQL Server no permite ninguna configuración de opciones de máscara de afinidad que infrinjan la directiva de licencias.
Empresa emergente
Si una máscara de afinidad especificada infringe la directiva de licencias durante el inicio de SQL Server o durante la asociación de la base de datos, la capa del motor completará el proceso de inicio o la operación de asociación o restauración de la base de datos y, a continuación, restablecerá el valor de ejecución de sp_configure para la máscara de afinidad en cero, emitiendo un mensaje de error al registro de errores de SQL Server.
Volver a configurar
Si una máscara de afinidad especificada infringe la directiva de licencias al ejecutar Transact-SQL comando RECONFIGURE, se notifica un mensaje de error a la sesión de cliente y al registro de errores de SQL Server, lo que requiere que el administrador de la base de datos vuelva a configurar la máscara de afinidad. No se acepta ningún comando RECONFIGURE WITH OVERRIDE en este caso.
Véase también
Supervisar el uso de recursos (Monitor de sistema)
RECONFIGURE (Transact-SQL)
Opciones de configuración de servidor (SQL Server)
sp_configure (Transact-SQL)
ALTER SERVER CONFIGURATION (Transact-SQL)