Modifiche che consentono il supporto NUMA in SQL Server

Le modifiche principali indicate di seguito sono state introdotte in SQL Server 2005 per trarre vantaggio dall'architettura NUMA (Non-Uniform Memory Access).

Raggruppamento di CPU comuni

In SQL Server vengono raggruppate le utilità di pianificazione per eseguire il mapping al raggruppamento di CPU, in base ai limiti hardware NUMA esposti da Windows. Un sistema a 16 vie, ad esempio, può avere quattro nodi NUMA, ognuno dei quali dotato di quattro CPU. Ciò consente una maggiore prossimità della memoria per il gruppo di utilità di pianificazione durante l'elaborazione delle attività nel nodo. Con SQL Server è possibile suddividere ulteriormente le CPU associate a un nodo hardware NUMA in più nodi CPU. Questa funzionalità è nota come soft-NUMA. In genere, è consigliabile suddividere le CPU per distribuire il lavoro tra i diversi nodi CPU. Per ulteriori informazioni sulla funzionalità soft-NUMA, vedere Informazioni sull'architettura NUMA (Non-Uniform Memory Access).

Quando un thread in esecuzione in un nodo hardware NUMA specifico alloca memoria, lo strumento di gestione della memoria di SQL Server tenta di allocare memoria da quella associata al nodo NUMA per prossimità del riferimento. Analogamente, le pagine del pool di buffer vengono distribuite tra i diversi nodi hardware NUMA. Per un thread è più efficace accedere alla memoria da una pagina di buffer allocata nella memoria locale che non dalla memoria esterna. Per ulteriori informazioni, vedere Espansione e riduzione del pool di buffer in configurazione NUMA.

A ogni nodo NUMA (hardware NUMA o soft-NUMA) è associata una porta di completamento I/O utilizzata per gestire le operazioni di I/O di rete. Ciò consente di distribuire la gestione delle operazioni di I/O di rete tra più porte. Quando viene eseguita una connessione client a SQL Server, la connessione viene associata a uno dei nodi. Tutte le richieste di batch del client vengono quindi elaborate in tale nodo.

Ogni volta che viene avviata l'istanza di SQL Server in un ambiente NUMA, nel log degli errori di SQL Server vengono inseriti messaggi informativi che descrivono la configurazione NUMA.

Mapping tra nodi soft-NUMA e nodi hardware NUMA

Soft-NUMA è definito una sola volta per tutte le istanze di SQL Server in esecuzione nel computer, pertanto le varie istanze del Motore di database vedono tutte gli stessi nodi soft-NUMA. Ogni istanza del Motore di database utilizza quindi l'opzione affinity mask per selezionare le CPU appropriate. Ogni istanza utilizzerà quindi tutti i nodi soft-NUMA associati a queste CPU.

All'avvio, Windows alloca memoria per il sistema operativo dal nodo hardware 0. Pertanto il nodo hardware 0 dispone di una minore quantità di memoria locale per le altre applicazioni rispetto agli altri nodi. Questo problema è accentuato quando la cache del file system ha dimensioni particolarmente elevate. Quando viene avviato su un computer che dispone di più nodi NUMA, SQL Server prediligerà un nodo NUMA diverso da NODE 0, al fine di allocare le proprie strutture globali nella memoria locale. Per configurare la modalità soft-NUMA, vedere Procedura: Configurazione di SQL Server per l'utilizzo di Soft-NUMA.

Modalità di assegnazione delle connessioni ai nodi NUMA

È possibile impostare l'affinità delle connessioni TCP e VIA a uno o più nodi NUMA specifici. Se non si imposta l'affinità o se le connessioni vengono eseguite con dispositivi named pipe o tramite memoria condivisa, la distribuzione sui diversi nodi NUMA avverrà in base all'algoritmo round-robin. All'interno di un nodo NUMA, la connessione viene eseguita sull'ultima utilità di pianificazione caricata su tale nodo. Per il modo in cui l'algoritmo round-robin assegna le nuove connessioni, è possibile che tutte le CPU di un nodo siano occupate mentre quelle di un altro nodo sono inattive. Se si dispone di un numero contenuto di CPU, ad esempio 2, e si osservano consistenti sbilanciamenti di pianificazione dovuti a batch di lunga durata come i caricamenti bulk, sarà possibile migliorare le prestazioni disattivando le funzionalità NUMA. Per ulteriori informazioni, vedere Procedura: Mapping delle porte TCP/IP ai nodi NUMA.

Limiti delle versioni di SQL Server

In SQL Server 2000 non è incluso alcun supporto NUMA specifico fino al Service Pack 3. Con il Service Pack 4 sono state introdotte le prime funzionalità di ottimizzazione NUMA. SQL Server 2005 presenta numerosi miglioramenti sostanziali e gli utenti che dispongono di architetture NUMA sono invitati ad eseguire l'aggiornamento a SQL Server 2005 per sfruttarne tutti i vantaggi.