Em um ambiente do SQL Server, não é incomum encontrar problemas de bloqueio. Quando um processo parece estar parado ou não está progredindo, é importante identificar se o bloqueio é a causa. O bloqueio ocorre quando uma conexão de banco de dados mantém um bloqueio em um objeto, impedindo que outra conexão adquira o mesmo bloqueio e fazendo com que ela seja bloqueada até que a primeira conexão seja concluída.
Existem várias maneiras de descobrir quais SPIDs (System Process IDs) estão envolvidos no bloqueio. Aqui estão algumas opções:
1. Procedimento armazenado do sistema sp_who2
O procedimento armazenado do sistema sp_who2 fornece informações sobre os processos atuais do SQL Server, incluindo os usuários associados, aplicativos, banco de dados e tempo de CPU. Usando o parâmetro ‘active’, você pode filtrar os resultados para mostrar apenas os processos ativos. Aqui está um exemplo:
USE master GO EXEC sp_who2 GO
Isso exibirá uma lista de processos e você pode identificar o bloqueio verificando a coluna “BlkBy”.
2. DMV sys.dm_exec_requests
O DMV sys.dm_exec_requests (Dynamic Management View) fornece detalhes sobre todos os processos em execução no SQL Server. Filtrando os resultados para mostrar apenas os processos bloqueados (onde o blocking_session_id não é 0), você pode identificar os SPIDs bloqueadores. Aqui está um exemplo:
USE master GO SELECT * FROM sys.dm_exec_requests WHERE blocking_session_id <> 0; GO
3. DMV sys.dm_os_waiting_tasks
O DMV sys.dm_os_waiting_tasks retorna informações sobre tarefas que estão aguardando recursos. Verificando a coluna “blocking_session_id”, você pode identificar os SPIDs bloqueadores. Aqui está um exemplo:
USE master GO SELECT session_id, wait_duration_ms, wait_type, blocking_session_id FROM sys.dm_os_waiting_tasks WHERE blocking_session_id <> 0; GO
4. Monitor de Atividade do SQL Server Management Studio
Se você preferir uma interface gráfica, pode usar o Monitor de Atividade no SQL Server Management Studio. Basta navegar até o nome da instância, clicar com o botão direito e selecionar “Monitor de Atividade”. Essa ferramenta fornece uma representação visual dos processos de bloqueio.
5. Relatórios do SQL Server Management Studio
Outra opção no SQL Server Management Studio é usar os relatórios padrão. Navegue até o nome da instância, clique com o botão direito, selecione “Relatórios”, depois “Relatórios Padrão” e finalmente “Atividade – Todas as Transações de Bloqueio”. Esses relatórios fornecem informações detalhadas sobre as transações de bloqueio.
6. SQL Server Profiler
Para capturar dados relacionados a bloqueio continuamente, você pode usar o SQL Server Profiler. Inicie o Profiler, conecte-se à instância do SQL Server, selecione os eventos desejados (como o relatório de processo bloqueado) e execute o rastreamento. Certifique-se de configurar o “limite de processo bloqueado” antes de iniciar o Profiler. Aqui está um exemplo:
sp_configure 'show advanced options', 1 GO RECONFIGURE GO sp_configure 'blocked process threshold', 20 GO RECONFIGURE GO
7. Eventos Estendidos
Os Eventos Estendidos podem ser usados como uma alternativa ao Profiler. Você pode capturar eventos relacionados a bloqueio e analisar a saída. Aqui está um exemplo:
[Captura de tela da configuração de Eventos Estendidos]
Usando esses métodos, você pode identificar facilmente SPIDs bloqueadores e bloqueados em seu ambiente do SQL Server, permitindo que você tome as medidas apropriadas para resolver o problema.
Lembre-se, entender o bloqueio é crucial para manter a integridade dos dados e garantir um desempenho ideal no SQL Server.
Artigo Atualizado em: 19 de dezembro de 2022