guida sull'architettura dei thread e delle attivitàThread and Task Architecture Guide

In questo argomento si applica a: SìSQL ServerSìDatabase SQL di AzurenonAzure SQL Data Warehouse non Parallel Data WarehouseTHIS TOPIC APPLIES TO: yesSQL ServeryesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

I thread rappresentano una caratteristica del sistema operativo che consente di suddividere la logica dell'applicazione in più percorsi di esecuzione simultanei.Threads are an operating system feature that lets application logic be separated into several concurrent execution paths. Questa caratteristica è utile quando in applicazioni complesse è necessario eseguire numerose attività simultaneamente.This feature is useful when complex applications have many tasks that can be performed at the same time.

Quando esegue un'istanza di un'applicazione, il sistema operativo crea un'unità denominata processo per gestire l'istanza.When an operating system executes an instance of an application, it creates a unit called a process to manage the instance. Il processo dispone di un thread di esecuzione.The process has a thread of execution. Si tratta di una serie di istruzioni di programmazione eseguite dal codice dell'applicazione.This is the series of programming instructions performed by the application code. In un'applicazione semplice con un singolo set di istruzioni che è possibile eseguire in serie, ad esempio, è disponibile un singolo percorso di esecuzione, o thread, per tutta l'applicazione.For example, if a simple application has a single set of instructions that can be performed serially, there is just one execution path or thread through the application. Nelle applicazioni più complesse è possibile eseguire più attività in parallelo, anziché in serie,More complex applications may have several tasks that can be performed in tandem, instead of serially. avviando processi distinti per ogni attività.The application can do this by starting separate processes for each task. L'avvio di un processo, tuttavia, rappresenta un'operazione che richiede un numero elevato di risorse.However, starting a process is a resource-intensive operation. In alternativa, l'applicazione può avviare thread distinti, cheInstead, an application can start separate threads. richiedono una quantità minore di risorse.These are relatively less resource-intensive. Ogni thread, inoltre, può essere pianificato per l'esecuzione indipendentemente dagli altri thread associati al processo.Additionally, each thread can be scheduled for execution independently from the other threads associated with a process.

I thread consentono alle applicazioni complesse di ottimizzare l'utilizzo della CPU anche nel caso di computer con una singola CPUThreads allow complex applications to make more effective use of a CPU, even on computers that have a single CPU. che possono eseguire un solo thread per volta.With one CPU, only one thread can execute at a time. Se un thread esegue un'operazione che richiede tempi prolungati e non utilizza la CPU, ad esempio un'operazione di lettura o scrittura su disco, può essere eseguito un altro thread fino al completamento della prima operazione.If one thread executes a long-running operation that does not use the CPU, such as a disk read or write, another one of the threads can execute until the first operation is completed. La possibilità di eseguire thread mentre altri thread sono in attesa del completamento di un'operazione consente all'applicazione di ottimizzare l'utilizzo della CPU.By being able to execute threads while other threads are waiting for an operation to be completed, an application can maximize its use of the CPU. Questo vale in particolare per le applicazioni multiutente che eseguono una grande quantità di I/O su disco, ad esempio i server di database.This is especially true for multi-user, disk I/O intensive applications such as a database server. I computer con più microprocessori o CPU possono eseguire contemporaneamente un thread per ogni CPU.Computers that have multiple microprocessors or CPUs can execute one thread per CPU at the same time. Se un computer dispone di otto CPU, ad esempio, può eseguire otto thread simultaneamente.For example, if a computer has eight CPUs, it can execute eight threads at the same time.

Pianificazione delle attività o dei batch di SQL ServerSQL Server Batch or Task Scheduling

Allocazione di thread a una CPUAllocating Threads to a CPU

Per impostazione predefinita, ogni istanza di SQL Server avvia ogni thread.By default, each instance of SQL Server starts each thread. Se è stata abilitata l'affinità, il sistema operativo assegna ogni thread a una CPU specifica.If affinity has been enabled, the operating system assigns each thread to a specific CPU. Il sistema operativo distribuisce i thread delle istanze di SQL Server tra i microprocessori, o CPU, di un computer in base al carico.The operating system distributes threads from instances of SQL Server among the microprocessors, or CPUs on a computer based on load. In alcuni casi, è inoltre possibile che il sistema operativo trasferisca un thread da una CPU con un elevato carico di lavoro a un'altra.Sometimes, the operating system can also move a thread from one CPU with heavy usage to another CPU. Di contro, il motore di database di SQL Server assegna thread di lavoro alle utilità di pianificazione che distribuiscono uniformemente i thread fra le CPU.In contrast, the SQL Server Database Engine assigns worker threads to schedulers that distribute the threads evenly among the CPUs.

L'opzione della maschera di affinità viene impostata tramite ALTER SERVER CONFIGURATION.The affinity mask option is set by using ALTER SERVER CONFIGURATION. Quando la maschera di affinità non è impostata, l'istanza di SQL Server alloca uniformemente il numero di thread di lavoro fra le utilità di pianificazione che non sono state escluse.When the affinity mask is not set, the instance of SQL Server allocates worker threads evenly among the schedulers that have not been masked off

Utilizzo dell'opzione lightweight poolingUsing the lightweight pooling Option

Lo scambio del contesto dei thread non determina un overhead molto elevato.The overhead involved in switching thread contexts is not very large. Per la maggior parte delle istanze di SQL Server non si verificheranno differenze di prestazione tra l'impostazione dell'opzione lightweight pooling su 0 o 1.Most instances of SQL Server will not see any performance differences between setting the lightweight pooling option to 0 or 1. Le uniche istanze di SQL Server che possono trarre beneficio dall'opzione lightweight pooling sono quelle in esecuzione in un computer con le caratteristiche seguenti:The only instances of SQL Server that might benefit from lightweight pooling are those that run on a computer having the following characteristics:

  • Server di grandi dimensioni con più CPU.A large multi-CPU server.
  • Le risorse di tutte le CPU sono impegnate quasi al massimo.All the CPUs are running near maximum capacity.
  • Viene eseguita un'intensa attività di scambio del contesto.There is a high level of context switching.

Le prestazioni di questi sistemi potrebbero migliorare impostando il valore dell'opzione lightweight pooling su 1.These systems may see a small increase in performance if the lightweight pooling value is set to 1.

Si consiglia di non utilizzare la modalità fiber per la pianificazione dell'operazione di routine.We do not recommend that you use fiber mode scheduling for routine operation. Questo perché può ridurre le prestazione bloccando i vantaggi normali dello scambio del contesto e perché alcuni componenti di SQL Server non possono funzionare correttamente in modalità fiber.This is because it can decrease performance by inhibiting the regular benefits of context switching, and because some components of SQL Server cannot function correctly in fiber mode. Per altre informazioni, vedere lightweight pooling.For more information, see lightweight pooling.

Thread ed esecuzione in modalità fiberThread and Fiber Execution

Microsoft Windows utilizza un sistema a priorità numerica che utilizza intervalli compresi tra 1 e 31 per la pianificazione dei thread per l'esecuzione.Microsoft Windows uses a numeric priority system that ranges from 1 through 31 to schedule threads for execution. Lo zero è riservato all'utilizzo da parte del sistema operativo.Zero is reserved for operating system use. Quando più thread sono in attesa di esecuzione, Windows esegue il dispatch del thread con la priorità più alta.When several threads are waiting to execute, Windows dispatches the thread with the highest priority.

Per impostazione predefinita, ogni istanza di SQL Server ha priorità 7, che è considerata la priorità normale.By default, each instance of SQL Server is a priority of 7, which is referred to as the normal priority. In questo modo ai thread di SQL Server viene assegnata una priorità sufficientemente alta per ottenere le risorse della CPU necessarie senza produrre effetti negativi sulle altre applicazioni.This default gives SQL Server threads a high enough priority to obtain sufficient CPU resources without adversely affecting other applications.

È possibile usare l'opzione di configurazione priority boost per aumentare fino a 13 il livello di priorità dei thread di un'istanza di SQL Server.The priority boost configuration option can be used to increase the priority of the threads from an instance of SQL Server to 13. (alta priorità).This is referred to as high priority. Questa impostazione consente di assegnare ai thread di SQL Server una priorità maggiore di quella della maggior parte delle altre applicazioni.This setting gives SQL Server threads a higher priority than most other applications. Pertanto, il dispatch dei thread di SQL Server viene eseguito non appena è possibile eseguire i thread, che non vengono quindi preceduti dai thread di altre applicazioni.Thus, SQL Server threads will generally be dispatched whenever they are ready to run and will not be pre-empted by threads from other applications. Le prestazioni vengono migliorate se nel server sono in esecuzione solo istanze di SQL Server e non altre applicazioni.This can improve performance when a server is running only instances of SQL Server and no other applications. Tuttavia, se in SQL Server viene eseguita un'operazione che impegna notevolmente la memoria, è probabile che la priorità delle altre applicazioni non sia maggiore di quella del thread di SQL Server.However, if a memory-intensive operation occurs in SQL Server, however, other applications are not likely to have a high-enough priority to pre-empt the SQL Server thread.

Se vengono eseguite più istanze di SQL Server nello stesso computer e solo per alcune è impostata l'opzione priority boost, le prestazioni delle istanze in esecuzione con priorità normale potrebbero risentirne.If you are running multiple instances of SQL Server on a computer, and turn on priority boost for only some of the instances, the performance of any instances running at normal priority can be adversely affected. Le prestazioni delle altre applicazioni e degli altri componenti sul server possono ridursi se priority boost è abilitato.Also, the performance of other applications and components on the server can decline if priority boost is turned on. Pertanto, è consigliabile utilizzarlo solo in condizioni assolutamente controllate.Therefore, it should only be used under tightly controlled conditions.

Aggiunta di CPU a caldoHot Add CPU

Per aggiunta di CPU a caldo si intende la possibilità di aggiungere CPU a un sistema in esecuzione in modo dinamico.Hot add CPU is the ability to dynamically add CPUs to a running system. L'aggiunta di CPU può verificarsi fisicamente tramite l'aggiunta di nuovi componenti hardware, in modo logico tramite il partizionamento hardware online o virtualmente tramite un livello di virtualizzazione.Adding CPUs can occur physically by adding new hardware, logically by online hardware partitioning, or virtually through a virtualization layer. A partire da SQL Server 2008, SQL Server supporta l'aggiunta a caldo di CPU.Starting with SQL Server 2008, SQL Server supports hot add CPU.

Requisiti per l'aggiunta di CPU a caldo:Requirements for hot add CPU:

  • È necessario disporre di hardware che supporta l'aggiunta di CPU a caldo.Requires hardware that supports hot add CPU.
  • È necessario disporre della versione a 64 bit di Windows Server 2008 Datacenter o del sistema operativo Windows Server 2008 Enterprise Edition per sistemi con processore Itanium.Requires the 64-bit edition of Windows Server 2008 Datacenter or the Windows Server 2008 Enterprise Edition for Itanium-Based Systems operating system.
  • Richiede SQL Server Enterprise.Requires SQL Server Enterprise.
  • Non è possibile configurare SQL Server per l'uso di Soft-NUMA.SQL Server cannot be configured to use soft NUMA. Per altre informazioni su Soft-NUMA, vedere Soft-NUMA (SQL Server).For more information about soft NUMA, see Soft-NUMA (SQL Server).

SQL Server non inizia automaticamente a usare le CPU aggiunte.SQL Server does not automatically start to use CPUs after they are added. In tal modo si evita che SQL Server faccia uso di CPU che potrebbero essere state aggiunte per altri scopi.This prevents SQL Server from using CPUs that might be added for some other purpose. Dopo aver aggiunto le CPU, eseguire l'istruzione RECONFIGURE per consentire a SQL Server di riconoscere le nuove CPU come risorse disponibili.After adding CPUs, execute the RECONFIGURE statement, so that SQL Server will recognize the new CPUs as available resources.

Nota

Se è configurata l'opzione affinity64 mask , sarà necessario modificarla per consentire l'uso delle nuove CPU.If the affinity64 mask is configured, the affinity64 mask must be modified to use the new CPUs.

Procedure consigliate per l'esecuzione di SQL Server in computer che dispongono di oltre 64 CPUBest Practices for Running SQL Server on Computers That Have More Than 64 CPUs

Assegnazione di thread di hardware alle CPUAssigning Hardware Threads with CPUs

Non usare le opzioni di configurazione del server affinity mask e affinity64 mask per associare processori a thread specifici.Do not use the affinity mask and affinity64 mask server configuration options to bind processors to specific threads. Queste opzioni sono limitate a 64 CPU.These options are limited to 64 CPUs. Usare invece l'opzione SET PROCESS AFFINITY di ALTER SERVER CONFIGURATION .Use SET PROCESS AFFINITY option of ALTER SERVER CONFIGURATION instead.

Gestione delle dimensioni del file del log delle transazioniManaging the Transaction Log File Size

Non utilizzare l'aumento automatico per aumentare le dimensioni del file del log delle transazioni.Do not rely on autogrow to increase the size of the transaction log file. L'aumento del log delle transazioni deve essere eseguito tramite un processo seriale.Increasing the transaction log must be a serial process. L'estensione del log può impedire il proseguimento delle operazioni di scrittura della transazioni fino al suo completamento.Extending the log can prevent transaction write operations from proceeding until the log extension is finished. Preallocare invece lo spazio per i file di log impostando le dimensioni dei file su un valore sufficientemente elevato per supportare il tipico carico di lavoro nell'ambiente.Instead, preallocate space for the log files by setting the file size to a value large enough to support the typical workload in the environment.

Impostazione del grado massimo di parallelismo per le operazioni sugli indiciSetting Max Degree of Parallelism for Index Operations

Le prestazioni delle operazioni sugli indici, quali la creazione o la ricompilazione degli indici, possono essere ottimizzate nei computer dotati di molte CPU impostando temporaneamente il modello di recupero del database sul modello con registrazione minima delle operazioni bulk o sul modello con registrazione minima.The performance of index operations such as creating or rebuilding indexes can be improved on computers that have many CPUs by temporarily setting the recovery model of the database to either the bulk-logged or simple recovery model. Queste operazioni sugli indici possono generare attività del log significative e le contese relative al log possono influire sul grado di parallelismo selezionato in SQL Server.These index operations can generate significant log activity and log contention can affect the best degree of parallelism (DOP) choice made by SQL Server.

Valutare inoltre la modifica dell'opzione di configurazione del server relativa al massimo grado di parallelismo (MAXDOP) per queste operazioni.In addition, consider adjusting the max degree of parallelism (MAXDOP) server configuration option for these operations. Le linee guida seguenti sono basate su test interni e costituiscono consigli generali.The following guidelines are based on internal tests and are general recommendations. È consigliabile provare diverse impostazioni MAXDOP per determinare quella ottimale per l'ambiente.You should try several different MAXDOP settings to determine the optimal setting for your environment.

  • Per il modello di recupero con registrazione completa, limitare l'opzione Massimo grado di parallelismo a un valore minore o uguale a 8.For the full recovery model, limit the value of the max degree of parallelism option to eight or less.
  • Per il modello di recupero con registrazione minima delle operazioni bulk o per il modello di recupero con registrazione minima, è consigliabile impostare l'opzione Massimo grado di parallelismo su un valore maggiore di 8.For the bulk-logged model or the simple recovery model, setting the value of the max degree of parallelism option to a value higher than eight should be considered.
  • Nei server con configurazione NUMA, il grado massimo di parallelismo non deve superare il numero di CPU assegnate a ogni nodo NUMA.For servers that have NUMA configured, the maximum degree of parallelism should not exceed the number of CPUs that are assigned to each NUMA node. Ciò è dovuto al fatto che la query utilizzerà con maggiore probabilità memoria locale da un nodo NUMA, migliorando i tempi di accesso alla memoria.This is because the query is more likely to use local memory from 1 NUMA node, which can improve memory access time.
  • Nei server con tecnologia Hyper-Threading abilitata e prodotti nel 2009 o in anni precedenti, ovvero prima che la funzionalità di hyper-threading venisse migliorata, il valore MAXDOP non deve superare il numero di processori fisici anziché di processori logici.For servers that have hyper-threading enabled and were manufactured in 2009 or earlier (before hyper-threading feature was improved), the MAXDOP value should not exceed the number of physical processors, rather than logical processors.

Per altre informazioni sull'opzione relativa al massimo grado di parallelismo, vedere Configurare l'opzione di configurazione del server max degree of parallelism.For more information about the max degree of parallelism option, see Configure the max degree of parallelism Server Configuration Option.

Impostazione del numero massimo di thread di lavoroSetting the Maximum Number of Worker Threads

Impostare sempre il numero massimo di thread di lavoro in modo che sia superiore al grado massimo di parallelismo impostato.Always set the maximum number of worker threads to be more than the setting for the maximum degree of parallelism. Il numero di thread di lavoro deve essere impostato sempre su un valore almeno sette volte superiore al numero di CPU presenti nel server.The number of worker threads must always be set to a value of at least seven times the number of CPUs that are present on the server. Per altre informazioni, vedere Configurare l'opzione di configurazione del server max worker threads.For more information, see Configure the max worker threads Option.

Utilizzo di Traccia SQL e SQL Server ProfilerUsing SQL Trace and SQL Server Profiler

Non è consigliabile usare Traccia SQL e SQL Server Profiler in un ambiente di produzione.We recommend that you do not use SQL Trace and SQL Server Profiler in a production environment. L'overhead per l'esecuzione di questi strumenti, inoltre, aumenta in funzione del numero di CPU.The overhead for running these tools also increases as the number of CPUs increases. Se è necessario utilizzare Traccia SQL in un ambiente di produzione, ridurre al minimo il numero di eventi di traccia.If you must use SQL Trace in a production environment, limit the number of trace events to a minimum. Profilare e testare accuratamente ogni evento di traccia soggetto a carico ed evitare di utilizzare combinazioni di eventi che influiscono notevolmente sulle prestazioni.Carefully profile and test each trace event under load, and avoid using combinations of events that significantly affect performance.

Impostazione del numero di file di dati di tempdbSetting the Number of tempdb Data Files

In genere, il numero di file di file tempdb deve corrispondere al numero di CPU.Typically, the number of tempdb data files should match the number of CPUs. Tuttavia, considerando attentamente le esigenze di concorrenza dei file tempdb, è possibile ridurre le funzioni di gestione del database.However, by carefully considering the concurrency needs of tempdb, you can reduce database management. Ad esempio, se un sistema dispone di 64 CPU e solo 32 query utilizzano in genere file tempdb, aumentando il numero di file tempdb a 64 le prestazioni non miglioreranno.For example, if a system has 64 CPUs and usually only 32 queries use tempdb, increasing the number of tempdb files to 64 will not improve performance.

Componenti di SQL Server che possono utilizzare più di 64 CPUSQL Server Components That Can Use More Than 64 CPUs

Nella tabella seguente sono elencati i componenti di SQL Server e viene indicato se possano o meno usare più di 64 CPU.The following table lists SQL Server components and indicates whether they can use more that 64 CPUs.

Nome del processoProcess name Programma eseguibileExecutable program Utilizza più di 64 CPUUse more than 64 CPUs
Motore di database di SQL ServerSQL Server Database Engine Sqlserver.exeSqlserver.exe Yes
Reporting ServicesReporting Services Rs.exeRs.exe NoNo
Analysis ServicesAnalysis Services As.exeAs.exe NoNo
Integration ServicesIntegration Services Is.exeIs.exe NoNo
Service BrokerService Broker Sb.exeSb.exe NoNo
Ricerca full-textFull-Text Search Fts.exeFts.exe NoNo
SQL Server AgentSQL Server Agent Sqlagent.exeSqlagent.exe NoNo
SQL Server Management StudioSQL Server Management Studio Ssms.exeSsms.exe NoNo
Installazione di SQL ServerSQL Server Setup Setup.exeSetup.exe NoNo