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.
Diogo Pettres
Nenhum comentário:
Postar um comentário