Число потоков для SQL DB 2008
Обычно SQL Server открывает системный поток для каждого запроса, но если количество потоков превышает указанное максимальное значение рабочих потоков, то SQL Server отправляет рабочие потоки в пул. Если все потоки исполнителей заняты выполнением длительных запросов, SQL Server может не отвечать на другие запросы, пока один из рабочих потоков не завершит работу и не станет доступным. Хотя это и не ошибка, такое поведение иногда нежелательно. Монитор анализирует количество свободных потоков и уведомляет, если это количество низко.
Увеличение объема работ, вызывающее увеличение количества используемых потоков; это может означать, что SQL Server работает под значительной загрузкой или выполняется излишнее количество запросов параллельно.
Установка максимального количества рабочих потоков является дополнительным параметром, и его следует изменять только опытным администраторам баз данных или сертифицированным техническим специалистам SQL Server.
Пул потоков помогает оптимизировать производительность при подключении к серверу большого числа пользователей. Обычно для каждого запроса в операционной системе создается отдельный поток. Однако в случае сотен соединений с сервером, использование одного потока на каждый запрос приводит к потреблению большого числа системных ресурсов. Параметр max worker threads позволяет SQL Server создавать пул рабочих потоков, чтобы обслужить большое число запросов, что улучшает производительность.
Параметр "Максимальное число рабочих потоков"
http://msdn.microsoft.com/ru-ru/library/ms187024(v=sql.100).aspx
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>
</Configuration>
</UnitMonitor>