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 un rendimento migliore. 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:
- Dati di input e origini dati (I/O): quanti byte vengono letti dalla query?
- Comunicazione tra nodi (shuffling): quanti byte vengono passati dalla query alla fase successiva? Quanti byte vengono passati dalla query a ogni slot?
- Calcolo: quanta CPU richiede la query?
- Output (materializzazione): quanti byte vengono scritti dalla query?
- Capacità e concorrenza: quanti slot sono disponibili e quante altre query sono in esecuzione contemporaneamente?
- Pattern di query: le query seguono le best practice SQL?
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 consumo di risorse dei job BigQuery 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-memory 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 esperti di SQL. Inoltre, dedicare tempo alle micro-ottimizzazioni per i carichi di lavoro 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 carichi di lavoro più importanti per le pipeline di analisi dei dati.
Ottimizzazione per 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 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 impegni di slot fissi, puoi utilizzare gli slot a scalabilità automatica, che forniscono capacità dinamica in base al carico di lavoro delle query.
Il rendimento delle query eseguite ripetutamente sugli stessi dati può variare e la variazione è generalmente 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 richiesta 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 fino a quando non saranno disponibili risorse di elaborazione. Dopo l'inizio 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 un numero maggiore di slot non sempre comporta prestazioni più veloci per una query. Tuttavia, un pool di slot più grande può migliorare il rendimento delle query di grandi dimensioni o complesse e il rendimento dei carichi di lavoro con un'elevata contemporaneità. Per migliorare il rendimento 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 di slot consumato. Il piano di query include anche dettagli sulle diverse fasi di esecuzione, che possono aiutarti a diagnosticare e migliorare il rendimento delle query. Il grafico di esecuzione delle query fornisce un'interfaccia grafica per visualizzare il piano di query e diagnosticare i problemi di rendimento delle query.
Puoi anche utilizzare il jobs.get metodo API
o la vista INFORMATION_SCHEMA.JOBS
per recuperare il piano di query e le informazioni sulla sequenza temporale. 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. Il modello di fasi di BigQuery modella le unità di lavoro che molti worker potenziali potrebbero eseguire in parallelo. Le fasi comunicano tra loro tramite un'architettura di shuffling distribuita e veloce.
Per stimare il costo di calcolo di una query, puoi esaminare il numero totale di secondi di slot consumati dalla query. Minore è il numero di secondi di 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 il rendimento delle query, consulta
Ottimizzare il calcolo delle query.
Passaggi successivi
- Scopri come risolvere i problemi di esecuzione delle query utilizzando i log di audit di BigQuery.
- Scopri altre tecniche di controllo dei costi per BigQuery.
- Visualizza i metadati quasi in tempo reale sui job BigQuery utilizzando
la
INFORMATION_SCHEMA.JOBSvista. - Scopri come monitorare l'utilizzo di BigQuery utilizzando i report delle tabelle di sistema di BigQuery.