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

Imagem

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 !


Imagem  

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.