fbpx

Bug do IntelliSense?! Analisando o consumo excessivo de DTUs pelo IntelliSense

Bug do IntelliSense?! Analisando o consumo excessivo de DTUs pelo IntelliSense

Apresentamos aqui um caso curioso que parece ser um bug do Microsoft IntelliSense que faz ele consumir recursos consideráveis do ambiente. Antes de entrarmos nos detalhes, vamos dar uma rápida introdução sobre o assunto.

O IntelliSense é uma ferramenta legal que vem embutida em editores como o SQL Server Management Studio (SSMS) e o Azure Data Studio (ADS). Ele é tipo o ajudante invisível que completa os comandos para você, aponta erros de sintaxe e, no geral, deixa a vida do desenvolvedor mais fácil.

Dependendo do que você faz nessas interfaces gráficas, o IntelliSense entra em ação. Por exemplo, quando você vai modificar uma procedure, ele pode aparecer:

Tendo essa base vamos ao nosso caso. Estávamos usando o SSMS 19.x e trabalhando num Azure SQL Database. Importante destacar o tipo de ambiente pois cada um pode ter suas particularidades.

Tentávamos modificar uma procedure pela interface usando o botão “Modify” no SSMS ou ADS. Até aí tudo bem, mas quando o script aparecia na tela, o IntelliSense gerava uma sessão para buscar alguns dados (provavelmente para guardar em cache e validar a query). O problema era que cada uma dessas sessões consumia cerca 10% dos DTUs do cliente. Podemos observar o consumo constante com a WhoIsActive usando o @delta_interval=1:

Para cada usuário era uma nova sessão, tivemos acúmulos de 50% do consumo das DTUs. Não adiantava dar “KILL” nessas sessões, porque ele abria outra sessão no lugar. Até fechar a aba que gerou a query seguido do Kill não adiantava, as sessões só eram encerradas com o fechamento do SSMS ou ADS por completo.

Tentamos simular em outros ambientes, mas não conseguimos. Em outros ambientes já tivemos casos de planos de execução ruins causados pelo Job Manager, e conseguimos resolver atualizando umas estatísticas relacionadas ao problema. Porém, devido às limitações do ambiente não conseguimos seguir essa linha de raciocínio.

Parece que alguma particularidade do ambiente do cliente contribuía para o problema. Depois de alguns testes, chegamos a algumas conclusões:

  • Desligando o IntelliSense não temos problema.
  • O problema só acontecia nas versões 19.x do SSMS.
  • Nas versões 18.x e anteriores, o problema não ocorria.
  • Com o lançamento da versão 20.x do SSMS em 19/03 e a versão 1.48 do ADS, o problema não ocorreu novamente.
  • Nas notas de atualizações do SSMS e ADS não encontramos bugs relacionados

Pelos testes acreditamos que alguma particularidade do ambiente contribuía para esse Bug do IntelliSense presente nas versões 19.x.

Com o SSMS atualizado, o cliente segue sem problemas. Se o problema voltar a acontecer, iremos coletar as informações necessárias e reportar pra Microsoft, assim podemos ter certeza se é realmente um Bug.

Para os aventureiros segue a query que o IntelliSense ficava agarrado:

Se alguém já passou por isso ou tem alguma sugestão sobre a causa, deixa aí nos comentários, será de grande ajuda!

Tags: , , , , ,

Deixe uma resposta