Отслеживает заблокированные сеансы экземпляра SQL в Windows. Примечание. По умолчанию этот монитор отключен. Чтобы включить его, при необходимости используйте переопределения.
Монитор заблокированных сеансов определяет, существует ли ситуация блокировки.
Блокировка возникает, если один сеанс удерживает блокировку конкретного ресурса, а второй сеанс пытается получить блокировку конфликтующего типа для того же ресурса. Блокировка является неизбежной отличительной чертой любой системы управления реляционными базами данных с параллелизмом на основе блокировок. Однако слишком большое количество блокировок может вызвать снижение производительности.
Если число блокировок возрастает до уровня, при котором они оказывают существенное влияние на производительность системы, это происходит по одной из следующих причин:
Сеанс удерживает блокировки на наборе ресурсов и никогда их не освобождает. Обычно это обусловлено следующими причинами.
Отмененные запросы, для которых не выполняется откат
Потерянные транзакции
Сеанс (определяемый идентификатором session_id или SPID) удерживает блокировку набора ресурсов в течение длительного периода времени, прежде чем освободить их. Обычно это обусловлено следующими причинами.
Длительные транзакции
Отсутствие соответствующих индексов
Недопустимое использование указаний блокировок
Наличие других проблем, связанных с недостаточно продуманной структурой приложения
Прервите сеанс в начале цепочки блокировки
Уменьшенное время выполнения транзакций
Создание необходимых индексов
Используйте советы по блокировке. См. электронную документацию на SQL Server
Используйте уровни изоляции на основе управления версиями строк.
Настройте параметры SQL Server (параметры памяти, количество превышений времени ожидания блокировки и т.д.)
Измените пороговые значения монитора для этой базы данных или для всех баз данных.
Альтернативный вариант, если заблокированные сеансы не связаны с базой данных:
Отключить монитор для указанной базы данных или всех баз данных
Имя | Описание | Значение по умолчанию |
Приоритет предупреждения | Определение приоритета оповещений. | Высокий |
Серьезность предупреждения | Определяет серьезность предупреждения. | Ошибка |
Включено | Включает или отключает рабочий процесс. | Да |
Создает предупреждения | Определяет, создается ли предупреждение рабочим процессом. | Да |
Интервал (в секундах) | Повторяющийся интервал времени в секундах, в который следует запустить рабочий процесс. | 300 |
Число заблокированных сеансов | Максимальное допустимое количество заблокированных сеансов. | 1 |
Время синхронизации | Время синхронизации указывается в 24-часовом формате и может быть опущено. |
|
Время ожидания (в секундах) | Указывает время, в течение которого может выполняться рабочий процесс, прежде чем он будет закрыт или завершится сбоем. | 200 |
Время ожидания для подключения к базе данных (секунды) | Рабочий процесс завершится ошибкой и зарегистрирует событие, если он не сможет получить доступ к базе данных за указанный промежуток времени. | 15 |
Время ожидания (мин) | Минимальная продолжительность выполнения процесса перед анализом заблокированных SPID для этого процесса. | 1 |
Target | Microsoft.SQLServer.Windows.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.Windows.MonitorType.DBEngine.BlockingSessions | ||
Remotable | True | ||
Accessibility | Public | ||
Alert Message |
| ||
RunAs | Default |
<UnitMonitor ID="Microsoft.SQLServer.Windows.Monitor.DBEngine.BlockingSessions" Accessibility="Public" Enabled="false" Target="SqlDiscW!Microsoft.SQLServer.Windows.DBEngine" ParentMonitorID="Health!System.Health.PerformanceState" Remotable="true" Priority="Normal" TypeID="Microsoft.SQLServer.Windows.MonitorType.DBEngine.BlockingSessions" ConfirmDelivery="false">
<Category>PerformanceHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.Windows.Monitor.DBEngine.BlockingSessions.AlertMessage">
<AlertOnState>Error</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>High</AlertPriority>
<AlertSeverity>Error</AlertSeverity>
<AlertParameters>
<AlertParameter1>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/MachineName$</AlertParameter1>
<AlertParameter2>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/InstanceName$</AlertParameter2>
<AlertParameter3>$Data/Context/Property[@Name='BlockedSPIDList']$</AlertParameter3>
</AlertParameters>
</AlertSettings>
<OperationalStates>
<OperationalState ID="Blocked" MonitorTypeStateID="Blocked" HealthState="Error"/>
<OperationalState ID="NotBlocked" MonitorTypeStateID="NotBlocked" HealthState="Success"/>
</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>
<MonitoringType>$Target/Property[Type="SqlDiscW!Microsoft.SQLServer.Windows.DBEngine"]/MonitoringType$</MonitoringType>
<IntervalSeconds>300</IntervalSeconds>
<SyncTime/>
<WaitMinutes>1</WaitMinutes>
<NumberBlockedSPIDs>1</NumberBlockedSPIDs>
<TimeoutSeconds>200</TimeoutSeconds>
<SqlExecTimeoutSeconds>60</SqlExecTimeoutSeconds>
<SqlTimeoutSeconds>15</SqlTimeoutSeconds>
</Configuration>
</UnitMonitor>