Introduzione all'ottimizzazione delle prestazioni delle query

A volte, le query vengono eseguite più lentamente di quanto vorresti. In generale, le query che fanno meno lavoro funzionano meglio. Sono più veloci e consumano meno risorse, il che può comportare costi inferiori e errori. Questo documento offre 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 coinvolge diversi fattori:

Per valutare se query specifiche sono problematiche o se stai riscontrando un conflitto di risorse, puoi utilizzare Cloud Monitoring o i grafici delle risorse amministrative di BigQuery per monitorare il modo in cui i job BigQuery consumano risorse nel tempo. Se identifica una query lenta o che richiede un uso intensivo di risorse, puoi concentrare le ottimizzazioni delle prestazioni su quella query.

Alcuni modelli di query, in particolare quelli generati dagli 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 mediante la memorizzazione intelligente nella cache dei dati che utilizzi più di frequente. BI Engine è integrato in BigQuery, il che significa che spesso è possibile migliorare le prestazioni senza apportare modifiche alle query.

Come con qualsiasi sistema, l'ottimizzazione per il rendimento 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 chi non è esperto di SQL. Dedicare tempo alle micro-ottimizzazioni per i carichi di lavoro non critici potrebbe anche allontanare le risorse dalla creazione di nuove funzionalità per le applicazioni o dall'ottimizzazione di maggiore impatto. Pertanto, per aiutarti a 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 determinazione dei prezzi per le query: prezzi on demand e prezzi basati sulla capacità. Il modello on demand fornisce un pool di capacità condiviso e i prezzi si basano sulla quantità di dati elaborati da ogni query eseguita.

Il modello basato sulla capacità è consigliato se vuoi pianificare una spesa mensile coerente o se hai bisogno di più capacità di 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 slot con 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 rispetto a quelli disponibili vengono in coda fino a quando le risorse di elaborazione non diventano disponibili. Una volta avviata l'esecuzione di una query, BigQuery calcola il numero di slot utilizzati da ogni fase di query in base alle dimensioni e alla complessità dello stage e al numero di slot disponibili. BigQuery utilizza una tecnica chiamata pianificazione equo per garantire che ogni query abbia una capacità sufficiente per l'avanzamento.

L'accesso a più slot non comporta sempre un miglioramento delle prestazioni per una query. Tuttavia, un pool più ampio di slot può migliorare le prestazioni di query di grandi dimensioni o complesse, nonché le prestazioni di carichi di lavoro altamente simultanei. Per migliorare le prestazioni delle query, puoi modificare le prenotazioni di slot o impostare un limite più alto 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 ottimizzare le query in modo efficace. Il piano di query include statistiche di esecuzione come i byte letti e il tempo di slot consumato. 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 la visualizzazione del piano di query e la diagnosi dei 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 da BigQuery Visualiser, 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 di query, a loro volta composte da insiemi più granulari di passaggi di esecuzione. BigQuery utilizza un'architettura parallela molto distribuita per eseguire queste query. 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 rapida e distribuita.

Piano di esecuzione della query.

Oltre al piano di query, i job di query espongono anche una sequenza temporale di esecuzione. Questa sequenza temporale fornisce un resoconto delle unità di lavoro completate, in attesa e attive all'interno dei worker di 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 calcolo di una query, puoi guardare il numero totale di slot in secondi consumati dalla query. Minore è il numero di secondi di slot, meglio è, in quanto significa che sono disponibili più risorse per altre query in esecuzione contemporaneamente nello stesso progetto.

Le statistiche relative al piano di query e alla sequenza temporale 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 alle righe di input potrebbe indicare un'opportunità di filtrare in precedenza nella query. Tuttavia, la natura gestita del servizio limita la possibilità che alcuni dettagli siano utilizzabili direttamente. Per le best practice e le tecniche per migliorare l'esecuzione e le prestazioni delle query, consulta Ottimizzare il calcolo delle query.

Passaggi successivi