Pergunta de entrevista para Desenvolvedor Backend

Uma query ficou lenta depois de um release. Me explica como você lê o plano de execução e decide o que mudar.

O que o entrevistador está avaliando, como estruturar sua resposta e um exemplo falado que você pode adaptar.

Resposta rápida

Rode explain analyze para ter o plano real com contagens e tempos reais, depois olhe o nó que consome mais tempo e compare as linhas estimadas com as linhas reais. Uma diferença grande significa estatísticas ruins, então o planner escolheu o join ou o scan errado. Procure sequential scans em tabelas grandes, nested loops movidos por uma subestimativa e ordenações estourando para disco. Corrija com um índice, estatísticas atualizadas ou um predicado reescrito que o índice consiga usar.

Por que os entrevistadores perguntam isso

Qualquer pessoa de backend sabe adicionar um índice; o entrevistador quer saber se você diagnostica antes de agir. Ler linhas reais versus estimadas, identificar um predicado que impede o uso de índice e saber que um sequential scan numa tabela pequena está tudo bem são sinais de trabalho real com banco de dados. Isso também abre a conversa sobre olhar a carga inteira, já que raramente uma query fica lenta sozinha.

Como estruturar sua resposta

  • Obtenha o plano real com explain analyze, não só explain.
  • Encontre o nó dominante e compare linhas estimadas com reais.
  • Mapeie os padrões comuns para as suas causas.
  • Valide a correção medindo o plano de novo, não pela intuição.

Exemplo de resposta

Exemplo falado, em primeira pessoa

Eu começo com explain analyze e buffers para ter tempos e contagens reais, de preferência contra dados de tamanho de produção, porque um plano num dataset pequeno não me diz nada. Depois encontro o nó que consome a maior parte do tempo e comparo a estimativa dele com o real. Se ele estimou uma linha e vieram cinquenta mil, o planner escolheu um nested loop que agora é um desastre, e o problema de fundo costuma ser estatística desatualizada ou um predicado correlacionado que o planner não consegue modelar. Depois disso eu procuro os suspeitos de sempre: um sequential scan numa tabela grande, um filtro que poderia ser uma condição de índice, uma ordenação estourando para disco, ou uma função envolvendo a coluna e tornando o índice inutilizável. Esse último foi meu caso mais recente, uma chamada lower numa coluna de e-mail que ignorava o índice; um índice funcional em lower de email levou aquilo de cerca de 900 milissegundos para dois. Depois eu rodo o plano de novo para confirmar que o formato mudou, já que uma execução mais rápida com cache quente não prova nada.

Vai encarar essa entrevista em breve? O GhostPilot escuta a sua chamada ao vivo, identifica a pergunta no instante em que ela é feita e coloca uma resposta estruturada na sua tela em tempo real. Teste na sua próxima entrevista simulada ou pegue um Session Pass de $29, sem assinatura, para a hora da verdade.

Veja como funciona

Perguntas de acompanhamento que você pode esperar

  • O que faz um predicado ficar impossibilitado de usar um índice?
  • Como você distingue um problema de estatística de um índice faltando?
  • Quando um sequential scan é o plano certo?

Mais perguntas para Desenvolvedor Backend

Seu entrevistador vai fazer a própria versão desta. Cole a descrição real da vaga no Question Predictor gratuito e receba as 20 perguntas que essa vaga tem mais chance de fazer, com o que cada uma está de fato sondando.

Prever minhas perguntas

Ensaie as perguntas difíceis antes que elas apareçam

Pratique com um copiloto ao vivo e depois entre pronto. Um Session Pass de $29 te leva até o fim da entrevista, sem assinatura e sem amarras.

Instalar o GhostPilot