O registro de consultas lentas é uma parte importante do ajuste de desempenho de qualquer aplicativo Rails. O Rails fornece um mecanismo interno para registrar consultas lentas chamado Active Support Notifications.

Este artigo mostrará a você como usar o Active Support Notifications para registrar consultas lentas em seu aplicativo Rails. Também forneceremos dicas sobre como analisar registros de consultas lentas para identificar e corrigir problemas de desempenho.

O que é uma consulta lenta?

Uma consulta lenta é uma consulta que leva mais tempo do que um determinado limite para ser executada. O limite do que constitui uma consulta lenta pode variar de acordo com o aplicativo e seus requisitos de desempenho. Entretanto, uma boa regra geral é considerar lenta qualquer consulta que demore mais de 100 milissegundos.

Por que é importante registrar as consultas lentas?

Existem muitos motivos pelos quais é importante e por que você deseja registrar consultas lentas.

Primeiro, as consultas lentas podem ser um sinal de problemas de desempenho subjacentes em seu aplicativo. Ao registrar consultas lentas, você pode identificar esses problemas precocemente e tomar medidas para corrigi-los. Prevenir é melhor que remediar.

Em segundo lugar, as consultas lentas podem ajudar você a identificar possíveis vulnerabilidades de segurança no seu aplicativo. Por exemplo, uma consulta lenta causada por um ataque malicioso de injeção de SQL pode ser usada para identificar a vulnerabilidade e tomar medidas para mitigá-la.

Em terceiro lugar, as consultas lentas podem ajudar você a melhorar o desempenho do seu aplicativo.

Ao analisar os registros de consultas lentas, você pode identificar as consultas que estão causando mais problemas de desempenho e tomar medidas para otimizá-las. Podemos registrar eventos de consultas lentas em nosso aplicativo usando o Active Support Notifications.

O que é Active Support Notifications?

Active Support Notifications é uma ferramenta essencial para qualquer desenvolvedor Rails que deseja obter insights mais detalhados sobre o desempenho e comportamento de aplicativos. Elas permitem que você acompanhe eventos específicos que ocorrem dentro do seu código e colete dados valiosos sobre a execução deles.

Ao compreender sua funcionalidade e aproveitá-las de forma eficaz, você pode melhorar significativamente o desempenho, a capacidade de manutenção e a saúde geral do seu aplicativo Rails.

Aqui está uma visão geral do Active Support Notifications e seus principais benefícios.

Funcionalidade

  • Instrumentação: Você pode instrumentar eventos específicos em seu aplicativo Rails usando o método ActiveSupport::Notifications.instrument. Esse método recebe um nome, uma carga útil (dados opcionais) e um bloco de código a ser executado.
  • Carga útil: A carga útil permite que você passe dados adicionais relevantes para o evento que está sendo instrumentado. Isso pode incluir coisas como carimbos de data/hora, IDs de usuário, detalhes de consultas ao banco de dados ou qualquer outra informação relevante.
  • Assinantes: Depois que o bloco é executado, o Active Support envia uma notificação com o nome e a carga útil para os assinantes registrados. Esses assinantes podem então processar as informações e tomar medidas específicas com base no evento.

Benefícios

  • Monitoramento do desempenho: Ao instrumentar os principais eventos, você pode rastrear o tempo de execução e identificar gargalos de desempenho no aplicativo. Isso permite que você otimize seu código e melhore o desempenho geral do seu aplicativo Rails.
  • Depuração: As notificações podem fornecer insights valiosos sobre o fluxo do seu aplicativo e ajudar a diagnosticar problemas. Os dados da carga útil podem revelar comportamentos inesperados ou erros durante o tempo de execução.
  • Instrumentação personalizada: Você pode ampliar a funcionalidade das notificações do Active Support criando seus próprios instrumentos e assinantes personalizados. Isso permite que você rastreie eventos específicos relevantes para as necessidades exclusivas do seu aplicativo.
  • Integração com outras bibliotecas: Muitas bibliotecas populares do Rails, como Action Cable e ActiveJob, utilizam o Active Support Notifications para fornecer dados de desempenho e recursos de rastreamento de eventos.

Como registrar consultas lentas com o Active Support Notifications

O Active Support Notifications é um mecanismo integrado do Rails para registrar eventos que ocorrem no seu aplicativo. Para usar o Active Support Notifications para registrar consultas lentas, o código de exemplo abaixo deve ser colocado em um inicializador (por exemplo, config/initializers/error_notifications.rb) para garantir que ele seja executado na inicialização do aplicativo. Como alternativa, adicione o código a um controlador ou modelo específico para um registro direcionado.

config.active_support.Notifications.subscribe('sql.active_record') do |*args|
  event = ActiveSupport::Notifications::Event.new(*args)
  if event.duration > 100
    Rails.logger.info "Slow query: #{event.payload[:sql]}"
  end
end

Esse código registrará todas as consultas SQL que demoram mais de 100 milissegundos para serem executadas.

As informações registradas incluirão a instrução SQL, a duração da consulta e o nome do arquivo e o número da linha em que a consulta foi executada.

Como analisar registros de consultas lentas

Uma vez que você começou a registrar consultas lentas, você pode analisar os registros para identificar as consultas que estão causando os maiores problemas de desempenho. Existem algumas maneiras diferentes de analisar registros de consultas lentas.

Uma delas é usar uma ferramenta como o Rails Performance Dashboard. O Rails Performance Dashboard fornece uma interface gráfica para que você visualize e analise os registros de consultas lentas.

Outra maneira de analisar registros de consultas lentas é usar um editor de texto ou programa de planilha. Você pode usar um editor de texto ou programa de planilha para ordenar e filtrar os registros de consultas lentas por duração, instrução SQL ou nome do arquivo.

Isso pode ajudá-lo a identificar as consultas que estão causando os maiores problemas de desempenho.

Como corrigir consultas lentas

Depois de identificar as consultas que estão causando mais problemas de desempenho, você pode tomar medidas para corrigi-las. Há algumas maneiras diferentes de corrigir consultas lentas.

Uma delas é otimizar a instrução SQL. Você pode otimizar a instrução SQL usando índices, adicionando restrições ou usando métodos de consulta mais eficientes.

Outra maneira de corrigir consultas lentas é armazenar em cache os resultados da consulta. Você pode armazenar em cache os resultados da consulta usando um armazenamento de cache do Rails ou usando um cache de banco de dados (por exemplo, Redis, Memcached).

Ao implementar a paginação e dividir grandes conjuntos de resultados em páginas menores, você melhora o desempenho e reduz o uso da memória.

Além disso, considere executar trabalhos em segundo plano e descarregar consultas de longa duração para trabalhos em segundo plano (por exemplo, usando Sidekiq, Resque) para evitar o bloqueio de solicitações da web.

Resumo

O Active Support Notifications é um mecanismo integrado do Rails para registrar consultas lentas. O registro de consultas lentas é uma parte importante do ajuste de desempenho de qualquer aplicativo Rails. Ao registrá-las, você pode identificar problemas de desempenho logo no início e tomar medidas para corrigi-los.

Você pode usar o Active Support Notifications para registrar consultas lentas e analisar os registros para identificar as consultas que estão causando mais problemas de desempenho. Depois de identificar as consultas que estão causando mais problemas de desempenho, você pode tomar medidas para corrigi-las.

Se você está em um projeto bem estabelecido e tem capacidade para ter desenvolvedores júnior nas equipes, esse nível de otimização do trabalho irá guiá-los a estabelecer melhores práticas ao se envolverem no processo. E, ao envolver a equipe de monitoramento e os sêniores, construir uma plataforma mais eficiente e performática. Dê seu projeto de consulta lenta a um desenvolvedor júnior, e eles se beneficiarão tremendamente disso.

Não espere o problema existir. Previna consultas lentas antes que elas o atrasem. Seja proativo, não reativo!

Lee Sheppard

Lee is an Agile certified full stack Ruby on Rails developer. With over six years in the tech industry he enjoys teaching, coaching Agile, and mentoring others. Lee also speaks at tech related events and has a background in design and illustration.