terça-feira, 15 de dezembro de 2009

Identificando gargalos no SQL Server

Pessoal,

Segue uma dica de como encontrar possíveis gargalos e processos com problema no SQL Server.


  • Faça um select direto na sysprocesses:

select * from master..sysprocesses where status = 'runnable'

ou

select * from master..sysprocesses where dbid = xx (Este serve para quando você já suspeita de um banco em questão)


Para saber o dbid de um banco execute:

select DB_ID('nome do banco')

  • No retorno dessa query:

Você terá o status de cada processo no SQL Server:

spid | kpid | blocked | waittype | waittime | lastwaittype | waitresource | dbid | uid | ...

Verifique se existe algum tempo em que um processo está em espera:

waittime e waittype lhe diz muito a respeito disso.

A coluna lastwaittype també é muito útil, segue um link com cada tipo de waittype e lastwaittype http://support.microsoft.com/kb/822101/

Identificando o tipo de espera, você consegue identificar o que está acontecendo, se é I/O, LATCH, MEMORY e etc.

Em último sugiro o uso do DBCC SQLPERF(threads), este comando te dá o status de cada thread aberta pelo SQL Server, bem como cada processo associado a esta thread. Te retorna informações de status, IO, CPU e MEM.

Essa técnica em conjunto com ferramentas do tipo SQL Profiler, Perfmon do Windows, torna-se algo muito útil para identificar problemas de performance e outros.


Até mais...

Diogo Pettres

Nenhum comentário:

Postar um comentário