Analisar deadlocks com o SQL Server Profiler

Aplica-se a: SQL Server Instância Gerenciada de SQL do Azure

Use o SQL Server Profiler para identificar a causa de um deadlock. Um deadlock ocorre quando há uma dependência cíclica entre dois ou mais threads, ou processos, do mesmo conjunto de recursos dentro do SQL Server. Usando o SQL Server Profiler, é possível criar um rastreamento que registra, reproduz e exibe eventos de deadlock para análise.

Para rastrear eventos de deadlock, adicione a classe de evento Deadlock graph a um rastreamento. Esta classe de evento popula a coluna de dados TextData no rastreamento com dados XML sobre o processo e objetos que estão envolvidos no deadlock. SQL Server Profiler pode extrair o documento XML para um arquivo XML de deadlock (.xdl) que pode ser exibido posteriormente no SQL Server Management Studio. Você pode configurar o SQL Server Profiler para extrair eventos Deadlock graph para um único arquivo contendo todos os eventos Deadlock graph ou para arquivos separados. Essa extração pode ser feita de qualquer uma destas formas:

  • No momento da configuração do rastreamento, usando a guia Configurações de Extração de Eventos . Observe que essa guia não será exibida a menos que você selecione o evento Deadlock graph na guia Seleção de Eventos .

  • Usando a opção Extrair Eventos do SQL Server no menu Arquivo .

  • Eventos individuais também podem ser extraídos e salvos clicando com o botão direito do mouse em um evento específico e escolhendo Extrair Dados de Evento.

Gráficos de deadlock

SQL Server Profiler e o SQL Server Management Studio usam um gráfico de espera de deadlock para descrever um deadlock. O gráfico de espera de deadlock contém nós de processo, nós de recurso e bordas representando as relações entre os processos e os recursos. Os componentes dos gráficos de espera estão definidos na tabela a seguir:

Nó de processo
Um thread que executa uma tarefa; por exemplo, INSERT, UPDATE ou DELETE.

Nó de recurso
Um objeto de banco de dados; por exemplo, uma tabela, índice ou linha.

Microsoft Edge
Uma relação entre um processo e um recurso. Uma borda request ocorre quando um processo aguarda um recurso. Uma borda owner ocorre quando um recurso aguarda um processo. O modo de bloqueio encontra-se na descrição da borda. Por exemplo, Modo: X.

Nó de processo de deadlock

Em um gráfico de espera, o nó de processo contém informações sobre o processo. A tabela a seguir explica os componentes de um processo.

Componente Definição
ID de processo do servidor Identificador de processo de servidor (SPID), um identificador atribuído pelo servidor ao processo proprietário do bloqueio.
ID de lote do servidor Identificador de lote de servidor (SBID).
ID do contexto de execução Identificador do contexto de execução (ECID). A ID do contexto de execução de determinado thread associado a uma SPID específica.

ECID = {0,1,2,3, ...n}, em que 0 sempre representa o thread principal ou pai e {1,2,3, ...n} representa os subthreads.
Prioridade do deadlock Prioridade do deadlock para o processo. Para obter mais informações sobre os valores possíveis, veja SET DEADLOCK_PRIORITY (Transact-SQL).
Log Usado Quantidade de espaço de log usada pelo processo.
ID do Proprietário ID de transação para os processos que estão usando transações e, atualmente, aguardam em um bloqueio.
Descritor da transação Ponteiro para o descritor de transação que descreve o estado da transação.
Buffer de entrada Buffer de entrada do processo atual; define o tipo de evento e a instrução que são executados. Os valores possíveis incluem:

Idioma

RPC

Nenhuma
de Tipo de instrução. Os valores possíveis são:

NOP

SELECT

UPDATE

INSERT

DELETE

Desconhecido

Nó de recurso de deadlock

Em um deadlock, dois processos esperam por um recurso ocupado pelo outro processo. Em um gráfico de deadlock, os recursos são exibidos como nós de recurso.