Condividi tramite


Limiti della capacità di calcolo per edizione di SQL Server

Si applica a: SQL Server

Questo articolo illustra i limiti della capacità di calcolo per diverse edizioni di SQL Server e le differenze in ambienti fisici e virtuali con processori dotati di multithreading simultaneo (SMT). Nelle CPU Intel, SMT è denominato Hyper-Threading.

Panoramica

Diagramma che mostra i mapping ai limiti di capacità di calcolo.

Questa tabella descrive le notazioni nel diagramma precedente:

valore Descrizione
0..1 Zero o uno
1 Esattamente uno
1..* Uno o più
0..* Zero o più
1..2 Uno o due

Per un'ulteriore elaborazione:

  • Una macchina virtuale dispone di uno o più processori virtuali.
  • Uno o più processori virtuali sono allocati a esattamente una macchina virtuale.
  • Viene eseguito il mapping a zero o più processori logici di zero o un processore virtuale. Quando il mapping dei processori virtuali al processore logico è:
    • Uno a zero, rappresenta un processore logico non associato non usato dai sistemi operativi guest.
    • Uno a molti, rappresenta un overcommit.
    • Zero a molti, rappresenta l'assenza di una macchina virtuale sul sistema host. Di conseguenza le macchine virtuali non usano alcun processore logico.
  • Viene eseguito il mapping di un socket a zero o a più core. Quando il mapping da socket a memoria centrale è:
    • Uno a zero, rappresenta un socket vuoto. Non è installato nessun chip.
    • Uno a uno, rappresenta un chip single core installato nel socket. Questo mapping è ormai raro.
    • Uno a molti, rappresenta un chip multi-core installato nel socket. I valori tipici sono 2, 4 e 8.
  • Viene eseguito il mapping di un core a uno o due processori logici. Quando il mapping dalle memorie centrali ai processori logici è:
    • Uno a uno, SMT è disattivato.
    • Uno a due, SMT è attivato.

Le definizioni seguenti si riferiscono ai termini usati in questo articolo:

  • Un thread o un processore logico è un motore di calcolo logico dalla prospettiva di SQL Server, del sistema operativo, di un'applicazione o un driver.

  • Un core è un'unità del processore. Può essere costituito da uno o più processori logici.

  • Un processore fisico può essere costituito da uno o più core. Un processore fisico corrisponde a un pacchetto del processore o a un socket.

Limitare il numero di core logici per ogni nodo NUMA a 64

È possibile riscontrare problemi, ad esempio i dump dello stack nei server con più di 64 processori logici per nodo NUMA. Una configurazione BIOS o firmware può ridurre il numero di core logici a un massimo di 64 processori logici per nodo NUMA, presentato al sistema operativo.

Attenzione

L'aggiornamento cumulativo 11 di SQL Server 2022 (16.x) ha introdotto una modifica che causa un'interruzione, in cui il motore di database non viene avviato se rileva più di 64 core logici per ogni nodo NUMA.

È possibile ridurre il numero di core logici per ogni nodo NUMA in una macchina virtuale di Azure disabilitando SMT. Per le istanze bare metal di SQL Server, è possibile ridurre il numero di core logici con opzioni di clustering sub-NUMA (SNC) o Nodi per Socket (NPS).

Disabilitare SMT in una macchina virtuale di Azure

SQL Server ha un limite supportato di 64 core logici per ogni nodo NUMA. In alcuni casi, la macchina virtuale serie Mv3 di Azure potrebbe superare questo limite, impedendo l'avvio di SQL Server o consentendo l'esecuzione con prestazioni ridotte. Per disabilitare SMT, apportare le modifiche seguenti usando PowerShell e l'editor del Registro di sistema (reg.exe). Assicurarsi di eseguire il backup del Registro di sistema prima di modificarlo.

  1. Controllare il numero di core logici. SMT è abilitato se il rapporto è 2:1 (il numero di core logici è il doppio del numero di core).

    Get-CimInstance -ClassName Win32_Processor | Select-Object -Property "NumberOfCores", "NumberOfLogicalProcessors"
    
  2. Disabilitare SMT con le due modifiche del Registro di sistema seguenti, quindi riavviare la macchina virtuale.

    reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverride /t REG_DWORD /d 8264 /f
    reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverrideMask /t REG_DWORD /d 3 /f
    
  3. Controllare di nuovo il numero di core logici. Il numero di core logici deve corrispondere al numero di core.

    Get-CimInstance -ClassName Win32_Processor | Select-Object -Property "NumberOfCores", "NumberOfLogicalProcessors"
    

Ridurre il numero di core logici nelle istanze bare metal

Le seguenti tabelle descrivono come ridurre il numero di core logici nelle istanze bare metal di SQL Server.

Nelle CPU Intel è possibile abilitare il clustering NUMA secondario (SNC), denominato in precedenza Cluster-on-Die (CoD), generando due domini NUMA all'interno di un singolo socket fisico.

Impostazione di configurazione Descrizione
SNC Disabilitato (impostazione predefinita) Disabilita il clustering NUMA secondario.
SNC abilitato Abilita il clustering NUMA secondario.

Nelle CPU AMD è possibile abilitare varie opzioni nodi per socket (NPS).

Impostazione di configurazione Descrizione
NPS0 In un sistema dual socket, NUMA presenta come un singolo nodo con tutti i canali di memoria interleaved nel nodo.
NPS1 (predefinito) Questa configurazione presenta un nodo NUMA per socket.
NPS2 Questa configurazione presenta due nodi NUMA per socket, simili a SNC.
NPS4 Questa configurazione presenta quattro nodi NUMA per socket.

Osservazioni:

Sistemi con più processori fisici o sistemi con processori fisici che dispongono di molteplici memorie centrali e/o SMT consentono al sistema operativo di eseguire molteplici task simultaneamente. Ogni thread di esecuzione viene visualizzato come un processore logico. Se ad esempio il computer in uso dispone di due processori quad core con SMT abilitato e due thread per memoria centrale, sono presenti 16 processori logici: 2 processori x 4 memorie centrali per processore x 2 thread per memoria centrale. Vale la pena notare che:

  • La capacità di calcolo di un processore logico da un solo thread di una memoria centrale SMT è inferiore alla capacità di calcolo di un processore logico da quello stesso core con SMT disabilitato.

  • La capacità di calcolo dei due processori logici nella memoria centrale SMT è maggiore della capacità di calcolo dello stesso core con SMT disabilitato.

Ogni edizione di SQL Server ha due limiti di capacità di calcolo:

  • Un numero massimo di socket (o processori fisici o pacchetti del processore).

  • Un numero massimo di core come riportato dal sistema operativo.

Questi limiti si applicano a una istanza singola di SQL Server. Rappresentano la capacità di calcolo massima che verrà utilizzata da un’istanza singola. Non vincolano il server sul quale potrebbe essere implementata l'istanza. Infatti la distribuzione di più istanze di SQL Server sullo stesso server fisico è un modo efficiente di usare la capacità di calcolo di un server fisico con più socket e/o core rispetto a quanto consentito dai limiti di capacità.

Nella tabella seguente vengono specificati i limiti della capacità di calcolo per una sola istanza di ogni edizione di SQL Server:

Edizione di SQL Server Capacità di calcolo massima per una sola istanza (motore di database di SQL Server) Capacità di calcolo massima per una singola istanza (AS, RS)
Edizione Enterprise: licenze basate su core 1 Valore massimo del sistema operativo Valore massimo del sistema operativo
Sviluppatore Valore massimo del sistema operativo Valore massimo del sistema operativo
Standard Limitato a meno di 4 socket o 24 core Limitato a meno di 4 socket o 24 core
Express Limitato a meno di 1 socket o 4 core Limitato a meno di 1 socket o 4 core

1 La licenza edizione Enterprise con Server + licenza CAL (Client Access License) è limitata a un massimo di 20 memorie centrali per istanza di SQL Server. (Questa licenza non è disponibile per i nuovi contratti.) Non sono previsti limiti per il modello di gestione delle licenze server basate su memoria centrale.

In un ambiente virtualizzato, il limite di capacità di calcolo è basato sul numero di processori logici e non sul numero di core. Il motivo è che l'architettura del processore non è visibile alle applicazioni guest.

Ad esempio, un server con quattro socket popolati con processori quad-core e la capacità di abilitare due SMT per core contiene 32 processori logici con SMT abilitato. Tuttavia contiene solo 16 processori logici con SMT disabilitato. Questi processori logici possono essere mappati su macchine virtuali nel server. Il carico di calcolo delle macchine virtuali sul processore logico viene mappato su un thread di esecuzione nel processore fisico del server host.

Può risultare utile disabilitare SMT quando le prestazioni per processore virtuale sono importanti. È possibile configurare SMT utilizzando un’impostazione BIOS per il processore durante la configurazione del BIOS, ma è in genere un'operazione con ambito server che avrà un impatto su tutti i carichi di lavoro in esecuzione sul server. Puoi considerare la separazione dei carichi di lavoro che saranno in esecuzione negli ambienti virtuali da quelli che trarranno vantaggio dal miglioramento delle prestazioni SMT in un ambiente del sistema operativo fisico.

Ottenere aiuto

Contribuire alla documentazione di SQL

Il contenuto SQL può essere modificato. L'autore delle modifiche contribuirà a migliorare la documentazione e verrà accreditato come collaboratore alla realizzazione della pagina.

Per maggiori informazioni, vedere Come contribuire alla documentazione di SQL Server