Отслеживает заблокированные сеансы для экземпляра SQL.
Монитор заблокированных сеансов определяет, существует ли ситуация блокировки.
Блокировка возникает, если один сеанс удерживает блокировку конкретного ресурса, а второй сеанс пытается получить блокировку конфликтующего типа для того же ресурса. Блокировка является неизбежной отличительной чертой любой системы управления реляционными базами данных с параллелизмом на основе блокировок. Однако слишком большое количество блокировок может вызвать снижение производительности.
Если число блокировок возрастает до уровня, при котором они оказывают существенное воздействие на производительность системы, это происходит по одной из следующих причин.
Сеанс удерживает блокировки на наборе ресурсов и никогда их не освобождает. Обычно это обусловлено следующими причинами.
Отмененные запросы, для которых не выполняется откат.
Потерянные транзакции
Сеанс (определяемый идентификатором session_id или SPID) удерживает блокировку набора ресурсов в течение длительного периода времени, прежде чем освободить их. Обычно это обусловлено следующими причинами.
Длительные транзакции
Отсутствие соответствующих индексов
Неправильное использование подсказок блокировок
Наличие других проблем, связанных с недостаточно продуманной конструкцией приложения
Прервите сеанс в начале цепочки блокировки
Уменьшите время обработки транзакций
Создавайте правильные индексы
Используйте подсказки блокировок. См. электронную документацию по SQL Server
Используйте уровни изоляции на основе управления версиями строк
Настройка параметров SQL Server (параметры памяти, периоды времени ожидания блокировки и т. д.)
Измените пороговые значения в мониторах для конкретной или для всех баз данных.
Альтернативный вариант, если блокируемые сеансы не связаны с базой данных:
Отключите этот монитор для конкретной базы данных или для всех баз данных.
См. также " INF: основные сведения и устранение проблем с блокировками SQL Server"
Target | Microsoft.SQLServer.2008.DBEngine | ||
Parent Monitor | System.Health.PerformanceState | ||
Category | PerformanceHealth | ||
Enabled | False | ||
Alert Generate | True | ||
Alert Severity | Error | ||
Alert Priority | High | ||
Alert Auto Resolve | True | ||
Monitor Type | Microsoft.SQLServer.2008.DBEngine.BlockedSPIDs | ||
Remotable | True | ||
Accessibility | Public | ||
Alert Message |
| ||
RunAs | Default |
<UnitMonitor ID="Microsoft.SQLServer.2008.DBEngine.BlockedSPIDsMonitor" Accessibility="Public" Enabled="false" Target="SQL2008Core!Microsoft.SQLServer.2008.DBEngine" ParentMonitorID="SystemHealth!System.Health.PerformanceState" Remotable="true" Priority="Normal" TypeID="Microsoft.SQLServer.2008.DBEngine.BlockedSPIDs" ConfirmDelivery="false">
<Category>PerformanceHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.2008.DBEngine.BlockedSPIDsMonitor.AlertMessage">
<AlertOnState>Error</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>High</AlertPriority>
<AlertSeverity>Error</AlertSeverity>
<AlertParameters>
<AlertParameter1>$Data/Context/Property[@Name='BlockedSPIDList']$</AlertParameter1>
<AlertParameter2>$Target/Property[Type="SQL!Microsoft.SQLServer.ServerRole"]/InstanceName$</AlertParameter2>
<AlertParameter3>$Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/NetworkName$</AlertParameter3>
</AlertParameters>
</AlertSettings>
<OperationalStates>
<OperationalState ID="Blocked" MonitorTypeStateID="Blocked" HealthState="Error"/>
<OperationalState ID="NotBlocked" MonitorTypeStateID="NotBlocked" HealthState="Success"/>
</OperationalStates>
<Configuration>
<ConnectionString>$Target/Property[Type="SQL!Microsoft.SQLServer.DBEngine"]/ConnectionString$</ConnectionString>
<IntervalSeconds>300</IntervalSeconds>
<SyncTime/>
<WaitMinutes>1</WaitMinutes>
<NumberBlockedSPIDs>1</NumberBlockedSPIDs>
<TimeoutSeconds>300</TimeoutSeconds>
<InstanceName>$Target/Property[Type="SQL!Microsoft.SQLServer.ServerRole"]/InstanceName$</InstanceName>
<ComputerName>$Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/NetworkName$</ComputerName>
</Configuration>
</UnitMonitor>