Conteggio dei thread

Microsoft.SQLServer.Linux.Monitor.DBEngine.ThreadCount (UnitMonitor)

Conteggio dei thread per il motore di database

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.

Risoluzioni

La modifica dell'opzione Numero massimo thread di lavoro è 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. Tuttavia, in presenza di centinaia di connessioni al server, l'uso di un thread per ogni richiesta di query può occupare quantità elevate di risorse di sistema. L'opzione Numero massimo thread di lavoro 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.

Configurare l'opzione di configurazione del server Numero massimo thread di lavoro:

http://go.microsoft.com/fwlink/?LinkId=799312

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

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

Soglia minima thread disponibili

Il flusso di lavoro determina il numero massimo di thread e il numero di thread attivi per ogni processo del motore di database. Se il numero di thread disponibili è minore o uguale a questo parametro, verrà generato un avviso.

10

Numero di campioni

Indica quante volte un valore misurato deve violare una soglia prima che venga modificato lo stato.

6

Tempo di sincronizzazione

Ora di sincronizzazione specificata usando il formato a 24 ore. Può essere omessa.

 

Timeout (secondi)

Specifica il tempo di esecuzione consentito per il flusso di lavoro prima che venga chiuso e contrassegnato come non riuscito.

200

Timeout per la connessione di database (secondi)

Il flusso di lavoro avrà esito negativo e registrerà un evento se non riesce ad accedere al database durante il periodo specificato.

15

Element properties:

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

Source Code:

<UnitMonitor ID="Microsoft.SQLServer.Linux.Monitor.DBEngine.ThreadCount" Accessibility="Public" Enabled="true" Target="SqlDiscL!Microsoft.SQLServer.Linux.DBEngine" ParentMonitorID="Health!System.Health.PerformanceState" Remotable="true" Priority="Normal" TypeID="Microsoft.SQLServer.Linux.MonitorType.DBEngine.ThreadCount" ConfirmDelivery="false">
<Category>PerformanceHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.Linux.Monitor.DBEngine.ThreadCount.AlertMessage">
<AlertOnState>Error</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>Normal</AlertPriority>
<AlertSeverity>Error</AlertSeverity>
<AlertParameters>
<AlertParameter1>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/InstanceName$</AlertParameter1>
<AlertParameter2>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/MachineName$</AlertParameter2>
</AlertParameters>
</AlertSettings>
<OperationalStates>
<OperationalState ID="Normal" MonitorTypeStateID="Normal" HealthState="Success"/>
<OperationalState ID="Error" MonitorTypeStateID="Error" HealthState="Error"/>
</OperationalStates>
<Configuration>
<MachineName>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/MachineName$</MachineName>
<NetbiosComputerName>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/NetbiosComputerName$</NetbiosComputerName>
<InstanceName>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/InstanceName$</InstanceName>
<ConnectionString>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/ConnectionString$</ConnectionString>
<InstanceVersion>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/Version$</InstanceVersion>
<InstanceEdition>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/Edition$</InstanceEdition>
<IntervalSeconds>300</IntervalSeconds>
<SyncTime/>
<MinFreeThreadsCount>10</MinFreeThreadsCount>
<NumSamples>6</NumSamples>
<TimeoutSeconds>200</TimeoutSeconds>
<SqlTimeoutSeconds>15</SqlTimeoutSeconds>
</Configuration>
</UnitMonitor>