Cómo SQL Server es compatible con NUMA

Los siguientes cambios clave se insertaron en SQL Server 2005 para aprovechar la arquitectura de acceso no uniforme a memoria (NUMA).

Agrupaciones de CPU comunes

SQL Server agrupa a los programadores para que se asignen a la agrupación de CPUs en función del límite de NUMA de hardware expuesto por Windows. Por ejemplo, una caja de 16 vías puede tener 4 nodos NUMA y cada nodo, 4 CPU. De esta forma, se mejora la proximidad de la memoria para el grupo de programadores cuando las tareas se procesan en el nodo. SQL Server le permite subdividir aun más las CPUs asociadas a un nodo NUMA de hardware en múltiples nodos de CPU. Esto se denomina NUMA de software. Normalmente, se subdividirían las CPU para crear particiones del trabajo en los nodos de CPU. Para obtener más información sobre NUMA de software, vea Descripción del acceso no uniforme a memoria.

Cuando un subproceso que se ejecuta en un nodo NUMA de hardware específico asigna memoria, el administrador de memoria de SQL Server intenta asignar memoria a partir de la memoria asociada al nodo NUMA por proximidad de la referencia. De forma similar, las páginas del grupo de búferes se distribuyen por los nodos NUMA de hardware. Para un subproceso es más eficaz tener acceso a la memoria de una página de búfer que esté asignada en la memoria local que tener acceso a dicha página desde una memoria externa. Para obtener más información, vea Aumentar o reducir el grupo de búferes en NUMA.

Cada nodo NUMA (NUMA de hardware o NUMA de software) tiene un puerto de finalización de E/S asociado que se utiliza para procesar la E/S de red. Este puerto ayuda a distribuir el control de E/S de red entre los múltiples puertos. Cuando se realiza una conexión del cliente con SQL Server, el cliente se enlaza a uno de los nodos. Todas las solicitudes de lotes de este cliente se procesarán en ese nodo.

Cada vez que se inicia la instancia de SQL Server en un entorno NUMA, el registro de errores de SQL contiene mensajes informativos que describen la configuración NUMA.

Cómo asigna SQL Server nodos NUMA de software a nodos NUMA de hardware

NUMA de software se define una vez para todas las instancias de SQL Server en el equipo, por lo que varias instancias de Motor de base de datos verán los mismos nodos NUMA de software. Por tanto, cada instancia de Motor de base de datos utiliza la opción affinity mask para seleccionar las CPU adecuadas. Cada instancia usará entonces los nodos NUMA de software que estén asociados con esas CPU.

Al iniciarse, Windows asigna memoria al sistema operativo desde el NODO 0 de hardware. En consecuencia, el NODO 0 de hardware tiene menos memoria local disponible para otras aplicaciones que los otros nodos. Este problema se acentúa si la caché del sistema de archivos es grande. Cuando se inicia SQL Server en un equipo con más de un nodo NUMA, intenta iniciar en otro nodo NUMA diferente al NODO 0 con el fin de que sus estructuras globales se puedan asignar en la memoria local. Para configurar NUMA de software, vea Cómo configurar SQL Server para que use NUMA de software.

Cómo se asignan las conexiones a los nodos NUMA

Tanto TCP como VIA pueden establecer afinidad con las conexiones a uno o varios nodos NUMA específicos. Cuando no se establece afinidad, o cuando se conectan a través de canalizaciones con nombre o memoria compartida, las conexiones se distribuyen a los nodos NUMA por turnos. En un nodo NUMA, la conexión se ejecuta en el programador menos cargado de ese nodo. Debido a la naturaleza de la asignación por turnos de las nuevas conexiones, es posible que todas las CPU de un nodo estén ocupadas mientras que otro nodo está inactivo. Si tiene muy pocas CPU (por ejemplo, 2) y si ve grandes desequilibrios de programación debido a los lotes de larga duración como la carga masiva, conseguirá un mejor rendimiento si desactiva NUMA. Para obtener más información, vea Cómo asignar puertos TCP/IP a nodos NUMA.

Limitaciones de las versiones de SQL Server

SQL Server 2000 a través del Service Pack 3 no incluye compatibilidad especial para NUMA; sin embargo, el Service Pack 4 cuenta con algunas optimizaciones de NUMA limitadas. SQL Server 2005 incluye muchas mejoras importantes y se recomienda a los usuarios de NUMA que actualicen a SQL Server 2005 para aprovechar todas las ventajas de la arquitectura NUMA.