[et_pb_section fb_built="1" _builder_version="4.9.11" _module_preset="default" global_colors_info="{}"][et_pb_row column_structure="2_5,3_5" _builder_version="4.9.11" _module_preset="default" global_colors_info="{}"][et_pb_column type="2_5" _builder_version="4.9.11" _module_preset="default" global_colors_info="{}"][et_pb_image src="https://tripletech.gulp.digital/wp-content/uploads/2022/08/Analise-performance-sql-server-1024×964-1.jpg" alt="Análise e solução problema de performance em banco de dados – Cliente Logística" title_text="Analise-performance-sql-server-1024×964" _builder_version="4.9.11" _module_preset="default" global_colors_info="{}"][/et_pb_image][/et_pb_column][et_pb_column type="3_5" _builder_version="4.9.11" _module_preset="default" global_colors_info="{}"][et_pb_text _builder_version="4.9.11" _module_preset="default" global_colors_info="{}"]
No ambiente de tecnologia e desenvolvimento, problemas de desempenho podem surgir de maneira inesperada, impactando não apenas os resultados internos, mas também a experiência de parceiros e clientes externos.
Recentemente, a Tripletech se deparou com um desafio desse tipo ao atender um cliente do setor logístico.
O objetivo deste artigo é relatar essa experiência e destacar a abordagem adotada para resolver o problema de desempenho, utilizando a análise do operador Key Lookup.
[/et_pb_text][/et_pb_column][/et_pb_row][et_pb_row _builder_version=”4.9.11″ _module_preset=”default” global_colors_info=”{}”][et_pb_column type=”4_4″ _builder_version=”4.9.11″ _module_preset=”default” global_colors_info=”{}”][et_pb_text _builder_version=”4.9.11″ _module_preset=”default” hover_enabled=”0″ global_colors_info=”{}” sticky_enabled=”0″]
O cliente, uma grande empresa do segmento de logística, começou a enfrentar uma queda contínua no desempenho de sua plataforma.
O banco de dados SQL apresentou uma degradação significativa, resultando em lentidão nas consultas e na exibição das informações nos dashboards. Surpreendentemente, não havia ocorrido nenhuma alteração recente no ambiente do banco de dados que pudesse explicar essa degradação.
Inicialmente, a equipe internet de infraestrutura foi mobilizada para realizar uma análise preliminar do sistema. No entanto, essa análise não revelou nenhuma anomalia aparente. Diante da persistência do problema, a Tripletech foi acionada para uma análise mais profunda, concentrando-se no banco de dados SQL Server.
Análise e Solução
Através de um minucioso processo de análise, a equipe da Tripletech identificou que uma query mal otimizada estava impactando negativamente o servidor do banco de dados. Essa degradação se tornou notável à medida que a base de dados cresceu, amplificando a falta de otimização na consulta. Ficou evidente que a saúde geral do sistema estava comprometida devido a essa query.
Uma análise técnica detalhada foi realizada pelo especialista da Tripletech, Getúlio Torres, abaixo conheça um pouco mais sobre a análise.
Operador Key Lookup: Entendendo o Cenário
O Key Lookup é um operador que dificilmente não iremos nós deparar em alguma análise em planos de execução. O papel principal desse operador é retornar dados que não estão sendo associados ao índice que está sendo utilizado em operadores Seek (alguma vezes Scan…).
Em nossos “Cases”, sempre nos preocupamos em eliminá-lo de uma forma positiva para todo o ambiente sem sobrecarregar nenhum outro recurso, tentando diminuir o número de leituras consideradas excessivas, já que existem formas para evitá-lo ou diminuir a frequência.
Vários artigos (99%) recomendam que sejam criados índices de cobertura (Covering Index) para solucionar quaisquer problemas, mas as vezes isso não seria a melhor escolha já que podemos ter um cenário que a necessidade de incluir várias colunas ou colunas muito grandes gere um “overhead” nas transações associadas ao objeto em questão.
Sendo assim, quando inicio uma análise no plano de execução e me deparo com “Key Lookup”, sigo alguns passos:
[/et_pb_text][/et_pb_column][/et_pb_row][et_pb_row _builder_version=”4.9.11″ _module_preset=”default” global_colors_info=”{}”][et_pb_column type=”4_4″ _builder_version=”4.9.11″ _module_preset=”default” global_colors_info=”{}”][et_pb_text _builder_version=”4.9.11″ _module_preset=”default” global_colors_info=”{}”]
- Informações do operador
- Número de execuções: Quanto maior esse valor, mais custoso esse operador deverá ser para o plano de execução;
- Predicados: Significa que algum predicado na clausula “Where” faz parte desse operador
- Lista de Saída: As colunas selecionadas no “Select”
- Avaliar o Objeto
- Verificar como o objeto está sendo relacionado na consulta
- Quais índices estão disponíveis
- Quantidade de linhas
[/et_pb_text][/et_pb_column][/et_pb_row][et_pb_row _builder_version=”4.9.11″ _module_preset=”default” global_colors_info=”{}”][et_pb_column type=”4_4″ _builder_version=”4.9.11″ _module_preset=”default” global_colors_info=”{}”][et_pb_text _builder_version=”4.9.11″ _module_preset=”default” global_colors_info=”{}”]
A partir dessas informações e o custo do operador em relação ao total o plano de execução, início uma bateria de testes para definir qual a melhor opção que será utilizada para eliminá-lo ou diminuir sua execução. Dessa forma, teremos as seguintes recomendações a seguir:
- Criar um índice de cobertura (Covering Index);
A execução dessa atividade, eliminará o operador “Key Lookup”
Obs.: Conforme já alertado, adotar essa ação requer alguns cuidados!
- Criar um índice com as colunas chamadas “Key Columns”
A execução dessa atividade, diminuirá a frequência de execuções, mas não eliminará o operador, sendo uma solução aceitável para poucas linhas, caso contrário não trará os benefícios esperados.
- Reescrever o código, de uma forma que consiga satisfazer o plano de execução sem o uso do operador “Key Loolup”
Para adoção dessa solução, se faz necessário obter um conhecimento dos dados do cliente.
- Caso tenha índices que possa atender a lista de saída(outputlist) e os predicados, duplicar o objeto(tabela) direcionando o conjunto de colunas para as respectivas tabelas “duplicadas”
Para realizar essa manobra, é necessário realizar uma análise profunda para entender quais índices poderiam satisfazer cada grupo de colunas.
Segue abaixo alguns exemplos, para demonstrar os cenários descritos acima.
[/et_pb_text][/et_pb_column][/et_pb_row][et_pb_row _builder_version=”4.9.11″ _module_preset=”default” global_colors_info=”{}”][et_pb_column type=”4_4″ _builder_version=”4.9.11″ _module_preset=”default” global_colors_info=”{}”][et_pb_text _builder_version=”4.9.11″ _module_preset=”default” custom_margin=”||9px|||” global_colors_info=”{}”]
1 – Plano de Execução “Original”
[/et_pb_text][et_pb_image src="https://tripletech.gulp.digital/wp-content/uploads/2022/08/Operador-Key-Lookup-plano-execucao-original.png" title_text="Operador-Key-Lookup-plano-execução-original" _builder_version="4.9.11" _module_preset="default" global_colors_info="{}"][/et_pb_image][/et_pb_column][/et_pb_row][et_pb_row _builder_version="4.9.11" _module_preset="default" global_colors_info="{}"][et_pb_column type="4_4" _builder_version="4.9.11" _module_preset="default" global_colors_info="{}"][et_pb_text _builder_version="4.9.11" _module_preset="default" global_colors_info="{}"]
2 – Plano de Execução índice de “Cobertura”
[/et_pb_text][et_pb_image src="https://tripletech.gulp.digital/wp-content/uploads/2022/08/Operador-Key-Lookup-plano-execucao-cobertura.png" title_text="Operador-Key-Lookup-plano-execução-cobertura" _builder_version="4.9.11" _module_preset="default" global_colors_info="{}"][/et_pb_image][/et_pb_column][/et_pb_row][et_pb_row _builder_version="4.9.11" _module_preset="default" global_colors_info="{}"][et_pb_column type="4_4" _builder_version="4.9.11" _module_preset="default" global_colors_info="{}"][et_pb_text _builder_version="4.9.11" _module_preset="default" global_colors_info="{}"]
3 – Plano de Execução com índice “Key Columns”
[/et_pb_text][et_pb_image src="https://tripletech.gulp.digital/wp-content/uploads/2022/08/Operador-Key-Lookup-plano-execucao-key-columns.png" title_text="Operador-Key-Lookup-plano-execução-key-columns" _builder_version="4.9.11" _module_preset="default" global_colors_info="{}"][/et_pb_image][et_pb_text _builder_version="4.9.11" _module_preset="default" global_colors_info="{}"]
4 – Plano de Execução com tabelas “Duplicadas”
[/et_pb_text][et_pb_image src="https://tripletech.gulp.digital/wp-content/uploads/2022/08/Operador-Key-Lookup-plano-execucao-duplicadas.png" title_text="Operador-Key-Lookup-plano-execução-duplicadas" _builder_version="4.9.11" _module_preset="default" global_colors_info="{}"][/et_pb_image][/et_pb_column][/et_pb_row][et_pb_row _builder_version="4.9.11" _module_preset="default" global_colors_info="{}"][et_pb_column type="4_4" _builder_version="4.9.11" _module_preset="default" global_colors_info="{}"][et_pb_text _builder_version="4.9.11" _module_preset="default" global_colors_info="{}"]
- Sua empresa busca melhorar a performance de seu banco de dados SQL Server ?
- Precisa de uma análise mais detalhada em seu banco de dados ?
Para obter mais informações e soluções relacionadas a desempenho de sistemas e otimização de bancos de dados, a equipe da Tripletech está à disposição para auxiliar e compartilhar seu conhecimento técnico.
[/et_pb_text][/et_pb_column][/et_pb_row][et_pb_row _builder_version=”4.9.0″ _module_preset=”default” global_colors_info=”{}”][et_pb_column type=”4_4″ _builder_version=”4.9.0″ _module_preset=”default” global_colors_info=”{}”][et_pb_cta title=”Fale com um especialista” button_url=”https://tripletech.com.br/#depoimentos” button_text=”Fale agora!” _builder_version=”4.9.11″ _module_preset=”default” background_color=”#9e2525″ hover_enabled=”0″ global_colors_info=”{}” sticky_enabled=”0″]
Fale com um especialista agora, e tenha a melhor solução de TI para sua empresa.
[/et_pb_cta][/et_pb_column][/et_pb_row][et_pb_row _builder_version=”4.9.0″ _module_preset=”default” global_colors_info=”{}”][et_pb_column type=”4_4″ _builder_version=”4.9.0″ _module_preset=”default” global_colors_info=”{}”][et_pb_text _builder_version=”4.9.0″ _module_preset=”default” global_colors_info=”{}”]
Acompanhe a Tripletech nas redes sociais:
[/et_pb_text][et_pb_social_media_follow _builder_version=”4.9.0″ _module_preset=”default” text_orientation=”center” global_colors_info=”{}”][et_pb_social_media_follow_network social_network=”facebook” url=”https://www.facebook.com/tripletechti” _builder_version=”4.9.0″ _module_preset=”default” background_color=”#3b5998″ global_colors_info=”{}” follow_button=”off” url_new_window=”on”]facebook[/et_pb_social_media_follow_network][et_pb_social_media_follow_network social_network=”twitter” url=”https://www.twitter.com/tripletech” _builder_version=”4.9.0″ _module_preset=”default” background_color=”#00aced” global_colors_info=”{}” follow_button=”off” url_new_window=”on”]twitter[/et_pb_social_media_follow_network][et_pb_social_media_follow_network social_network=”linkedin” url=”https://www.linkedin.com/company/tripletech-it-solutions” _builder_version=”4.9.0″ _module_preset=”default” background_color=”#007bb6″ global_colors_info=”{}” follow_button=”off” url_new_window=”on”]linkedin[/et_pb_social_media_follow_network][et_pb_social_media_follow_network social_network=”instagram” url=”https://www.instagram.com/triple.tech/” _builder_version=”4.9.0″ _module_preset=”default” background_color=”#ea2c59″ global_colors_info=”{}” follow_button=”off” url_new_window=”on”]instagram[/et_pb_social_media_follow_network][/et_pb_social_media_follow][/et_pb_column][/et_pb_row][/et_pb_section]
Ir para o conteúdo



