Início > Banco de dados, SQL Server > Teste de performance no SQL (via desenvolvedor)

Teste de performance no SQL (via desenvolvedor)

Uma das coisas que sempre devemos tomar cuidado é no momento de criar um select, view, delete, procedure, view no banco de dados. Assim como outros desenvolvedores, a gente acaba tendo o perfil de desenvolver a procedure (por exemplo), verificar se ela está retornando informações corretas, e então está pronto. Fazemos a chamada pela aplicação e está tudo pronto.

Mas tem uma coisa errada nesse ponto. É muito importante analisar se o objeto criado tem uma requisito não funcional (performance) funcionando corretamente. Temos que verificar se as buscas na base de dados estão utilizando os índices corretos. Se os índices criados estão funcionando de forma correta e performática.

A primeira coisa é analisar o plano de execução que o SQL está utilizando para executar o objeto. Para exemplificar, criamos uma procedure CalcularFreteTeste que recebe alguns parâmetros.

exec CalcularFreteTeste ‘32000000’, 1, 2.00000, NULL, 39999999, 1, 1

Para analisar o plano de execução, preparamos a chamada dessa procedure e clicamos no botão “Dispaly Estimated Execution Plan”

O plano de execução exibe todo o processo que o SQL está fazendo para retornar as informações da procedure. Nesse plano aparece se o SQL está fazendo “Table Scan” em uma tabela, se está utilizando índice quando executa um comando. E principalmente, qual a porcentagem do tempo que está sendo gasta em cada fase.

Passando o mouse sobre cada um dos passos é possível verificar informações importantes como Logical Operation, I/O Coast, CPU Coast, etc

Depois de alinhar do o plano de execução e deixar o mais performático possível é necessário preparar o teste de performance. Precisamos saber se a procedure vai aguentar a quantidade de acesso que será feita, qual a quantidade de memória, cpu que será consumida. Para isso podemos criar um script simples que gera inúmeras chamadas na procedure como o exemplo abaixo:

select top 1000 'exec CalcularFreteTeste ''' + CAST(Frete.CepDe as varchar) 
+ ''', ' + CAST(Frete.idCentroDistribuicao as varchar) + ', ' + 
CAST(Frete.PesoDe as varchar) + ', ' + 'NULL' + ', ' +  
CAST(Frete.CepAte as varchar) + ', ' + CAST(Frete.IdFreteModalTipo as varchar) 
+ ', ' + CAST(Frete.idFreteentregatipo as varchar) as chamadaproc 
from Frete ORDER BY NEWID()

DICA: Lembre-se que se você executar 2 vezes o mesmo teste, passando exatamente os mesmos valores, o resultado estará em cache, não exibindo um “mundo real”. Para isso lembre-se sempre de rodar o comando DBCC FREEPROCCACHE do SQL (http://msdn.microsoft.com/pt-br/library/ms174283.aspx).

Outra coisa importante é colocar um comando “GO” depois de cada execução da procedure para que o SQL Server Profiler consiga capturar cada uma das execuções. Caso contrário você vai executar 1000 chamadas e o relatório exibirá somente 1 registro.

Então está na hora de abrir o SQL Server Profile, apontar para o mesmo banco de dados e criar um trace filtrando somente a procedure que está sendo executada. Além disso é importante selecionar campos como “Read”, “Write”, “CPU” .
Filtre somente o objeto que você está analisando, senão o trace buscará tudo que está sendo executado no banco.


Lembre-se que utilizar o SQL Server Profile consome recursos (memória e cpu) da máquina, então a utilização dele em servidores de produção somente em caso de extrema urgência.

Abaixo um print de como foi configurado o trace.

Então basta analisar o consumo de CPU, memória, read, write e verificar quanto seu objeto consumiu do banco de dados. Existe como salvar o resultado desse resultado em uma tabela do banco de dados e gerar relatórios e estatísticas de tempo médio de execução, quantidade de milissegundos por execução, etc. Basta clicar com o botão direito do mouse em cima do resultado e então

É importante testar várias opções de selects, índices,  configurações e verificar qual delas foi mais performática e executada com menos recurso da máquina.

Abraços e até a próxima.

Anúncios
  1. Nenhum comentário ainda.
  1. No trackbacks yet.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: