Published on

April 16, 2024

Como encontrar SPIDs bloqueadores e bloqueados no SQL Server

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

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.