Configuración de CPU
El rendimiento de SQL Server tiene varias dependencias en la configuración de CPU y núcleo.
Hyperthreading
Hyperthreading se refiere a la implementación simultánea de multithreading (SMT), que mejora la paralelización de los cálculos realizados en procesadores x86. SMT está disponible en procesadores Intel y AMD.
Hyperthreading genera CPU lógicas que aparecen como CPU físicas en el sistema operativo. SQL Server ve a continuación esas CPU adicionales y las utiliza como si hubiera más núcleos que los presentes físicamente. Esto puede mejorar sustancialmente el rendimiento al aumentar la paralelización.
La advertencia aquí es que cada versión de SQL Server tiene sus propias limitaciones en cuanto a la potencia informática que puede utilizar. Para obtener más información, consulte Compute Capacity Limits by Edition of SQL Server.
Núcleos y licencias
Hay dos opciones para la licencia de SQL Server. El primero se conoce como modelo de licencia de acceso de servidor + cliente (CAL); el segundo es el modelo de núcleo por procesador. Aunque puede acceder a todas las características del producto disponibles en SQL Server con la estrategia server + CAL, hay un límite de hardware de 20 núcleos de CPU por socket. Incluso si tiene SQL Server Enterprise Edition + CAL para un servidor con más de 20 núcleos de CPU por socket, la aplicación no puede utilizar todos esos núcleos a la vez en esa instancia.
La imagen siguiente muestra el mensaje de registro de SQL Server después del inicio que indica la aplicación del límite principal.
Por lo tanto, para utilizar todas las CPU, debe utilizar la licencia de núcleo por procesador. Para obtener información detallada sobre las licencias de SQL Server, consulte "SQL Server 2022: Su plataforma de datos moderna".
Afinidad de CPU
Es poco probable que necesite alterar los valores predeterminados de afinidad del procesador a menos que encuentre problemas de rendimiento, pero aún vale la pena entender qué son y cómo funcionan.
SQL Server admite la afinidad del procesador mediante dos opciones:
-
Máscara de afinidad de CPU
-
Máscara de I/O de afinidad
SQL Server utiliza todas las CPU disponibles en el sistema operativo (si se selecciona la licencia de núcleo por procesador). También crea programadores f0r cada CPU para hacer el mejor uso de los recursos para cualquier carga de trabajo dada. Al realizar varias tareas, el sistema operativo u otras aplicaciones del servidor pueden cambiar los subprocesos de un procesador a otro. SQL Server es una aplicación que consume muchos recursos y el rendimiento puede verse afectado cuando esto ocurre. Para minimizar el impacto, puede configurar los procesadores de modo que toda la carga de SQL Server se dirija a un grupo preseleccionado de procesadores. Esto se logra mediante el uso de la máscara de afinidad de CPU.
La opción de máscara de E/S de afinidad enlaza E/S de disco de SQL Server a un subconjunto de CPU. En entornos OLTP de SQL Server, esta extensión puede mejorar significativamente el rendimiento de los subprocesos de SQL Server que emiten operaciones de E/S.
Grado máximo de paralelismo (MAXDOP)
De forma predeterminada, SQL Server utiliza todas las CPU disponibles durante la ejecución de la consulta si se elige la licencia central por procesador.
Aunque esto es útil para consultas grandes, puede causar problemas de rendimiento y limitar la simultaneidad. Un mejor enfoque es limitar el paralelismo al número de núcleos físicos en un único socket de CPU. Por ejemplo, en un servidor con dos sockets de CPU físicos con 12 núcleos por socket, independientemente de hyperthreading, MAXDOP
se debe establecer en 12. MAXDOP
No se puede restringir ni dictar qué CPU se va a utilizar. En su lugar, restringe el número de CPU que puede utilizar una única consulta por lotes.
NetApp recomienda para DSS, como almacenes de datos, comience con MAXDOP 50 y explore el ajuste hacia arriba o hacia abajo si es necesario. Asegúrese de medir las consultas críticas de la aplicación al realizar cambios.
|
Máximo de Threads de Trabajador
La opción Máximo de Threads de Trabajador ayuda a optimizar el rendimiento cuando un gran número de clientes están conectados a SQL Server.
Normalmente, se crea un thread de sistema operativo independiente para cada consulta. Si se realizan cientos de conexiones simultáneas a SQL Server, la configuración de un subproceso por consulta puede consumir demasiados recursos del sistema. `max worker threads`La opción ayuda a mejorar el rendimiento al permitir que SQL Server cree un pool de threads de trabajo que pueden atender colectivamente un número mayor de solicitudes de consulta.
El valor por defecto es 0, que permite a SQL Server configurar automáticamente el número de threads de trabajador al iniciar. Esto funciona para la mayoría de los sistemas. Max worker threads es una opción avanzada y no se debe modificar sin la ayuda de un administrador de base de datos experimentado (DBA).
¿Cuándo debe configurar SQL Server para que utilice más threads de trabajo? Si la longitud media de la cola de trabajo de cada programador es superior a 1, puede que se beneficie de agregar más threads al sistema, pero sólo si la carga no está vinculada a la CPU o si experimenta otras esperas pesadas. Si cualquiera de estos ocurre, agregar más hilos no ayuda porque terminan esperando otros cuellos de botella del sistema. Para obtener más información sobre el máximo de threads de trabajo, consulte "Configure la opción de configuración del servidor de threads de trabajo máx".
Configuración de un máximo de threads de trabajador mediante SQL Server Management Studio.
En el siguiente ejemplo se muestra cómo configurar la opción Máximo de Threads de Trabajo mediante T-SQL.
EXEC sp_configure 'show advanced options', 1; GO RECONFIGURE ; GO EXEC sp_configure 'max worker threads', 900 ; GO RECONFIGURE; GO