Não faz muito tempo, dei um tutorial sobre o Explain Plan para nossa equipe de desenvolvimento de aplicativos. Uma pergunta que surgiu foi como decidir quais instruções SQL precisam de ajuste? Eu uso algumas abordagens diferentes e encontro candidatos de ajuste de SQL de diferentes ângulos.
- Realizo rotineiramente revisões de código em instruções SQL que atingem nosso banco de dados. Eu aproveito minha experiência para examinar rapidamente uma instrução SQL que é nova ou que foi significativamente modificada para decidir se preciso investigar mais o SQL. Por exemplo, se uma consulta em uma tabela estiver pesquisando em uma coluna PK ou Unique, posso ter certeza de que ela será executada rapidamente. Se a instrução SQL parecer suspeita para mim, vou executá-la por meio do Plano de Explicação e/ou cronometrar a instrução para garantir que ela seja executada o suficiente.
- O Enterprise Manager da Oracle me alerta sobre contenção de recursos em nosso sistema de banco de dados de teste. Quaisquer instruções SQL que eu perdi durante a revisão de código às vezes podem ser encontradas aqui. Se eu receber um alerta de contenção de recursos, vou pular e ver se uma ou duas instruções SQL estão causando um problema. Esta é minha última chance de capturar instruções SQL antes que elas cheguem à produção.
- Eu aproveito o Ignite para Oracle. Este produto é da Confio, mas a Confio agora faz parte da Solarwinds. Normalmente, não conecto os produtos do fornecedor, mas abro uma exceção neste caso. O que eu gosto no Ignite é que ele me envia um relatório por e-mail toda segunda-feira. O relatório contém os principais N infratores com base no tempo de espera. Levo segundos para olhar para este relatório. Procuro as barras grandes no relatório. Na captura de tela de exemplo abaixo, você pode ver uma barra azul que imediatamente chama sua atenção. O número à direita é um valor de id e, se você clicar nele, poderá obter o texto SQL. Essa é uma ótima maneira de identificar as instruções SQL que precisam de ajuste. É super rápido e super fácil.
Como você pode ver, tento encontrar SQL problemático à medida que eles estão sendo desenvolvidos, quando estão em nosso sistema de teste e mesmo depois de entrarem em produção.