Estressando o SQL Server

Por vezes precisamos saber a capacidade do nosso sistema, para isso precisamos estressar o ambiente para saber o seu limite de funcionamento. É normal neste momento procurarmos alguns “robôs” que consigam disparar cargas automáticas contra nosso servidor, existem algumas ferramentas que podem nos apoiar nisso, mas nem sempre conseguimos extrair destas ferramentas tudo que precisamos, uma vez que nossos testes podem ter focos específicos; stress de processador, memória, disco ou contadores internos do banco de dados.

Neste post irei apresentar a vocês algumas ferramentas que tenho utilizado para fazer test de stress em servidores SQL Server, bem como montar um teste de stress de forma manual sem o uso destas ferramentas.

SQL Load Generator

Lançada em 2008, esta ferramenta é bastante simples, ela possibilita a execução de multiplas queryes e a simulação de diversas conexões simultâneas.

A figura abaixo apresenta a tela bem simples e intuitiva desta ferramenta.

O SQL Load Generator está disponível para download gratuíto no Codeplex, acesse: http://sqlloadgenerator.codeplex.com/

SQLQueryStress

Desenvolvida por Adam Machanic é uma outra ferramenta interessante, pois além de simular diversas conexões simultâneas também possibilita o uso de execuções dinâmicas de queryes baseadas em parâmetros. Outro ponto positivo é que a própria ferramenta já apresenta alguns contadores básicos de duração da execução, quantidade de execuções, utilização de CPU  entre outros.

O conjunto de telas abaixo ilustra a utilização da procedure “UspGetEmployeeManagers” onde devemos passar como parâmetro o Business EntityID, estes valores são obtidos a partir da tabela Employee no schema HumanResources, para isso clicamos no botão “Parameter Substitution” e inserimos a query para buscar os valores na tabela citada. Além da parametrização das execuções outro ponto a ser observado nas telas abaixo é a quantidade de execuções por conexão ou seja 5 execuções x 5 Conexões = 25 Interações.

image

image

image

Embora esta ferramenta seja meio antiga 2006, ainda continua sendo bastante útil para geração de cargas dinâmicas de queryes.

O download é gratuíto e está disponível em: http://www.datamanipulation.net/sqlquerystress/sqlquerystressdownload.asp

SQLStress

Esta também é uma boa alternativa, neste caso não precisamos definir as queryes, pois a carga de trabalho é gerada automáticamente. Nós podemos escolher o tipo de carga baseado em operações como Delete, Insert, Update e Select traçando um perfil de operação da base de dados. Isto se torna vantajoso quando não temos uma base de dados e queremos fazer um Sizing de hardware baseado na expectativa de carga de trabalho por operações e número de usuários.

A figura abaixo representa a tela onde podemos definir os parâmetros comentados e criar uma carga de trabalho com base nestes.

image

Outro destaque interessante desta ferramenta é a possiblidade de parametrizar o uso do NUMA (aba Affinity) , alem de preparar a base de dados criada para cada ciclo de testes, realizando limpeza de cache, checkpoints entre outras opções (aba Databases).

O download desta ferramenta também é gratuíto e está disponível em: http://www.sqlstress.com/Download.aspx

Fazendo de forma manual

Nem sempre temos a autorização de instalar estas ferramentas em nosso ambiente (ou no ambiente do cliente), nestes casos precisamos fazer um trabalho semelhante ao que estas ferramentas fazem, neste caso a nossa tarefa pode se tornar bem trabalhosa.

A primeira etapa para fazer estes testes de forma manual é a possibilidade de simular diversas conexões, a seguir apresento um script simplificado para esta tarefa.

Abrindo diversas conexões

Você pode criar um batch utilizando os parâmetros a seguir para abrir diversas conexões (instâncias) e com base em scripts sql (que deverão ser montados conforme sua necessidade) estas sessões serão disparadas contra o servidor definido, conforme os parâmetros da chamada do executável de linha de comando sqlcmd.

Veja abaixo um exemplo para a criação deste batch:

ECHO OFF
REM Inicia 100 instancias de um mesmo processo
for /l %%X in (1,1,100) do (start sqlcmd -S%1 -U%2 -P%3 -i%4 –o Log_%%XX.out)

Caso queira aumentar ou diminuir o número de conexões, altere o parâmetro 100 entre os parênteses (1,1,100). Além disso, você poderá personalizar os outros parâmetros embutidos na instrução do executável sqlcmd.

Para maiores detalhes acesse: Utilitário sqlcmd

Por fim, este post é apenas para dar uma idéia de como fazer e quais as ferramentas que tenho utilizado para este fim. Espero que este post tenha sido interessante e possa ajuda-los quando precisarem executar um trabalho de stress test.

Até a próxima galera!

Anúncios

1 Response to “Estressando o SQL Server”


  1. 1 Ricardo Moraes 17/08/2012 às 18:19

    Giu, achei perfeito, tudo muito claro,intuitivo e rápido! Parabéns por mais esse artigo. Abraços


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 )

Foto do Google+

Você está comentando utilizando sua conta Google+. 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 )

w

Conectando a %s




Giuliano B. Cardoso,
Administrador de Empresas com Habilitação em Informática, atua em Tecnologia da Informação há mais de 10 anos, especialista em banco de dados SQL Server, atualmente atua como consultor em Business Intelligence e instrutor de cursos oficiais Microsoft.
Possuí as seguintes certificações: ITIL-F, MCP,MCDBA SQL 2000, MCTS SQL 2005/2008, MCITP SQL2005/2008 e MCT

Mais acessados

Anúncios

%d blogueiros gostam disto: