Partilhar via


Analisar deadlocks com o SQL Server Profiler

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. O SQL Server Profiler pode extrair o documento XML para um arquivo XML de deadlock (.xdl) que você pode exibir 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 aparece 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-se com o botão direito do mouse em um evento específico e escolhendo Extrair Dados de Evento.

Gráficos de deadlock

O 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.

  • Borda
    Uma relação entre um processo e um recurso. Uma borda request ocorre quando um processo espera por um recurso. Uma borda owner ocorre quando um recurso espera por 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}, onde 0 sempre representa o thread principal ou pai e {1, 2, 3, ...n} representam os subthreads.

Prioridade do deadlock

Prioridade do deadlock para o processo. Para obter mais informações sobre os valores possíveis, consulte 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.

Instrução

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.