Condividi tramite


Opzione max worker threads

Utilizzare l'opzione max worker threads per configurare il numero di thread di lavoro disponibili per i processi di MicrosoftSQL Server. SQL Server utilizza i servizi per thread nativi dei sistemi operativi Microsoft Windows 2000 e Windows Server 2003 in modo che uno o più thread supportino ogni rete che SQL Server supporta simultaneamente, un altro thread gestisca i checkpoint del database e un pool di thread gestisca tutti gli utenti.

Scopi dell'opzione max worker threads

La creazione di un pool di thread consente di ottimizzare le prestazioni quando al server è connesso un numero elevato di client. In genere viene creato un thread del sistema operativo distinto per ogni richiesta di query. In presenza, tuttavia, di centinaia di connessioni al server, l'utilizzo di un thread per ogni richiesta di query può occupare quantità elevate di risorse di sistema. L'opzione max worker threads consente di migliorare le prestazioni di SQL Server grazie alla creazione di un pool di thread di lavoro per soddisfare una maggiore quantità di richieste di query.

Calcolo del valore max worker threads

Il valore predefinito di max worker threads, 0, consente la configurazione automatica del numero di thread di lavoro all'avvio di SQL Server. Benché questa impostazione sia quella ottimale per la maggior parte dei sistemi, a seconda della configurazione del sistema l'impostazione di un valore specifico per max worker threads consente talvolta di ottenere prestazioni migliori.

Nella tabella seguente viene descritto il numero massimo di thread di lavoro configurato automaticamente per diverse combinazioni di CPU e versioni di SQL Server.

Numero di CPU

Computer a 32 bit

Computer a 64 bit

<= 4 processori

256

512

8 processori

288

576

16 processori

352

704

32 processori

480

960

[!NOTA]

È consigliabile utilizzare 1024 come valore massimo per le versioni di SQL Server a 32 bit e 2048 per le versioni di SQL Server a 64 bit.

Quando il numero effettivo di richieste di query è inferiore al valore di max worker threads, viene assegnato un thread per la gestione di ogni richiesta. Se, tuttavia, il numero effettivo di richieste di query supera il valore impostato per max worker threads, tramite SQL Server i thread di lavoro vengono riuniti in un pool. In questo modo, le richieste possono essere gestite dal primo thread di lavoro disponibile.

Aggiornamento da SQL Server 2000

L'impostazione predefinita di max worker threads in SQL Server 2000 era 255. Con l'aggiornamento di un'istanza del SQL Server 2000Motore di database a una versione più recente viene mantenuto il valore di configurazione per max worker threads. Quando si esegue l'aggiornamento, è consigliabile impostare la nuova istanza max worker threads su 0, in modo che Motore di database possa calcolare il numero di thread ottimale.

Impostazione dell'opzione max worker threads

max worker threads è un'opzione avanzata. Se per modificare l'impostazione si utilizza la stored procedure di sistema sp_configure, è possibile modificare max worker threads solo quando il valore di show advanced options è impostato su 1. Per rendere effettiva la nuova impostazione, è necessario riavviare il sistema.

[!NOTA]

Quando tutti i thread di lavoro sono attivi con query a esecuzione prolungata, SQL Server potrebbe non rispondere fino a quando un thread di lavoro non viene completato e diventa disponibile. Benché non si tratti di un difetto, questo comportamento può talvolta risultare indesiderato. Se un processo non risponde e non è possibile elaborare alcuna query, connettersi a SQL Server utilizzando la connessione DAC e terminare il processo. Per evitare questo problema, aumentare il numero massimo di thread di lavoro.