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:
|
Instrução |
Tipo de instrução. Os valores possíveis são:
|
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.