Introduzione all'ottimizzazione delle prestazioni delle query

A volte, le query vengono eseguite più lentamente di quanto vorresti. In generale, le query che svolgono meno operazioni hanno un rendimento migliore. Vengono eseguiti più velocemente e consumano meno risorse, il che può comportare costi inferiori e errori. Questo documento fornisce una panoramica delle tecniche di ottimizzazione che possono migliorare le prestazioni delle query in BigQuery.

Prestazioni delle query

La valutazione delle prestazioni delle query in BigQuery comporta diversi fattori:

Per valutare se determinate query sono problematiche o se sono presenti conflitti delle risorse, puoi utilizzare Cloud Monitoring o i grafici delle risorse amministrative di BigQuery per monitorare il consumo di risorse nel tempo da parte dei job BigQuery. Se identifichi una query lenta o che richiede molte risorse, puoi concentrarti sulle ottimizzazioni delle prestazioni.

Alcuni pattern di query, in particolare quelli generati da strumenti di business intelligence, possono essere accelerati utilizzando BigQuery BI Engine. BI Engine è un servizio di analisi in memoria rapido che accelera molte query SQL in BigQuery memorizzando nella cache in modo intelligente i dati utilizzati più di frequente. BI Engine è integrato in BigQuery, perciò spesso puoi ottenere prestazioni migliori senza modificare le query.

Come con qualsiasi sistema, l'ottimizzazione delle prestazioni a volte comporta dei compromessi. Ad esempio, l'utilizzo della sintassi SQL avanzata a volte può introdurre complessità e ridurre la comprensibilità delle query per i non esperti di SQL. Dedicare del tempo alle micro-ottimizzazioni per carichi di lavoro non critici potrebbe anche distogliere le risorse dalla creazione di nuove funzionalità per le applicazioni o dall'esecuzione di ottimizzazioni di maggiore impatto. Pertanto, per ottenere il massimo ritorno sull'investimento possibile, ti consigliamo di concentrare le ottimizzazioni sui carichi di lavoro più importanti per le pipeline di analisi dei dati.

Capacità e contemporaneità

BigQuery offre due modelli di prezzi per le query: prezzi on demand e prezzi basati sulla capacità. Il modello on demand fornisce un pool condiviso di capacità e i prezzi si basano sulla quantità di dati elaborati da ogni query eseguita.

Il modello basato sulla capacità è consigliato se vuoi definire il budget di una spesa mensile coerente o se hai bisogno di più capacità rispetto a quella disponibile con il modello on demand. Quando utilizzi i prezzi basati sulla capacità, assegni una capacità di elaborazione delle query dedicata misurata in slot. Il costo di tutti i byte elaborati è incluso nel prezzo basato sulla capacità. Oltre agli impegni di slot fissi, puoi utilizzare gli slot a scalabilità automatica, che forniscono capacità dinamica in base al carico di lavoro delle query.

Durante l'elaborazione delle query SQL, BigQuery suddivide la capacità di calcolo necessaria per eseguire ogni fase di una query in slot. BigQuery determina automaticamente il numero di query che possono essere eseguite contemporaneamente, come segue:

  • Modello on demand: numero di slot disponibili nel progetto
  • Modello basato sulla capacità: numero di slot disponibili nella prenotazione

Le query che richiedono più slot di quelli disponibili vengono in coda finché le risorse di elaborazione non diventano disponibili. Dopo l'avvio dell'esecuzione di una query, BigQuery calcola il numero di slot utilizzati da ogni fase della query in base alle dimensioni e alla complessità della fase e al numero di slot disponibili. BigQuery utilizza una tecnica chiamata pianificazione equa per garantire che ogni query abbia una capacità sufficiente per l'avanzamento.

L'accesso a più slot non sempre comporta prestazioni più veloci per una query. Tuttavia, un pool di slot più ampio può migliorare le prestazioni di query grandi o complesse, nonché le prestazioni dei carichi di lavoro altamente simultanei. Per migliorare le prestazioni delle query, puoi modificare le prenotazioni di slot o impostare un limite più elevato per la scalabilità automatica degli slot.

Piano di query e sequenza temporale

BigQuery genera un piano di query ogni volta che esegui una query. Comprendere questo piano è fondamentale per un'efficace ottimizzazione delle query. Il piano di query include statistiche di esecuzione come i byte letti e il tempo di slot consumati. Il piano di query include anche dettagli sulle diverse fasi di esecuzione, che possono aiutarti a diagnosticare e migliorare le prestazioni delle query. Il grafico di esecuzione delle query fornisce un'interfaccia grafica per visualizzare il piano di query e diagnosticare i problemi di prestazioni delle query.

Puoi anche utilizzare il metodo API jobs.get o la vista INFORMATION_SCHEMA.JOBS per recuperare le informazioni sul piano di query e sulla sequenza temporale. Queste informazioni vengono utilizzate dal visualizzatore BigQuery, uno strumento open source che rappresenta visivamente il flusso delle fasi di esecuzione in un job BigQuery.

Quando BigQuery esegue un job di query, converte l'istruzione SQL dichiarativa in un grafico di esecuzione. Questo grafico è suddiviso in una serie di fasi della query, a loro volta composte da insiemi più granulari di passaggi di esecuzione. Per eseguire queste query BigQuery usa un'architettura parallela molto distribuita. Le fasi di BigQuery modellano le unità di lavoro che molti potenziali worker potrebbero eseguire in parallelo. Le fasi comunicano tra loro tramite un'architettura di shuffle distribuita e veloce.

Piano di esecuzione delle query.

Oltre al piano di query, i job di query espongono anche una cronologia di esecuzione. Questa sequenza temporale fornisce una contabilità delle unità di lavoro completate, in attesa e attive all'interno dei worker delle query. Una query può avere più fasi con worker attivi contemporaneamente, quindi la sequenza temporale ha lo scopo di mostrare l'avanzamento complessivo della query.

Statistiche Timeline.

Per stimare il costo di una query dal punto di vista del calcolo, puoi osservare il numero totale di secondi di slot utilizzati dalla query. Più basso è il numero di secondi di slot, meglio è, perché significa che sono disponibili più risorse per altre query in esecuzione nello stesso progetto contemporaneamente.

Le statistiche relative al piano di query e alla cronologia possono aiutarti a capire in che modo BigQuery esegue le query e se determinate fasi dominano l'utilizzo delle risorse. Ad esempio, una fase JOIN che genera molte più righe di output rispetto a quelle di input potrebbe indicare un'opportunità di filtrare prima nella query. Tuttavia, la natura gestita del servizio limita la possibilità che alcuni dettagli possano essere utilizzati direttamente. Per best practice e tecniche per migliorare l'esecuzione e le prestazioni delle query, consulta Ottimizzare il calcolo delle query.

Passaggi successivi