Ottieni insight sulle prestazioni delle query

Questo documento descrive come utilizzare il grafico di esecuzione delle query per diagnosticare i problemi di prestazioni delle query e per visualizzarne le informazioni sulle prestazioni.

BigQuery offre prestazioni elevate delle 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 rispetto alle esecuzioni precedenti, comprendere ciò che è successo può essere difficile.

Il grafico di esecuzione delle query fornisce un'interfaccia intuitiva per l'ispezione dei dettagli delle prestazioni delle query. Utilizzandolo, 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 insight sulle prestazioni per le 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 della query, devi disporre delle seguenti autorizzazioni:

  • bigquery.jobs.get
  • bigquery.jobs.listAll

Queste autorizzazioni sono disponibili tramite i seguenti ruoli BigQuery predefiniti di Identity and Access Management (IAM):

  • roles/bigquery.admin
  • roles/bigquery.resourceAdmin
  • roles/bigquery.resourceEditor
  • roles/bigquery.resourceViewer

Visualizza insight sulle prestazioni delle query

Console

Segui questi passaggi per visualizzare le informazioni sulle prestazioni delle query:

  1. Apri la pagina BigQuery nella console Google Cloud.

    Vai alla pagina BigQuery

  2. Nell'Editor, fai clic su Cronologia personale o Cronologia progetti.

  3. Nell'elenco dei job, identifica il job di query che ti interessa. Fai clic su Azioni e scegli Apri query nell'editor.

  4. Seleziona la scheda Grafico di esecuzione per visualizzare una rappresentazione grafica di ogni fase della query:

    Il piano di query grafica nel grafico di esecuzione.

    Per determinare se una fase di query contiene insight sulle prestazioni, guarda l'icona che viene visualizzata. Le fasi con un'icona di informazioni presentano informazioni sulle prestazioni. Per le fasi che hanno un'icona di spunta .

  5. Fai clic su una fase per aprire il relativo riquadro dei dettagli, dove potrai visualizzare le seguenti informazioni:

    Dettagli fase della query.

  6. (Facoltativo) Se stai esaminando una query in esecuzione, fai clic su Sincronizza per aggiornare il grafico di esecuzione in modo che rifletta lo stato attuale della query.

    Sincronizza il grafico con una query in esecuzione.

  7. (Facoltativo) Per evidenziare le fasi principali per durata nel grafico, fai clic su Evidenzia le fasi principali per durata.

    Mostra le fasi principali per durata.

  8. (Facoltativo) Per evidenziare le fasi principali per tempo di slot utilizzato nel grafico, fai clic su Evidenzia le fasi principali per elaborazione.

    Mostra le fasi principali per elaborazione.

  9. (Facoltativo) Per includere le fasi di ridistribuzione dello shuffling nel grafico, fai clic su Mostra fasi di ridistribuzione dello shuffling.

    Mostra le fasi principali per elaborazione.

    Utilizza questa opzione per mostrare le fasi di partizionamento e fusione nascoste nel grafico di esecuzione predefinito.

    Le fasi di ripartizionamento e coalesce vengono introdotte mentre la query è in esecuzione 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 delle prestazioni, gli insight sulle prestazioni vengono visualizzati anche nella scheda Informazioni sul job per la query:

La scheda Informazioni sul job.

SQL

  1. Nella console Google Cloud, vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nell'Editor 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-us`.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
      );
    

  3. Fai clic su Esegui.

Per saperne di più su come eseguire le query, consulta Eseguire una query interattiva.

API

Per ottenere insight sulle prestazioni delle query in un formato non grafico, chiama il metodo API jobs.list e ispeziona le informazioni JobStatistics2 restituite.

Interpretare le informazioni sulle prestazioni delle query

Utilizza questa sezione per scoprire di più sul significato degli approfondimenti sul rendimento e su come gestirli.

Le informazioni sul rendimento sono destinate a due segmenti di pubblico:

  • Analisti: esegui le query in un progetto. Vuoi scoprire perché una query che hai eseguito in precedenza è inaspettatamente più lenta e ricevere suggerimenti su come migliorare le prestazioni di una query. Disponi delle autorizzazioni descritte in Autorizzazioni richieste.

  • Amministratori di data lake o data warehouse: gestisci le risorse e le prenotazioni BigQuery della tua organizzazione. Disponi delle autorizzazioni associate al ruolo Amministratore BigQuery.

Ognuna delle seguenti sezioni fornisce indicazioni su cosa puoi fare per gestire le informazioni sul rendimento che ricevi in base ai ruoli che ricopri.

Contesa slot

Quando esegui una query, BigQuery tenta di suddividere il lavoro necessario dalla query in attività. Un'attività è una singola fetta di dati che viene inserita e in uscita da una fase. Un singolo slot acquisisce un'attività ed esegue quella porzione 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 molte attività sono pronte per l'avvio dell'esecuzione della query, ma BigQuery non riesce ad avere un numero sufficiente di slot disponibili per eseguirle.

Che cosa fare se sei un analista

Riduci i dati che stai elaborando nella tua query seguendo le indicazioni riportate nella sezione Ridurre i dati elaborati nelle query.

Che cosa fare se sei un amministratore

Aumenta la disponibilità degli slot o riduci l'utilizzo degli slot intraprendendo le seguenti azioni:

  • Se utilizzi i prezzi on demand di BigQuery, le query utilizzano un pool condiviso di slot. Valuta la possibilità di passare ai prezzi dell'analisi basata sulla capacità acquistando prenotazioni. Le prenotazioni ti consentono di prenotare slot dedicati per le query della tua organizzazione.
  • Se utilizzi prenotazioni BigQuery, assicurati che ci sia un numero sufficiente di slot nella prenotazione assegnata al progetto che eseguiva la query. La prenotazione potrebbe non avere un numero sufficiente di slot in questi scenari:

    • Esistono altri job che utilizzano slot di prenotazione. Puoi utilizzare i grafici delle risorse di amministrazione per vedere in che modo la tua organizzazione utilizza la prenotazione.
    • La prenotazione non dispone di un numero sufficiente di slot assegnati per eseguire le query abbastanza rapidamente. Puoi utilizzare lo strumento per la stima degli slot per avere una stima delle dimensioni delle prenotazioni per elaborare in modo efficiente le attività delle query.

    Per risolvere il problema, puoi provare una delle seguenti soluzioni:

    • Aggiungi altri slot alla prenotazione.
    • Crea una prenotazione aggiuntiva e assegnala al progetto che esegue la query.
    • Distribuisci query che richiedono molte risorse, nel tempo all'interno di una prenotazione o in prenotazioni diverse.
  • Assicurati che le tabelle su cui stai eseguendo query siano in cluster. Il clustering aiuta a garantire che BigQuery possa leggere rapidamente le colonne con dati correlati.

  • Assicurati che le tabelle su cui stai eseguendo query siano partitioned. Per le tabelle non partizionate, BigQuery legge l'intera tabella. Il partizionamento delle tabelle aiuta a garantire di eseguire query solo sul sottoinsieme delle tabelle che ti interessa.

Quota di shuffling insufficiente

Prima di eseguire la query, BigQuery suddivide la logica della query in fasi. Gli slot BigQuery eseguono le attività per ogni fase. Quando uno slot completa l'esecuzione delle attività di una fase, archivia i risultati intermedi in shuffle. Le fasi successive della query leggono i dati dallo shuffling per continuare l'esecuzione della query. Una quota di shuffling insufficiente si verifica quando il numero di dati da scrivere per lo shuffling è inferiore alla capacità disponibile.

Che 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. A questo scopo, segui le indicazioni riportate in Ridurre i dati elaborati nelle query.

Alcune operazioni in SQL tendono a rendere più ampio l'utilizzo dello shuffling, in particolare le operazioni JOIN e le clausole GROUP BY. Dove possibile, la riduzione della quantità di dati in queste operazioni potrebbe ridurre l'utilizzo dello shuffling.

Che cosa fare se sei un amministratore

Riduci la contesa della quota di shuffling intraprendendo le seguenti azioni:

  • Analogamente alla contesa degli slot, se utilizzi i prezzi on demand di BigQuery, le query utilizzano un pool condiviso di slot. Valuta la possibilità di passare ai prezzi dell'analisi basata sulla capacità acquistando prenotazioni. Le prenotazioni ti offrono slot dedicati e capacità di shuffling per le query dei tuoi progetti.
  • Se utilizzi le prenotazioni BigQuery, gli slot hanno una capacità di shuffling dedicata. Se la tua prenotazione esegue alcune query che fanno ampio uso dello shuffling, è possibile che altre query in esecuzione in parallelo non abbiano una capacità di shuffle sufficiente. Puoi identificare i job che utilizzano ampiamente la capacità di shuffling eseguendo una query sulla colonna period_shuffle_ram_usage_ratio nella vista INFORMATION_SCHEMA.JOBS_TIMELINE.

    Per risolvere il problema, puoi provare una o più delle seguenti soluzioni:

    • Aggiungi altri slot alla prenotazione.
    • Crea una prenotazione aggiuntiva e assegnala al progetto che esegue la query.
    • Distribuisci le query che utilizzano lo shuffling in modo intensivo, nel tempo all'interno di una prenotazione o in prenotazioni diverse.

Modifica della scala di input dei dati

Questo approfondimento sulle prestazioni indica che la query sta leggendo almeno il 50% di dati in più per una determinata tabella di input rispetto all'ultima volta che hai eseguito la query. Puoi utilizzare la cronologia delle modifiche della tabella per verificare se le dimensioni di una delle tabelle utilizzate nella query sono aumentate di recente.

Che cosa fare se sei un analista

Riduci i dati che stai elaborando nella tua query seguendo le indicazioni riportate nella sezione Ridurre i dati elaborati nelle query.

Join ad alta cardinalità

Quando una query contiene un join con chiavi non univoche su entrambi i lati del join, la dimensione della tabella di output può essere notevolmente maggiore rispetto a quella di entrambe le tabelle di input. Questo insight indica che il rapporto tra le righe di output e le righe di input è elevato e offre informazioni su questi conteggi di righe.

Che cosa fare se sei un analista

Controlla le condizioni di join per confermare che è previsto l'aumento della dimensione della tabella di output. Evita di utilizzare i cross join. Se devi utilizzare un cross join, prova a usare una clausola GROUP BY per preaggregare i risultati oppure utilizza una funzione finestra. Per maggiori informazioni, consulta Ridurre i dati prima di utilizzare una JOIN.

Disallineamento partizione

Per fornire feedback o richiedere assistenza con questa funzionalità, invia un'email all'indirizzo bq-query-inspector-feedback@google.com.

Una distribuzione dei dati distorta può rallentare l'esecuzione delle query. Quando viene eseguita una query, BigQuery suddivide i dati in piccole partizioni. Non puoi condividere partizioni tra slot. Di conseguenza, se i dati sono distribuiti in modo non uniforme, alcune partizioni diventano molto grandi, causando un arresto anomalo dello slot che elabora la partizione di grandi dimensioni.

Il disallineamento si verifica in JOIN fasi. Quando esegui un'operazione JOIN, BigQuery suddivide i dati sul lato destro e sul lato sinistro dell'operazione JOIN in partizioni. Se una partizione è troppo grande, i dati vengono ribilanciati in base alle fasi di partizione. Se il disallineamento è errato e BigQuery non può ribilanciarsi ulteriormente, un insight sul disallineamento delle partizioni viene aggiunto alla fase "JOIN". Questo processo è noto come fasi di ripartizione. Se BigQuery rileva partizioni di grandi dimensioni che non è possibile suddividere ulteriormente, viene aggiunto un insight sul disallineamento delle partizioni alla fase JOIN.

Che cosa fare se sei un analista

Per evitare disallineamenti della partizione, filtra i dati il prima possibile. Per ulteriori informazioni su come evitare il disallineamento delle partizioni, vedi Filtrare i dati in caso di dati distorti.

Interpretare le informazioni sulla fase di query

Oltre a utilizzare gli insight sulle prestazioni delle query, puoi utilizzare anche le seguenti linee guida quando esamini i dettagli della fase di query per determinare se si è verificato un problema con una query:

  • Se il valore Attendi (ms) per una o più fasi è elevato rispetto alle esecuzioni precedenti della query:
    • Verifica se hai slot sufficienti per supportare il tuo carico di lavoro. In caso contrario, effettua il bilanciamento del carico quando esegui query che utilizzano molte risorse, in modo che non siano in concorrenza tra loro.
    • Se il valore Attendi (ms) è superiore a quello di una sola fase, osserva la fase precedente per vedere se è stato introdotto un collo di bottiglia. Fattori come modifiche sostanziali ai dati o allo schema delle tabelle coinvolte nella query potrebbero influire sulle prestazioni delle query.
  • Se il valore dei byte di output di shuffling per una fase è elevato rispetto alle esecuzioni precedenti della query o rispetto a una fase precedente, valuta i passaggi elaborati in quella fase per vedere se vengono creati grandi quantità di dati inaspettatamente. Una causa comune di questo problema è l'elaborazione di un elemento INNER JOIN in un passaggio in cui sono presenti chiavi duplicate su entrambi i lati del join. Questo può restituire una quantità inaspettata di dati.
  • Utilizza il grafico di esecuzione per esaminare le fasi principali in base a durata ed elaborazione. Considera la quantità di dati che producono e se sono commisurati alle dimensioni delle tabelle a cui viene fatto riferimento nella query. In caso contrario, esamina i passaggi in queste fasi per vedere se una di queste potrebbe generare una quantità imprevista di dati provvisori.

Passaggi successivi