Ottenere informazioni sul rendimento delle query
Questo documento descrive come utilizzare il grafico di esecuzione delle query per diagnosticare i problemi di prestazioni di queste ultime e per visualizzarne le informazioni sulle prestazioni.
BigQuery offre ottime prestazioni di query, ma è anche un sistema distribuito complesso con molti fattori interni ed esterni che possono influire sulla velocità delle query. La natura dichiarativa del linguaggio SQL può anche nascondere la complessità dell'esecuzione delle query. Ciò significa che quando le query vengono eseguite più lentamente del previsto o più lentamente rispetto alle esecuzioni precedenti, capire cosa è successo può essere complicato.
Il grafico di esecuzione delle query fornisce un'interfaccia intuitiva per ispezionare i dettagli sul rendimento delle query. In questo modo, puoi esaminare le informazioni sul piano di query in formato grafico per qualsiasi query, in esecuzione o completata.
Puoi anche utilizzare il grafico di esecuzione delle query per ottenere informazioni sul rendimento delle query. Gli insight sulle prestazioni offrono suggerimenti secondo il criterio del "best effort" per aiutarti a migliorare le prestazioni delle query. Poiché le prestazioni delle query sono sfaccettate, gli insight sulle prestazioni potrebbero fornire solo un quadro parziale delle prestazioni complessive delle query.
Autorizzazioni obbligatorie
Per utilizzare il grafico di esecuzione delle query, devi disporre delle seguenti autorizzazioni:
bigquery.jobs.get
bigquery.jobs.listAll
Queste autorizzazioni sono disponibili tramite i seguenti ruoli IAM (Identity and Access Management) predefiniti di BigQuery:
roles/bigquery.admin
roles/bigquery.resourceAdmin
roles/bigquery.resourceEditor
roles/bigquery.resourceViewer
Visualizzare gli approfondimenti sul rendimento delle query
Console
Per visualizzare gli approfondimenti sul rendimento delle query:
Apri la pagina BigQuery nella console Google Cloud.
In Editor, fai clic su Cronologia personale o Cronologia del progetto.
Nell'elenco dei job, identifica il job di query che ti interessa. Fai clic su
Azioni e scegli Apri query nell'editor.Seleziona la scheda Grafico di esecuzione per visualizzare una rappresentazione grafica di ogni fase della query:
Per determinare se una fase di query contiene approfondimenti sul rendimento, guarda l'icona visualizzata. Le fasi con un'icona di informazione
contengono informazioni sul rendimento. Le fasi con un'icona di controllo non sono incluse.Fai clic su una fase per aprire il riquadro dei dettagli della fase, in cui puoi visualizzare le seguenti informazioni:
- Visualizza le informazioni sul piano di query per la fase.
- I passaggi eseguiti nella fase.
- Eventuali approfondimenti sul rendimento applicabili.
(Facoltativo) Se stai esaminando una query in esecuzione, fai clic su
Sincronizza per aggiornare il grafico di esecuzione in modo che rifletta lo stato corrente della query.(Facoltativo) Per evidenziare le fasi principali in base alla durata sul grafico, fai clic su Evidenzia le fasi principali per durata.
(Facoltativo) Per evidenziare le fasi principali in base al tempo dello slot utilizzato sul grafico, fai clic su Evidenzia le fasi principali per elaborazione.
(Facoltativo) Per includere le fasi di ridistribuzione dello shuffling nel grafico, fai clic su Mostra le fasi di ridistribuzione dello shuffling.
Utilizza questa opzione per mostrare le fasi di ripartizione e unione nascoste nel grafico di esecuzione predefinito.
Le fasi di ripartizione e unione vengono introdotte durante l'esecuzione della query e vengono utilizzate per migliorare la distribuzione dei dati tra i worker che elaborano la query. Poiché queste fasi non sono correlate al testo della query, vengono nascoste per semplificare il piano di query visualizzato.
Per qualsiasi query con problemi di regressione del rendimento, le informazioni sul rendimento vengono visualizzate anche nella scheda Informazioni job per la query:
SQL
Nella console Google Cloud, vai alla pagina BigQuery.
Nell'editor di query, inserisci la seguente istruzione:
SELECT `bigquery-public-data`.persistent_udfs.job_url( project_id || ':us.' || job_id) AS job_url, query_info.performance_insights FROM `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS_BY_PROJECT WHERE DATE(creation_time) >= CURRENT_DATE - 30 -- scan 30 days of query history AND job_type = 'QUERY' AND state = 'DONE' AND error_result IS NULL AND statement_type != 'SCRIPT' AND EXISTS ( -- Only include queries which had performance insights SELECT 1 FROM UNNEST( query_info.performance_insights.stage_performance_standalone_insights ) WHERE slot_contention OR insufficient_shuffle_quota UNION ALL SELECT 1 FROM UNNEST( query_info.performance_insights.stage_performance_change_insights ) WHERE input_data_change.records_read_diff_percentage IS NOT NULL );
Fai clic su
Esegui.
Per ulteriori informazioni su come eseguire query, consulta Eseguire una query interattiva.
API
Puoi ottenere approfondimenti sul rendimento delle query in un formato non grafico chiamando il metodo dell'API jobs.list
e controllando le informazioni JobStatistics2
restituite.
Interpreta gli approfondimenti sul rendimento delle query
Utilizza questa sezione per scoprire di più sul significato delle informazioni sul rendimento e su come gestirle.
Gli insight sulle prestazioni sono destinati a due segmenti di pubblico:
Analisti: esegui query in un progetto. Ti interessa scoprire perché una query che hai eseguito in precedenza è inaspettatamente più lenta e ricevere suggerimenti su come migliorare il rendimento di una query. Disponi delle autorizzazioni descritte in Autorizzazioni richieste.
Amministratori di data lake o data warehouse: gestisci le risorse e le prenotazioni di BigQuery della tua organizzazione. Disponi delle autorizzazioni associate al ruolo Amministratore BigQuery.
Ognuna delle sezioni seguenti fornisce indicazioni su cosa puoi fare per risolvere un'informazione sul rendimento che ricevi, in base al ruolo che ricopri.
Contesa slot
Quando esegui una query, BigQuery tenta di suddividere il lavoro necessario per la query in attività. Un'attività è un singolo segmento di dati inserito e in uscita da una fase. Un singolo slot recupera un'attività ed esegue quella frazione di dati per la fase. Idealmente, gli slot BigQuery eseguono queste attività in parallelo per ottenere prestazioni elevate. La contesa degli slot si verifica quando la query ha molte attività pronte per essere eseguite, ma BigQuery non riesce a ottenere slot disponibili sufficienti per eseguirle.
Cosa fare se sei un analista
Riduci i dati che stai elaborando nella query seguendo le indicazioni riportate in Ridurre i dati elaborati nelle query.
Cosa fare se sei un amministratore
Aumenta la disponibilità degli slot o riduci il loro utilizzo adottando le seguenti azioni:
- Se utilizzi i prezzi on-demand di BigQuery, le query utilizzano un pool di slot condiviso. Valuta la possibilità di passare ai prezzi dell'analisi basati sulla capacità acquistando reservations. Le prenotazioni ti consentono di prenotare slot dedicati per le query della tua organizzazione.
Se utilizzi le prenotazioni BigQuery, assicurati che nella prenotazione assegnata al progetto che stava eseguendo la query siano disponibili slot sufficienti. La prenotazione potrebbe non avere slot sufficienti nei seguenti scenari:
- Esistono altri job che stanno utilizzando gli slot di prenotazione. Puoi utilizzare i grafici delle risorse amministratore per vedere in che modo la tua organizzazione utilizza la prenotazione.
- La prenotazione non dispone di slot assegnati sufficienti per eseguire le query abbastanza velocemente. Puoi utilizzare lo strumento di stima degli slot per ottenere una stima delle dimensioni delle prenotazioni necessarie per elaborare in modo efficiente le attività delle query.
Per risolvere il problema, puoi provare una delle seguenti soluzioni:
- Aggiungi altri slot (di riferimento o massimi per la prenotazione) alla prenotazione.
- Crea un'altra prenotazione e assegnala al progetto che esegue la query.
- Suddividi le query che richiedono molte risorse nel tempo all'interno di una prenotazione o in più prenotazioni.
Assicurati che le tabelle su cui esegui query siano in cluster. Il clustering contribuisce a garantire che BigQuery possa leggere rapidamente le colonne con dati correlati.
Assicurati che le tabelle su cui esegui query siano partizionate. Per le tabelle non partizionate, BigQuery legge l'intera tabella. Il partizionamento delle tabelle ti consente di eseguire query solo sul sottoinsieme di tabelle che ti interessa.
Quota di shuffling insufficiente
Prima di eseguire la query, BigQuery suddivide la logica della query in fasi. Gli slot di BigQuery eseguono le attività per ogni fase. Quando uno slot completa l'esecuzione delle attività di una fase, memorizza i risultati intermedi in shuffle. Le fasi successive della query leggono i dati dall'ordinamento casuale per continuare l'esecuzione della query. La quota di shuffling insufficiente si verifica quando i dati da scrivere per lo shuffling sono più numerosi della capacità di shuffling.
Cosa fare se sei un analista
Analogamente alla contesa degli slot, la riduzione della quantità di dati elaborati dalle query potrebbe ridurre l'utilizzo dello shuffling. Per farlo, segui le indicazioni riportate in Ridurre i dati elaborati nelle query.
Alcune operazioni in SQL tendono a utilizzare più ampiamente l'ordinamento casuale, in particolare le operazioni JOIN
e le clausole GROUP BY
.
Se possibile, ridurre la quantità di dati in queste operazioni potrebbe ridurre l'utilizzo della riproduzione casuale.
Cosa fare se sei un amministratore
Riduci la concorrenza per le quote di riproduzione casuale adottando le seguenti azioni:
- Analogamente alla contesa degli slot, se utilizzi i prezzi on demand di BigQuery, le query utilizzano un pool di slot condiviso. Valuta la possibilità di passare ai prezzi dell'analisi basati sulla capacità acquistando reservations. Le prenotazioni ti offrono slot dedicati e capacità di ordinamento per le query dei tuoi progetti.
Se utilizzi le prenotazioni di BigQuery, gli slot sono dotati di capacità di ordinamento casuale dedicata. Se la prenotazione esegue alcune query che fanno un uso intensivo dell'ordinamento casuale, altre query in esecuzione in parallelo potrebbero non avere sufficiente capacità di ordinamento casuale. Puoi identificare i job che utilizzano molto la capacità di mescolamento eseguendo una query sulla colonna
period_shuffle_ram_usage_ratio
nella visualizzazioneINFORMATION_SCHEMA.JOBS_TIMELINE
.Per risolvere il problema, puoi provare una o più delle seguenti soluzioni:
- Aggiungi altri slot alla prenotazione.
- Crea un'altra prenotazione e assegnala al progetto che esegue la query.
- Distribuisci le query che richiedono molto tempo, nel tempo all'interno di una prenotazione o in più prenotazioni.
Modifica della scala di input dei dati
La visualizzazione di questo insight sul rendimento indica che la query legge almeno il 50% di dati in più per una determinata tabella di input rispetto all'ultima esecuzione della query. Puoi utilizzare la cronologia delle modifiche della tabella per verificare se la dimensione di una delle tabelle utilizzate nella query è aumentata di recente.
Cosa fare se sei un analista
Riduci i dati che stai elaborando nella query seguendo le indicazioni riportate in Ridurre i dati elaborati nelle query.
Join con cardinalità elevata
Quando una query contiene un join con chiavi non univoche su entrambi i lati del join, le dimensioni della tabella di output possono essere notevolmente maggiori di quelle di una delle tabelle di input. Questo insight indica che il rapporto tra righe di output e righe di input è elevato e offre informazioni su questi conteggi di righe.
Cosa fare se sei un analista
Controlla le condizioni di join per verificare che l'aumento delle dimensioni della tabella di output sia previsto. Evita di utilizzare
join tra tabelle.
Se devi utilizzare un join croce, prova a utilizzare una clausola GROUP BY
per preaggregare i risultati o una funzione finestra. Per ulteriori informazioni, consulta la sezione Ridurre i dati prima di utilizzare un JOIN
.
Disallineamento partizione
Per fornire feedback o richiedere assistenza per questa funzionalità, invia un'email all'indirizzo
bq-query-inspector-feedback@google.com
.
La distribuzione distorta dei dati può causare un rallentamento delle query. Quando viene eseguita una query, BigQuery suddivide i dati in piccole partizioni. Non puoi condividere le partizioni tra gli slot. Pertanto, se i dati sono distribuiti in modo non uniforme, alcune parti diventano molto grandi, causando l'arresto anomalo dello slot che elabora la partizione di grandi dimensioni.
La distorsione si verifica in JOIN
fasi. Quando esegui un'operazione JOIN
,
BigQuery suddivide i dati sul lato destro e sinistro dell'operazione
JOIN
in partizioni. Se una partizione è troppo grande, i dati vengono riequilibrati dalle fasi di ripartizione. Se lo scostamento è troppo elevato e
BigQuery non può riequilibrare ulteriormente, un'informazione sullo scostamento della partizione viene
aggiunta alla fase "JOIN". Questo processo è noto come fasi di ripartizione. Se
BigQuery rileva partizioni di grandi dimensioni che non possono essere suddivise
ulteriormente, alla fase JOIN
viene aggiunto un'informazione sull'asimmetria delle partizioni.
Cosa fare se sei un analista
Per evitare disallineamenti delle partizioni, filtra i dati il prima possibile.
Interpreta le informazioni sulla fase di query
Oltre a utilizzare le informazioni sulle prestazioni delle query, puoi anche utilizzare le seguenti linee guida quando esamini i dettagli della fase della query per determinare se è presente un problema con una query:
- Se il valore Wait ms per uno o più passaggi è elevato rispetto alle esecuzioni precedenti della query:
- Verifica di avere un numero sufficiente di slot disponibile per soddisfare il tuo carico di lavoro. In caso contrario, esegui il bilanciamento del carico quando esegui query che richiedono molte risorse in modo che non siano in concorrenza tra loro.
- Se il valore Wait ms è superiore a quello registrato per una sola fase, esamina la fase precedente per verificare se è stato introdotto un collo di bottiglia. Ad esempio, modifiche sostanziali ai dati o allo schema delle tabelle coinvolte nella query potrebbero influire sulle prestazioni della query.
- Se il valore Byte di output della permutazione per una fase è elevato rispetto alle esecuzioni precedenti della query o rispetto a una fase precedente, valuta i passaggi elaborati in quella fase per verificare se creano quantità inaspettatamente elevate di dati. Una causa comune è quando un passaggio elabora un
INNER JOIN
in cui sono presenti chiavi duplicate su entrambi i lati della join. Ciò può restituire una quantità di dati inaspettatamente elevata. - Utilizza il grafico di esecuzione per esaminare le fasi principali in base alla durata e all'elaborazione. Valuta la quantità di dati che producono e se è commisurata alle dimensioni delle tabelle a cui si fa riferimento nella query. In caso contrario, esamina i passaggi di queste fasi per verificare se uno di questi potrebbe produrre una quantità inaspettata di dati intermedi.
Passaggi successivi
- Consulta le linee guida per l'ottimizzazione delle query per suggerimenti su come migliorare le prestazioni delle query.