Отслеживает заблокированные сеансы экземпляра SQL.
Монитор заблокированных сеансов определяет, существует ли ситуация блокировки.
Блокировка возникает, если один сеанс удерживает блокировку на конкретном ресурсе, а второй сеанс пытается получить блокировку конфликтующего типа для этого же ресурса. Блокировка является неизбежной отличительной чертой любой системы управления реляционными базами данных (РСУБД) с параллелизмом на основе блокировок. Однако слишком большое число блокировок может вызвать снижение производительности.
Если число блокировок возрастает до уровня, при котором они оказывают существенное влияние на производительность системы, это происходит по одной из следующих причин:
Сеанс удерживает блокировки на наборе ресурсов и никогда их не освобождает. Обычно это обусловлено следующими причинами:
Отмененные запросы, для которых не выполняется откат.
Потерянные транзакции
Сеанс (определяемый идентификатором session_id или SPID) удерживает блокировку на наборе ресурсов в течение длительного периода времени, прежде чем освободить их. Обычно это обусловлено следующими причинами:
Длительные транзакции
Отсутствие соответствующих индексов
Неправильное использование подсказок блокировок
Наличие других проблем, связанных с недостаточно продуманной конструкцией приложения
Прервите сеанс в начале цепочки блокировки
Уменьшенное время выполнения транзакций
Создание необходимых индексов
Используйте советы по блокировке. См. электронную документацию по SQL Server.
Используйте уровни изоляции на основе управления версиями строк.
Настройте параметры SQL Server (параметры памяти, время ожидания блокировки и т. д.).
Измените пороговые значения монитора для этой базы данных или для всех баз данных.
В другом случае, если заблокированные сеансы не имеют значения для базы данных:
Отключить монитор для указанной базы данных или всех баз данных
См. также: " INF: основные сведения и устранение проблем с блокировками SQL Server".
Имя | Описание | Значение по умолчанию |
Приоритет предупреждения | Определяет приоритет предупреждения. | Высокий |
Серьезность предупреждения | Определяет серьезность предупреждения. | Ошибка |
Включено | Включает или отключает рабочий процесс. | Нет |
Создает предупреждения | Определяет, создает ли рабочий процесс предупреждения. | Да |
Интервал (в секундах) | Повторяющийся интервал времени в секундах, по истечении которого запускается рабочий процесс. | 300 |
Число заблокированных сеансов | Число заблокированных сеансов. | 1 |
Время синхронизации | Время синхронизации указывается в 24-часовом формате и может быть опущено. |
|
Время ожидания (в секундах) | Определяет время, в течение которого возможно выполнение рабочего процесса перед закрытием и пометкой как сбойный. | 300 |
Время ожидания (мин) | Минимальная продолжительность выполнения процесса перед анализом заблокированных SPID для этого процесса. | 1 |
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>