Esse artigo faz parte da revista SQL Magazine edição 63. Clique aqui para ler todos os artigos desta edição

windowtext; FONT-FAMILY: Verdana; mso-fareast-font-family: Times">Finalmente a empresa ItsMyBusiness chegou num momento em que o banco de dados está bastante estável. Isso é muito bom, pois é justamente nestes momentos que o DBA tem tempo para trabalhar na manutenção preventiva do banco de dados, sem se preocupar em “apagar os incêndios”.

Nestas análises, muitos pontos de possível melhoria de performance são encontrados, principalmente se o DBA estiver bastante focado em realmente deixar melhor o que já possa estar bom.

No desafio deste mês, Wagner Crivelini levanta um ponto bastante importante no tocante à performance do banco de dados: o uso de cursores.

Um assunto bastante delicado que deve ser abordado de maneira exaustiva analisando cada caso para cada SGBD em específico.

O desafio desta edição é justamente o de conseguir substituir o uso de cursores obtendo-se o mesmo resultado para que, posteriormente, a performance de cada alternativa seja analisada.

Caso você tenha um desafio que gostaria de compartilhar conosco, envie sua sugestão para webeditor@sqlmagazine.com.br

Divirtam-se.

 

Ricardo Rezende

Editor técnico

ricardo@sqlmagazine.com.br

 

Desafio de SQL

 

Começamos aqui mais um desafio SQL. E novamente vamos acompanhar o dia-a-dia da empresa ItsMyBusiness, que por sinal está muito mais calmo ultimamente.

Agora o sistema da empresa está tratando adequadamente as entradas e saídas de estoque, deixando os seus acionistas muito mais tranquilos.

Você, que foi contratado recentemente como DBA da empresa, aproveitou o tempo livre para rodar scripts para análise da performance do servidor.

Quem procura, acha e com você não foi diferente. Você descobriu que algumas rotinas consomem muita CPU e muita entrada e saída de informação (ou I/O, para resumir). Olhando mais a fundo, descobriu ainda que estas rotinas usam um recurso muito comum: os famosos e temidos cursores.

A grande dor de cabeça a respeito de cursores é que eles são ótimos quando usados em alguns SGBDs. E péssimos em outros. A questão é saber como ele se comporta no seu SGBD.

Para tomar uma decisão destas, o caminho mais simples é testar a performance da sua rotina com cursores e depois sem estes cursores.

Já vimos desafios anteriores onde aprendemos a lidar com o plano de execução de uma consulta. Assim, a questão agora é: para fazer adequadamente os testes de performance, como podemos reescrever uma versão do código eliminando o uso de cursores?

Nos exemplos a seguir, usamos a sintaxe padrão do SQL SERVER, ou seja, os códigos que veremos usam a linguagem T-SQL. Faço esta ressalva porque a sintaxe para definição de cursores varia conforme o SGBD (assim como a performance, como acabamos de comentar acima).

Para ilustrar nosso desafio, devemos lembrar que a ItsMyBusiness é uma empresa que vende pela internet, assim como pelos canais tradicionais. O nosso banco de dados tem tabelas cuja função é gravar informações sobre o status de cada pedido recebido.

A Figura 1 mostra em detalhe esta parte do modelo de dados. O script de criação destas tabelas, assim como outros scripts referentes a este desafio, está disponível para download no portal da SQL Magazine.

 

...

Quer ler esse conteúdo completo? Tenha acesso completo