Monitora as sessões bloqueadas de uma instância SQL.
O monitor de bloqueio de sessões detecta se existe uma situação de bloqueio.
O bloqueio ocorre quando uma sessão mantém um bloqueio em um recurso específico e uma segunda sessão tenta obter um tipo de bloqueio conflitante no mesmo recurso. O bloqueio é uma característica inevitável de qualquer RDBMS com simultaneidade baseada em bloqueio. No entanto, um alto nível de bloqueio pode ocasionar problemas de desempenho.
Quando o bloqueio aumenta a ponto de impactar o desempenho do sistema, isso geralmente acontece por um dos seguintes motivos:
Uma sessão mantém bloqueios sobre um conjunto de recursos e nunca os libera. Isso é geralmente ocasionado por:
Consultas canceladas que não são revertidas
Transações órfãs
Uma sessão (identificada por uma session_id ou “SPID”) mantém bloqueios sobre um conjunto de recursos por um período de tempo estendido até liberá-los. Isso é geralmente ocasionado por:
Transações de longa execução
Falta de índices apropriados
Uso inapropriado de dicas de bloqueio
Outros problemas relacionados a um design de aplicativo insatisfatório
Encerrar a sessão no cabeçalho da cadeia de bloqueio
Reduzir os tempos de transação
Criar índices apropriados
Use dicas de travamento. Consulte os Manuais Online do SQL Server.
Usar níveis de isolamento com base no controle de versão de linha
Definir as configurações do SQL Server (configurações de memória, tempo limite de bloqueio etc.)
Alterar os limites do monitor para este banco de dados específico ou todos os bancos de dados
Alternativamente, se as sessões bloqueadas não forem uma preocupação para o banco de dados:
Desabilitar o monitor para este banco de dados específico ou todos os bancos de dados
Consulte também: “ INF: entendendo e resolvendo problemas de bloqueio do SQL Server”
Nome | Descrição | Valor Padrão |
Prioridade do Alerta | Define a Prioridade do Alerta. | Alta |
Severidade do Alerta | Define a Severidade do Alerta. | Erro |
Habilitado | Habilita ou desabilita o fluxo de trabalho. | Não |
Gerar Alertas | Define se o fluxo de trabalho gera um Alerta. | Sim |
Intervalo (segundos) | O intervalo de tempo recorrente em segundos no qual executa-se o fluxo de trabalho. | 300 |
Número de sessões bloqueadas | Número de sessões bloqueadas. | 1 |
Hora da Sincronização | A hora da sincronização especificada usando um formato de 24 horas. Pode ser omitido. |
|
Tempo Limite (segundos) | Especifica o tempo que o fluxo de trabalho pode funcionar antes de ser fechado e marcado como com falha. | 300 |
Tempo de Espera (minutos) | A duração mínima de execução do processo antes de considerá-lo para análise de SPIDs bloqueados. | 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>