Tuning real em cliente com o ERP LINX – Job que demorava dias passou a rodar em 2 horas
Fala Pessoal, Tudo certo?
Estamos realizando um Tuning em uma grande empresa, que tem lojas nos shoppings espalhados pelo país, e surgiu um caso que gostaria de compartilhar com vocês.
Existia um job nesse ambiente que ficava rodando por 1 dia, 2 dias, 3 dias e o cliente cancelava a execução manualmente:
Olhando no Log da Whoisactive foi possível perceber que a cada um minuto apareciam duas queris acessando uma mesma tabela temporária:
Reparem na quantidade acumulada de leituras e cpu. wow!!!
Estava consumindo bem do hardware desse ambiente.
As duas queries que apareciam era em uma tabela temporária que a procedure utilizava.
-
SELECT TOP 1 –aqui tinha 6 variaveis recebendo o resultado de 6 colunas dessa tabela temporária
FROM #CUR_LOCALIZA_CONTAORDER BY ID_ARQUIVO, ITEM_ARQUIVODELETE FROM #CUR_LOCALIZA_CONTA
WHERE ID_ARQUIVO = @ID_ARQUIVO_CUR
AND ITEM_ARQUIVO = @ITEM_ARQUIVO_CUR
Essa tabela devia ser muito grande para causar esse estrago todo, concordam?
Nem precisamos ser um Fabiano Amorim para ver que se criar um índice por Id_ARQUIVO e ITEM_ARQUIVO, na primeira query vamos evitar o order by, porque o índice já estará ordenado e na segunda query o SQL Server deve fazer um seek rápido para achar o registro ao invés de um scan (caso a tabela seja grande).
Incluí apenas essa linha dentro da procedure desse job:
create clustered index SK01_#CUR_LOCALIZA_CONTA on #CUR_LOCALIZA_CONTA(ID_ARQUIVO,ITEM_ARQUIVO)
Detalhe que a procedure era um monstro que chamava vários outros monstrinhos, mas eu não precisei debugar e nem abrir as milhares de linhas de códigos para tomar minha primeira ação de Tuning.
Nas próximas duas execuções do JOB, ele finalmente finalizou com sucesso.
De quase infinito (porque nunce chegou a acabar desde quando entrei no ambiente) para menos de 2 horas:
Isso tudo com pouco tempo de análise. Se parar para ver passo a passo da proc, da até para melhorar mais, mas o objetivo desse post é mostrar o grande ganho que conseguimos com uma análise bem simples que um DBA Júnior conseguiria fazer.
Como disse anteriormente, nem precisamos ser um Fabiano Amorim para fazer esse job rodar com sucesso. Claro que o Fabiano acharia mais coisas e faria mais rápido do que eu. kkkk
Feedback do gerente de TI:
Ele falou isso porque a procedure é do ERP LINX e tem dezenas de comentários com as algerações que essa procedure teve desde 2013.
Curti a ideia:
Também coloquei meu nome da história dessa proc. =)
É isso pessoal. Depois de muito tempo escrevi um post.
Subi esse aqui no blog da Power pois envolveu uma consultoria da Power Tuning e para dar uma movimentada por aqui também que está muito parado.
Fabrício Lima,
CEO da Power Tuning
2 comentários
Show Fabrício. É incrível como as vezes as soluções estão aos nossos olhos, mas geralmente damos uma volta pra resolver.
Parabéns
Exatamente. Gostamos de complicar as coisas.