Home - www.devmedia.com.br

Monitorando deadlocks com Trace Flags

por Paulo Ribeiro

Essa matéria é uma continuação do assunto DeadLocks, iniciado em “Monitoramento de DeadLocks com o Profiler”.

O que são trace flags

Trace flags são utilizadas para alterar temporariamente o comportamento padrão de funcionamento do SQL Server (=customização)

Como ativar uma trace flag

Uma trace flag é identificada por um código numérico, e pode ser ativada de duas formas:

·         Na sessão com o comando DBCC TRACEON(<id-trace>)
·         No start do serviço MSSQLServer, adicionando o parâmetro /T<id-trace>

Como desativar uma trace flag

Para desativar uma trace execute DBCC TRACEOFF(<id-trace>) .

Observação: para ativar e/ou desativar uma trace flag, é necessário que o usuário pertença ao server role SysAdmin

Monitorando DeadLocks com a trace flag 1204

A trace flag 1204 pode ser utilizada para que as conexões e respectivos comandos que ocasionaram o deadlock sejam detalhados no log de erros do SQL Server. O código presente na Listagem 1 irá ativar a trace flag e depois simular um deadlock.

-- Executar na sessao-1
DBCC TRACEON (1204)
go
use NorthWind
go
BEGIN TRAN
   select * from orders (holdlock) where orderid=10249
-- Executar na sessao-2
use NorthWind
go
BEGIN TRAN
   select * from orders (holdlock) where orderid=10249
-- Executar na sessao-1 (ficara aguardando o termino da sessao-2)
update orders set employeeid=4 where orderid=10249
-- Executar na sessao-2 (essa sessao sera finalizada com DeadLock)
update orders set employeeid=4 where orderid=10249


Listagem 1. Ativando a trace flag e simulando um dead lock

Agora podemos analisar o detalhamento do deadlock no log de erros do SQL Server
000. Para listar o conteúdo do log, foi utilizada a procedure SP_READERRORLOG (ver
Figura 1).

Figura 1. Analise do log de erros do SQL Server listado à partir da procedure SP_READERRORLOG

Algumas observações:

·         No instante identificado pela marca (1) ocorreu um deadlock. Como a trace flag 1204 não estava ativa, o registro do log é superficial;
·         No instante identificado pela marca (2) ocorre a ativação da trace flag 1204 pelo comando DBCC TRACEON (1204), que foi executado no início da Listagem 1;
·         No instante identificado pela marca (3) ocorreu um deadlock. Como a trace flag 1204 foi ativada, o registro dos comandos e spid´s envolvidos no deadlock serão detalhados:

ü      Os spid´s envolvidos no deadlock estão identificados pela marca (4): 51 e 52;
ü      Os comandos executados nas duas sessões pode ser visualizado na marca (5), iniciando com a palavra chave “Input Buf:...”;
ü      A transação que foi abortada em virtude do deadlock pode ser visualizada na marca de número (6): spid 52

Conclusão

Deadlocks degradam performance e precisam ser investigados. A trace flag 1204 é uma boa opção para mapeamento e identificação dos processos e comandos que desencadeiam o deadlock;  sua ativação é simples e descomplicada o os resultados bastante proveitosos. Bem, a dica foi essa.

Um grande abraço e até a próxima !


 

Paulo Ribeiro (psribeiro@hotmail.com) é Microsoft MCDBA e membro da equipe editorial da SQL Magazine. Atua como DBA sênior em SQL Server na Livraria e Papelaria Saraiva S/A.

  Monitorando deadlocks com Trace Flags    
  Monitorando deadlocks com o Profiler    
  Variáveis tipo TABLE    
  Tabelas Temporárias    
  Subqueries Parte II: Queries correlatas    
  Subqueries – Parte I    
  Gerenciando Bloqueios–Parte II    
  Gerenciando Bloqueios–Parte I    
  Porque qualificar o owner na chamada de stored-procedures    
  Explorando os Tipos de Join – Parte II    
  Explorando os Tipos de Join – Parte I    
  Versões existentes do SQL Server 2000    
  Tuning - Plano de Execução no SQL Server - Parte 4    
  Tuning - Plano de Execução no SQL Server - Parte 3    
  Tuning - Plano de Execução no SQL Server - Parte 2    
  Tuning - Plano de Execução no SQL Server - Parte 1    
  Tuning - Estatísticas de I/O    
  Desfragmentando Índices no SQL Server    
  Procedures Não Documentadas
no SQL Server 2000 Parte 2
   
  Procedures Não Documentadas
no SQL Server 2000.
   
  SQL Server 2005 - YUKON    
  SQL Server 2000: o Contra-Ataque.    
  Boas-Vindas    
     

 

Todos os direitos reservados: DevMedia Group
SQL Magazine - 2004