L’analisi di un log delle query lente è una parte importante della messa a punto delle prestazioni di qualsiasi applicazione Rails. Rails fornisce un meccanismo integrato per la registrazione delle query lente chiamato Active Support Notifications.

Questo articolo vi mostrerà come utilizzare Active Support Notifications per registrare le query lente nella vostra applicazione Rails. Vi forniremo anche dei suggerimenti su come analizzare i log delle query lente per identificare e risolvere i problemi di prestazioni.

Che cos’è una query lenta?

Una query lenta è una query che impiega più tempo di una certa soglia per essere eseguita. La soglia per definire una query lenta può variare a seconda dell’applicazione e dei suoi requisiti di performance. Tuttavia, una buona regola è quella di considerare lenta qualsiasi query che richieda più di 100 millisecondi.

Perché è importante avere un log delle query lente?

Ci sono molti motivi per cui è importante avere a disposizione un log delle query lente.

In primo luogo, le query lente possono essere un segno di problemi di prestazioni alla base dell’applicazione. Registrando le query lente, potrete identificare questi problemi in anticipo e prendere provvedimenti per risolverli. Prevenire è meglio che curare.

In secondo luogo, le query lente possono aiutarvi a identificare potenziali vulnerabilità di sicurezza nell’applicazione. Ad esempio, una query lenta causata da un attacco di SQL injection dannoso può essere utilizzata per identificare la vulnerabilità e adottare misure per mitigarla.

In terzo luogo, le query lente possono aiutarvi a migliorare le prestazioni dell’applicazione.

Analizzando i log delle query lente, potrete identificare le query che causano maggiori problemi di prestazioni e prendere provvedimenti per ottimizzarle. Possiamo registrare gli eventi di query lente nella nostra applicazione utilizzando le Active Support Notifications.

Cosa sono le Active Support Notifications?

Le Active Support Notifications, o notifiche di supporto attivo, sono uno strumento essenziale per ogni sviluppatore Rails che voglia approfondire le prestazioni e il comportamento della propria applicazione. Permettono di tenere traccia di eventi specifici che si verificano all’interno del codice e di raccogliere dati preziosi sulla loro esecuzione.

Comprendendo le loro funzionalità e sfruttandole in modo efficace, potrete migliorare in modo significativo le prestazioni, la manutenibilità e la salute generale dell’applicazione Rails.

Ecco una panoramica delle notifiche di supporto attivo e dei loro vantaggi principali.

Funzionalità

  • Strumentazione: potrete strumentare eventi specifici nell’applicazione Rails utilizzando il metodo ActiveSupport::Notifications.instrument. Questo metodo accetta un nome, un payload (dati opzionali) e un blocco di codice da eseguire.
  • Payload: il payload, o carico utile, permette di passare dati aggiuntivi relativi all’evento da strumentare. Può includere elementi come timestamp, ID utente, dettagli della query del database o qualsiasi altra informazione rilevante.
  • Subscriber: dopo l’esecuzione del blocco, Active Support invia una notifica con il nome e il payload ai subscriber registrati. Questi ultimi possono elaborare le informazioni e intraprendere azioni specifiche in base all’evento.

Vantaggi

  • Monitoraggio delle prestazioni: strumentando gli eventi chiave, potrete monitorare il loro tempo di esecuzione e identificare i colli di bottiglia delle prestazioni dell’applicazione. Ciò permette di ottimizzare il codice e migliorare le prestazioni complessive dell’applicazione Rails.
  • Debug: le notifiche possono fornire preziose informazioni sul flusso dell’applicazione e aiutarvi a diagnosticare i problemi. I dati del payload possono rivelare comportamenti inaspettati o errori in fase di esecuzione.
  • Strumentazione personalizzata: potrete estendere le funzionalità delle notifiche di Active Support creando strumenti e subscriber personalizzati. Ciò permette di tenere traccia di eventi specifici che riguardano le esigenze specifiche dell’applicazione.
  • Integrazione con altre librerie: molte librerie Rails popolari, come Action Cable e ActiveJob, sfruttano Active Support Notifications per fornire dati sulle prestazioni e funzionalità di tracciamento degli eventi.

Come registrare le query lente con Active Support Notifications

Active Support Notifications è un meccanismo integrato di Rails per registrare gli eventi che si verificano nell’applicazione. Per utilizzare Active Support Notifications per creare un log delle query lente, il codice di esempio qui sotto dovrebbe essere inserito in un inizializzatore (ad esempio, config/initializers/error_notifications.rb) per assicurarsi che venga eseguito all’avvio dell’applicazione. In alternativa, aggiungete il codice a un controller o a un modello specifico per un log mirato.

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

Questo codice registrerà tutte le query SQL che richiedono più di 100 millisecondi per essere eseguite.

Le informazioni registrate includono l’istruzione SQL, la durata della query, il nome del file e il numero di riga in cui la query è stata eseguita.

Come analizzare i log delle query lente

Dopo aver iniziato a registrare le query lente, potrete analizzare i log per identificare le query che causano maggiori problemi di prestazioni. Esistono diversi modi per analizzare i log delle query lente.

Un modo è quello di utilizzare uno strumento come Rails Performance Dashboard. Rails Performance Dashboard fornisce un’interfaccia grafica per visualizzare e analizzare i log delle query lente.

Un altro modo per analizzare i log delle query lente è utilizzare un editor di testo o un foglio di calcolo. Potete usare un editor di testo o un foglio di calcolo per ordinare e filtrare i log delle query lente in base alla durata, all’istruzione SQL o al nome del file.

Questo può aiutarvi a identificare le query che causano i maggiori problemi di prestazioni.

Come risolvere le query lente

Una volta identificate le query che causano maggiori problemi di prestazioni, potrete intervenire per risolverle. Esistono diversi modi per risolvere le query lente.

Un modo è quello di ottimizzare l’istruzione SQL. Potete ottimizzare l’istruzione SQL utilizzando indici, aggiungendo vincoli o utilizzando metodi di query più efficienti.

Un altro modo per risolvere le query lente è mettere in cache i risultati della query. Potete mettere in cache i risultati della query utilizzando un archivio cache di Rails o una cache di database (ad esempio Redis, Memcached).

Implementare la paginazione e suddividere i risultati di grandi dimensioni in pagine più piccole migliorerà le prestazioni e ridurrà l’utilizzo della memoria.

Inoltre, prendete in considerazione l’uso di background job e di affidare le query di lunga durata a dei background job (ad esempio, utilizzando Sidekiq, Resque) per evitare di bloccare le richieste web.

Riepilogo

Le notifiche di Active Support sono un meccanismo integrato di Rails per registrare le query lente. La registrazione delle query lente è una parte importante della messa a punto delle prestazioni di qualsiasi applicazione Rails. Registrandole, potrete identificare tempestivamente i problemi di prestazioni e prendere provvedimenti per risolverli.

Potete utilizzare Active Support Notifications per registrare le query lente e analizzare i log per identificare le query che causano maggiori problemi di prestazioni. Una volta identificate le query che causano il maggior numero di problemi di prestazioni, potrete intervenire per risolverli.

Se state lavorando a un progetto consolidato e avete la possibilità di avere sviluppatori junior nei team, questo livello di ottimizzazione del lavoro li porterà a utilizzare pratiche migliori, essendo coinvolti direttamente nel processo. E coinvolgendo il team di monitoraggio e i senior, costruirete una piattaforma migliore e performante. Affidate la gestione delle query lente a uno sviluppatore junior: ne trarrà enormi benefici.

Non aspettate di avere questo problema: prevenite le query lente prima che vi rallentino. Siate proattivi, non reattivi!

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.