Introduzione all'ottimizzazione delle prestazioni delle query

Questo documento fornisce una panoramica delle tecniche di ottimizzazione che possono migliorare le prestazioni delle query in BigQuery. In generale, le query che eseguono meno lavoro hanno prestazioni migliori. Vengono eseguite più velocemente e consumano meno risorse, il che può comportare costi inferiori e meno errori.

Prestazioni delle query

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

Per valutare query specifiche o se si verifica una contesa 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. Puoi anche utilizzare Gemini Cloud Assist per analizzare i job. Se identifichi una query lenta o che richiede molte risorse, puoi concentrare le ottimizzazioni delle prestazioni su quella query.

Alcuni pattern 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 memorizzando nella cache in modo intelligente i dati che utilizzi più spesso. BI Engine è integrato in BigQuery, il che significa che spesso puoi ottenere prestazioni migliori senza apportare modifiche alle query.

Come per qualsiasi sistema, l'ottimizzazione delle prestazioni a volte comporta compromessi. Ad esempio, l'utilizzo della sintassi SQL avanzata a volte può introdurre complessità e ridurre la comprensibilità delle query per le persone che non sono esperte di SQL. Inoltre, dedicare tempo alle micro-ottimizzazioni per i workload non critici potrebbe distogliere le risorse dalla creazione di nuove funzionalità per le applicazioni o dall'identificazione di ottimizzazioni più importanti. Per aiutarti a ottenere il massimo ritorno sull'investimento possibile, ti consigliamo di concentrare le ottimizzazioni sui workload più importanti per le pipeline di analisi dei dati.

Ottimizzazione per capacità e concorrenza

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 prevedere una spesa mensile costante o se hai bisogno di una capacità maggiore di quella disponibile con il modello on demand. Quando utilizzi i prezzi basati sulla capacità, allochi 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 imेंडिग्नि di slot fissi slot commitments, puoi utilizzare gli slot con scalabilità automatica, che forniscono capacità dinamica in base al workload delle query.

Le prestazioni delle query eseguite ripetutamente sugli stessi dati possono variare e la variazione è in genere maggiore per le query che utilizzano slot on demand rispetto a quelle che utilizzano le prenotazioni di slot.

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 nel seguente modo:

  • 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 messe in coda finché non diventano disponibili risorse di elaborazione. 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 procedere.

L'accesso a più slot non sempre comporta prestazioni più veloci per una query. Tuttavia, un pool di slot più grande può migliorare le prestazioni delle query di grandi dimensioni o complesse e le prestazioni dei workload con concorrenza elevata. Quando aumenti la capacità modificando le prenotazioni di slot o i limiti di scalabilità automatica, lo scheduler di BigQuery potrebbe allocare più slot alle singole query per massimizzare il parallelismo e ridurre la latenza. Poiché più slot eseguono il lavoro contemporaneamente, potrebbe aumentare anche il tempo totale degli slot (total_slot_ms) consumato dalle query. Questo rappresenta un compromesso previsto tra costi e prestazioni: le query vengono eseguite più velocemente, ma consumano più tempo degli slot.

Per migliorare le prestazioni delle query, puoi modificare le prenotazioni di slot o impostare un limite più alto per la scalabilità automatica degli slot. Puoi anche utilizzare Gemini Cloud Assist per gestire le prenotazioni e la capacità con prompt in linguaggio naturale.

Piano di query e grafico di esecuzione

BigQuery genera un piano di query ogni volta che esegui una query. La comprensione di questo piano è fondamentale per un'ottimizzazione efficace delle query. Il piano di query include statistiche di esecuzione come i byte letti e il tempo degli 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 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 il piano di query e le informazioni sulla cronologia. Queste informazioni vengono utilizzate da BigQuery Visualizer, 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, che a loro volta sono composte da insiemi più granulari di passaggi di esecuzione. BigQuery utilizza un'architettura parallela altamente distribuita per eseguire queste query. Le fasi di BigQuery modellano le unità di lavoro che molti worker potenziali potrebbero eseguire in parallelo. Le fasi comunicano tra loro tramite un' architettura di shuffle distribuita e veloce.

Per stimare il costo computazionale di una query, puoi esaminare il numero totale di secondi degli slot consumati dalla query. Minore è il numero di secondi degli slot, meglio è, perché significa che sono disponibili più risorse per altre query in esecuzione nello stesso progetto contemporaneamente.

Il grafico di esecuzione delle query può aiutarti a capire come BigQuery esegue le query e se alcune 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 l'opportunità di filtrare prima nella query. Tuttavia, la natura gestita del servizio limita la possibilità di intervenire direttamente su alcuni dettagli. Per le best practice e le tecniche per migliorare l'esecuzione e le prestazioni delle query, consulta Ottimizzare il calcolo delle query.

Passaggi successivi