por Roberto Cavalcanti

Existem várias formas de se identificar problemas de bloqueios em SQL Server. Uma forma bastante usada é a execução de scripts que repetem a captura de snapshots de como as transações se encontram em variados momentos. Um desses scripts pode ser baixado no KB 271509. Esse script coleta e expõe  os seguintes dados:

  • A hora de início (de acordo com o computador que está executando o SQL Server) para que esta amostragem de bloqueio possa ser alinhada com outras informações de desempenho, como um log do System Monitor (Perfmon) do Microsoft Windows Server ou um log do SQL Profiler.
  • Informações sobre conexões ao SQL Server, consultando a tabela de sistema sysprocesses .
  • Informações sobre recursos de bloqueio (locks), consultando a tabela de sistema syslockinfo .
  • Informações sobre recursos de espera (waits), executando DBCC SQLPERF(WAITSTATS).
  • Lista de batches que estão bloqueando ou sendo bloqueados por outros processos do SQL Server usando o DBCC INPUTBUFFER.
  • A hora de término, de acordo com o computador que está executando o SQL Server.

Para executar o blocker script, é necessário usar esse outro pequeno script para executar a stored procedure em loop. Nesse exemplo do KB 271509 o nome do script a ser chamado é “sp_blocker_pss08”.

WHILE 1=1
BEGIN
   EXEC master.dbo.sp_blocker_pss08
   WAITFOR DELAY '00:00:15' -- sugerimos que esse numero seja entre 5 e 60 segundos
END
GO


Para entender e resolver problemas de bloqueios com o SQL Server, leia esse artigo KB 224453. Nele se encontram explicações detalhadas sobre os motivos porque eles ocorrem e indicações de varias formas de como evitar (ou pelo menos diminuir) sua recorrência, inclusive como utilizar o SQL Profiler para capturar os detalhes das sessões (SPIDs) em conjunto com o resultado do blocker script.

Leia também esse artigo complementar para o SQL Server 2005/2008 do nosso time de engenheiros de suporte a SQL Server sobre esse tópico: SQL Server 2005 Performance Statistics Script.