Conteggio thread del motore di database 2008
In SQL Server viene in genere aperto il thread di sistema per ogni richiesta di query, ma se la quantità di thread supera il valore massimo specificato per i thread di lavoro, SQL Server raggruppa i thread di lavoro in pool. 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. Il monitoraggio analizza la quantità di thread liberi e notifica se tale quantità è insufficiente.
Un incremento della quantità di lavoro che provoca un aumento di thread utilizzati; questo potrebbe indicare che SQL Server viene eseguito con carichi notevoli o che vi è un numero eccessivo di query eseguite in parallelo.
La modifica dell'opzione max worker threads è avanzata ed è riservata ad amministratori di database esperti o a tecnici dotati di certificazione per SQL Server.
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.
Opzione Max worker threads
http://go.microsoft.com/fwlink/?LinkId=789164
Nome | Descrizione | Valore predefinito |
Priorità avviso | Definisce la priorità dell'avviso. | Normale |
Gravità avviso | Definisce la gravità dell'avviso. | Errore |
Ora di scadenza della cache | Specifica la durata massima delle informazioni presenti nella cache che possono essere usate dal flusso di lavoro. Può essere omesso. | 43200 |
Abilitato | Abilita o disabilita il flusso di lavoro. | Sì |
Genera avvisi | Definisce se il flusso di lavoro genera un avviso. | Sì |
Intervallo (secondi) | Intervallo di tempo ricorrente in secondi in cui eseguire il flusso di lavoro. | 300 |
Conteggio minimo thread disponibili | Nell'origine dati viene determinata una soglia e un conteggio dei thread per ciascun processo del motore di database. Viene generato un avviso se la soglia meno il conteggio dei thread corrente è minore o uguale al conteggio dei thread disponibili. | 10 |
Numero di campioni | Numero di campioni di cui calcolare la media prima del confronto con la soglia | 6 |
Ora di sincronizzazione | Ora di sincronizzazione specificata usando il formato a 24 ore. Può essere omessa. | 00:06 |
Timeout (secondi) | Specifica il tempo di esecuzione consentito per il flusso di lavoro prima che venga chiuso e contrassegnato come non riuscito. | 200 |
Target | Microsoft.SQLServer.2008.DBEngine | ||
Parent Monitor | System.Health.PerformanceState | ||
Category | PerformanceHealth | ||
Enabled | True | ||
Alert Generate | True | ||
Alert Severity | Error | ||
Alert Priority | Normal | ||
Alert Auto Resolve | True | ||
Monitor Type | Microsoft.SQLServer.2008.DBEngine.ThreadCount.MonitorType | ||
Remotable | True | ||
Accessibility | Public | ||
Alert Message |
| ||
RunAs | Default |
<UnitMonitor ID="Microsoft.SQLServer.2008.DBEngine.ThreadCountMonitor" Accessibility="Public" Enabled="true" Target="SQL2008Core!Microsoft.SQLServer.2008.DBEngine" ParentMonitorID="SystemHealth!System.Health.PerformanceState" Remotable="true" Priority="Normal" TypeID="Microsoft.SQLServer.2008.DBEngine.ThreadCount.MonitorType" ConfirmDelivery="false">
<Category>PerformanceHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.2008.DBEngine.ThreadCountMonitor.AlertMessage">
<AlertOnState>Error</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>Normal</AlertPriority>
<AlertSeverity>Error</AlertSeverity>
<AlertParameters>
<AlertParameter1>$Target/Property[Type="SQL!Microsoft.SQLServer.ServerRole"]/InstanceName$</AlertParameter1>
<AlertParameter2>$Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/NetworkName$</AlertParameter2>
</AlertParameters>
</AlertSettings>
<OperationalStates>
<OperationalState ID="Normal" MonitorTypeStateID="Normal" HealthState="Success"/>
<OperationalState ID="Error" MonitorTypeStateID="Error" HealthState="Error"/>
</OperationalStates>
<Configuration>
<ServiceName>$Target/Property[Type="SQL!Microsoft.SQLServer.DBEngine"]/ServiceName$</ServiceName>
<IntervalSeconds>300</IntervalSeconds>
<TimeoutSeconds>200</TimeoutSeconds>
<MinFreeThreadsCount>10</MinFreeThreadsCount>
<NumSamples>6</NumSamples>
<SyncTime/>
<CacheExpirationTime>43200</CacheExpirationTime>
</Configuration>
</UnitMonitor>