Conteggio thread

Microsoft.SQLServer.2008.DBEngine.ThreadCountMonitor (UnitMonitor)

Conteggio thread del motore di database 2008

Knowledge Base article:

Riepilogo

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.

Cause

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.

Soluzioni

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

Parametri di cui è possibile eseguire l'override

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.

Genera avvisi

Definisce se il flusso di lavoro genera un avviso.

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

Element properties:

TargetMicrosoft.SQLServer.2008.DBEngine
Parent MonitorSystem.Health.PerformanceState
CategoryPerformanceHealth
EnabledTrue
Alert GenerateTrue
Alert SeverityError
Alert PriorityNormal
Alert Auto ResolveTrue
Monitor TypeMicrosoft.SQLServer.2008.DBEngine.ThreadCount.MonitorType
RemotableTrue
AccessibilityPublic
Alert Message
Il conteggio thread del motore di database SQL 2008 è troppo alto
Il conteggio thread dell'istanza SQL"{0}" nel computer "{1}" è troppo alto. Per ulteriori informazioni, vedere la scheda relativa al contesto dell'avviso.
RunAsDefault

Source Code:

<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>