Registrar las consultas lentas es una parte importante del ajuste del rendimiento de cualquier aplicación Rails. Rails proporciona un mecanismo incorporado para registrar las consultas lentas llamado Notificaciones de Soporte Activo.

Este artículo te mostrará cómo utilizar las Notificaciones de Soporte Activo para registrar consultas lentas en tu aplicación Rails. También te daremos consejos sobre cómo analizar los registros de consultas lentas para identificar y solucionar problemas de rendimiento.

¿Qué es una consulta lenta?

Una consulta lenta es una consulta que tarda en ejecutarse más de un determinado umbral. El umbral de lo que constituye una consulta lenta puede variar según la aplicación y sus requisitos de rendimiento. Sin embargo, una buena regla general es considerar lenta cualquier consulta que tarde más de 100 milisegundos.

¿Por qué es importante registrar las consultas lentas?

Hay muchas razones por las que es importante y por las que deberías registrar las consultas lentas.

En primer lugar, las consultas lentas pueden ser un signo de problemas de rendimiento subyacentes en tu aplicación. Registrando las consultas lentas, puedes identificar estos problemas en una fase temprana y tomar medidas para solucionarlos. La prevención es mejor que el tratamiento.

En segundo lugar, las consultas lentas pueden ayudarte a identificar posibles vulnerabilidades de seguridad en tu aplicación. Por ejemplo, una consulta lenta causada por un ataque de inyección SQL malicioso puede servir para identificar la vulnerabilidad y tomar medidas para mitigarla.

En tercer lugar, las consultas lentas pueden ayudarte a mejorar el rendimiento de tu aplicación.

Analizando los registros de consultas lentas, puedes identificar las consultas que causan más problemas de rendimiento y tomar medidas para optimizarlas. Podemos registrar eventos de consultas lentas en nuestra aplicación utilizando las Notificaciones de Soporte Activo.

¿Qué son las Notificaciones de Soporte Activo?

Las Notificaciones de Soporte Activo son una herramienta esencial para cualquier desarrollador Rails serio que quiera obtener información más profunda sobre el rendimiento y el comportamiento de su aplicación. Te permiten rastrear eventos específicos que ocurren dentro de tu código y recopilar datos valiosos sobre su ejecución.

Comprendiendo su funcionalidad y aprovechándolas eficazmente, puedes mejorar significativamente el rendimiento, la mantenibilidad y la salud general de tu aplicación Rails.

Aquí tienes una visión general de las Notificaciones de Soporte Activo y sus principales ventajas.

Funcionalidad

  • Instrumentación: Puedes instrumentar eventos específicos en tu aplicación Rails utilizando el método ActiveSupport::Notifications.instrument. Este método toma un nombre, un payload (datos opcionales) y un bloque de código a ejecutar.
  • Payload: El payload te permite pasar datos adicionales relevantes para el evento que se está instrumentando. Esto podría incluir cosas como marcas de tiempo, ID de usuario, detalles de la consulta a la base de datos o cualquier otra información relevante.
  • Suscriptores: Una vez ejecutado el bloque, el Soporte Activo envía una notificación con el nombre y el payload a los suscriptores registrados. Estos suscriptores también pueden procesar la información y emprender acciones específicas basadas en el evento.

Ventajas

  • Monitorización del rendimiento: Al instrumentar eventos clave, puedes hacer un seguimiento de su tiempo de ejecución e identificar cuellos de botella de rendimiento dentro de tu aplicación. Esto te permite optimizar tu código y mejorar el rendimiento general de tu aplicación Rails.
  • Depuración: Las notificaciones pueden proporcionar información valiosa sobre el flujo de tu aplicación y ayudar a diagnosticar problemas. Los datos del payload pueden revelar comportamientos inesperados o errores durante el tiempo de ejecución.
  • Instrumentación personalizada: Puedes ampliar la funcionalidad de las Notificaciones de Soporte Activo creando tus propios instrumentos y suscriptores personalizados. Esto te permite rastrear eventos específicos relevantes para las necesidades únicas de tu aplicación.
  • Integración con otras bibliotecas: Muchas bibliotecas Rails populares, como Action Cable y ActiveJob, aprovechan las Notificaciones de Soporte Activo para proporcionar datos de rendimiento y capacidades de seguimiento de eventos.

Cómo registrar consultas lentas con las Notificaciones de Soporte Activo

Las Notificaciones de Soporte Activo son un mecanismo incorporado en Rails para registrar los eventos que se producen en tu aplicación. Para utilizar las Notificaciones de Soporte Activo para registrar consultas lentas, el código de ejemplo que aparece a continuación se colocaría en un inicializador (por ejemplo, config/initializers/error_notifications.rb) para garantizar que se ejecuta al iniciar la aplicación. Alternativamente, añade el código a un controlador o modelo específico para un registro específico.

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

Este código registrará todas las consultas SQL que tarden más de 100 milisegundos en ejecutarse.

La información registrada incluirá la sentencia SQL, la duración de la consulta y el nombre del archivo y el número de línea donde se ejecutó la consulta.

Cómo analizar los registros de consultas lentas

Una vez que hayas empezado a registrar las consultas lentas, puedes analizar los registros para identificar las consultas que están causando más problemas de rendimiento. Hay varias formas de analizar los registros de consultas lentas.

Una forma es utilizar una herramienta como el Panel de Rendimiento de Rails. El Panel de Rendimiento Rails proporciona una interfaz gráfica para ver y analizar los registros de consultas lentas.

Otra forma de analizar los registros de consultas lentas es utilizar un editor de texto o un programa de hojas de cálculo. Puedes utilizar un editor de texto o un programa de hojas de cálculo para ordenar y filtrar los registros de consultas lentas por duración, sentencia SQL o nombre de archivo.

Esto puede ayudarte a identificar las consultas que causan más problemas de rendimiento.

Cómo solucionar las consultas lentas

Una vez identificadas las consultas que causan más problemas de rendimiento, puedes tomar medidas para solucionarlas. Hay varias formas de arreglar las consultas lentas.

Una forma es optimizar la sentencia SQL. Puedes optimizar la sentencia SQL utilizando índices, añadiendo restricciones o utilizando métodos de consulta más eficientes.

Otra forma de solucionar consultas lentas es almacenar en caché los resultados de la consulta. Puedes cachear los resultados utilizando un cache store de Rails o mediante un caché de base de datos (por ejemplo, Redis, Memcached).

Implementar la paginación y dividir grandes conjuntos de resultados en páginas más pequeñas mejorará el rendimiento y reducirá el uso de memoria.

Además, considera la posibilidad de ejecutar trabajos en segundo plano y descargar las consultas de larga duración a trabajos en segundo plano (por ejemplo, utilizando Sidekiq, Resque) para evitar el bloqueo de las peticiones web.

Resumen

Las Notificaciones de Soporte Activo son un mecanismo incorporado en Rails para registrar las consultas lentas. Registrar las consultas lentas es una parte importante del ajuste del rendimiento de cualquier aplicación Rails. Al registrarlas, puedes identificar problemas de rendimiento en una fase temprana y tomar medidas para solucionarlos.

Puedes utilizar las Notificaciones de Soporte Activo para registrar las consultas lentas y analizar los registros para identificar las consultas que están causando más problemas de rendimiento. Una vez identificadas las consultas que causan más problemas de rendimiento, puedes tomar medidas para solucionarlas.

Si estás en un proyecto bien establecido y tienes capacidad para contar con desarrolladores junior en los equipos, este nivel de optimización del trabajo les guiará para establecer mejores prácticas al implicarse en el proceso. Y al implicar al equipo de supervisión y a los seniors, para construir una plataforma mejor y con mayor rendimiento. Dale tu proyecto de consulta lenta a un desarrollador junior, y se beneficiará enormemente de él.

No esperes a que exista el problema. Evita las consultas lentas antes de que te ralenticen. ¡Sé proactivo, no reactivo!

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.