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 funzionano meno o migliorare il rendimento. Eseguono i processi 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 coinvolge diversi fattori:
- Dati di input e origini dati (I/O): Quanti byte vengono letti dalla query?
- Comunicazione tra nodi (shuffling): Quanti byte passa la query alla fase successiva? Quanti byte ha il tuo a ogni slot?
- Calcolo: Quanta CPU richiede la tua query?
- Output (materializzazione): quanti byte vengono scritti dalla query?
- Capacità e contemporaneità: Quanti slot sono disponibili e quante altre query sono in esecuzione contemporaneamente?
- Pattern di query: Le tue query seguono le best practice di SQL?
Per valutare query specifiche o verificare se si verifica una contesa delle risorse, puoi utilizzare Cloud Monitoring o i grafici delle risorse amministrative di BigQuery per monitorare il consumo di risorse da parte dei job BigQuery nel tempo. Se identifichi una query lenta o che richiede molte risorse, puoi ottimizzare le prestazioni su questa query.
Alcuni pattern di query, in particolare quelli generati dagli strumenti di business intelligence, può essere accelerata utilizzando BigQuery BI Engine. BI Engine è un servizio di analisi in-memory rapido che accelera molte query SQL in BigQuery memorizzando in modo intelligente nella cache i dati che utilizzi più di frequente. BI Engine è integrato in BigQuery, il che significa che spesso puoi ottenere un rendimento migliore senza alcuna modifica alle query.
Come per 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 il numero di query la comprensibilità anche per chi non è esperto di SQL. Dedicare tempo a micro-ottimizzazioni per carichi di lavoro non critici potrebbe anche distogliere le risorse dalla creazione di nuove funzionalità per le tue applicazioni o dall'identificazione di ottimizzazioni più importanti. Per aiutarti a ottenere il più alto ritorno possibile sull'investimento, ti consigliamo di concentrare le ottimizzazioni sui carichi di lavoro più importanti per le pipeline di analisi dei dati.
Ottimizzazione di capacità e contemporaneità
BigQuery offre due modelli di prezzi per le query: i prezzi on demand e in base alla capacità i prezzi. Il modello on demand offre un pool condiviso di capacità e i prezzi in base alla quantità di dati elaborati da ogni query che esegui.
Il modello basato sulla capacità è consigliata se vuoi definire un budget con una spesa mensile costante 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 con scalabilità automatica, che forniscono capacità dinamica basata sul carico di lavoro delle query.
Le prestazioni delle query eseguite ripetutamente sugli stessi dati possono variare e la variazione è generalmente maggiore per le query che utilizzano slot on demand rispetto ma per le query che usano 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 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 quelle disponibili vengono in coda finché le risorse di elaborazione non diventano disponibili. 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 assicurarti che ogni query abbia una capacità sufficiente per l'avanzamento.
L'accesso a più slot non comporta sempre un aumento delle prestazioni di una query. Tuttavia, un pool di slot più grande può migliorare le prestazioni di query di grandi dimensioni o complesse e di carichi di lavoro ad alta contemporaneità. Per migliorare il rendimento delle query, puoi modificare le prenotazioni degli 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 dello slot impiegato. Il piano di query include anche i dettagli sulle diverse fasi di esecuzione, che possono aiutarti a diagnosticare e migliorare le prestazioni delle query. Il grafico di esecuzione della query Fornisce un'interfaccia grafica per visualizzare il piano di query e diagnosticare i problemi di prestazioni delle query.
Puoi anche utilizzare il metodo dell'API jobs.get
o la visualizzazione INFORMATION_SCHEMA.JOBS
per recuperare il piano di query e le informazioni sulle tempistiche. Queste informazioni vengono utilizzate
Visualizzatore BigQuery,
è uno strumento open source che rappresenta visivamente il flusso delle fasi di esecuzione in
del job BigQuery.
Quando BigQuery esegue un job di query, converte il testo un'istruzione SQL in un grafico di esecuzione. Questo grafico è suddiviso in una serie di fasi della query, che a loro volta sono composte da insiemi più granulari passaggi di esecuzione. BigQuery utilizza un'architettura parallela fortemente distribuita per eseguire queste query. Le fasi di BigQuery modellano unità di lavoro che che molti potenziali worker potrebbero essere eseguiti in parallelo. Le fasi comunicano con uno tramite un un'architettura di shuffle veloce e distribuita.
Oltre al piano di query, i job di query espongono anche una cronologia di esecuzione. Questa sequenza temporale fornisce un conteggio delle unità di lavoro completate, in attesa e attive all'interno dei worker di query. Una query può avere più fasi con stato lavoratori contemporaneamente, quindi la sequenza temporale ha lo scopo di mostrare l'avanzamento complessivo la query.
Per stimare il costo computazionale di una query, puoi esaminare il numero totale di secondi di slot consumati dalla query. Minore è il numero di slot secondi, meglio è, perché significa che sono disponibili più risorse 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 la risorsa
all'utilizzo delle risorse. Ad esempio, una fase JOIN
che genera molte più righe di output di
righe di input potrebbero indicare un'opportunità di filtrare in precedenza 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 controllo di BigQuery.
- Scopri altre tecniche di controllo dei costi per BigQuery.
- Visualizza i metadati quasi in tempo reale sui job BigQuery utilizzando
la vista
INFORMATION_SHEMA.JOBS
. - Scopri come monitorare l'utilizzo di BigQuery con Report delle tabelle di sistema BigQuery.