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 visualizzare insight sulle prestazioni delle query.

BigQuery offre ottime prestazioni per le query, ma è anche un sistema distribuito complesso con numerosi 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ù lente delle esecuzioni precedenti, comprendere cosa è successo può essere complicato.

Il grafico di esecuzione delle query fornisce un'interfaccia intuitiva per l'ispezione dei dettagli delle prestazioni delle query. Utilizzandolo, puoi rivedere le informazioni del 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 possono 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 IAM (Identity and Access Management) predefiniti di BigQuery:

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

Visualizza insight sulle prestazioni delle query

Console

Segui questi passaggi per visualizzare informazioni sulle prestazioni delle query:

  1. Apri la pagina BigQuery nella console Google Cloud.

    Vai alla pagina di BigQuery

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

  3. Nell'elenco dei job, identifica la query del job 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 grafico della query nel grafico di esecuzione.

    Per determinare se una fase della query contiene insight sulle prestazioni, guarda l'icona visualizzata. Le fasi con un'icona delle informazioni presentano informazioni sulle prestazioni. Le fasi con un'icona di controllo no.

  5. Fai clic su una fase per aprire il riquadro dei dettagli della fase, dove puoi vedere le seguenti informazioni:

    Dettagli della fase di query.

  6. (Facoltativo) Se stai ispezionando 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 della fase nel grafico, fai clic su Evidenzia le fasi principali per durata.

    Mostra le fasi principali per durata.

  8. (Facoltativo) Per evidenziare le fasi principali in base al 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 shuffling nel grafico, fai clic su Mostra fasi di ridistribuzione shuffling.

    Mostra le fasi principali per elaborazione.

    Utilizza questa opzione per visualizzare le fasi di ripartizione e unione che sono nascoste nel grafico di esecuzione predefinito.

    Le fasi di ripartizione e unione 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, sono 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 job della query:

La scheda Informazioni sul lavoro.

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 ulteriori informazioni su come eseguire le query, vedi Eseguire una query interattiva.

API

Puoi ottenere insight sulle prestazioni delle query in un formato non grafico chiamando il metodo API jobs.list e ispezionando le informazioni di JobStatistics2 restituite.

Interpreta gli insight sulle prestazioni delle query

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

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

  • Analisti: vengono eseguite query in un progetto. Ti interessa scoprire perché una query eseguita in precedenza risulta inaspettatamente più lenta e ottenere suggerimenti su come migliorare le prestazioni di una query. Disponi delle autorizzazioni descritte in Autorizzazioni obbligatorie.

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

Ognuna delle sezioni seguenti fornisce indicazioni su cosa puoi fare per fornire informazioni sulle prestazioni che ricevi, in base al ruolo che ricopri.

Conflitto slot

Quando esegui una query, BigQuery tenta di suddividere il lavoro necessario per la query in attività. Un'attività è una singola porzione di dati che viene inserito e restituito da una fase. Un singolo slot seleziona un'attività ed esegue la porzione di dati per lo stage. 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 può ottenere abbastanza slot disponibili per eseguirle.

Cosa fare per un analista

Per ridurre i dati elaborati nella query, segui le indicazioni riportate in Ridurre i dati elaborati nelle query.

Cosa fare se sei un amministratore

Aumenta la disponibilità degli slot o riduci l'utilizzo degli slot eseguendo queste azioni:

  • Se utilizzi i prezzi on demand di BigQuery, le tue 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 le prenotazioni BigQuery, assicurati che ci siano abbastanza slot nella prenotazione assegnata al progetto che stava eseguendo la query. La prenotazione potrebbe non avere abbastanza slot in questi scenari:

    • Esistono altri job che utilizzano gli slot di prenotazione. Puoi utilizzare i grafici delle risorse amministrative 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 in modo sufficientemente veloce. Puoi utilizzare lo stimatore degli slot per avere una stima delle dimensioni delle prenotazioni per elaborare in modo efficiente le attività delle query.

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

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

  • Assicurati che le tabelle su cui esegui 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 shuffle 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 shuffle insufficiente si verifica quando i dati da scrivere nello shuffling sono superiori alla capacità di shuffle.

Cosa fare per un analista

Analogamente alla contesa degli slot, la riduzione della quantità di dati elaborati dalla query potrebbe ridurre l'utilizzo dello shuffling. Per farlo, segui le indicazioni in Ridurre i dati elaborati nelle query.

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

Cosa fare se sei un amministratore

Riduci il conflitto della quota di shuffling eseguendo queste azioni:

  • Analogamente alla contesa degli slot, se utilizzi i prezzi on demand di BigQuery, le tue 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 progetti.
  • Se utilizzi le prenotazioni BigQuery, gli slot hanno una capacità di shuffle dedicata. Se nella prenotazione vengono eseguite alcune query che fanno ampio uso dello shuffling, le altre query in esecuzione in parallelo potrebbero non ottenere una capacità di shuffling sufficiente. Puoi identificare i job che utilizzano in modo esteso la capacità di shuffling eseguendo una query sulla colonna period_shuffle_ram_usage_ratio nella vista INFORMATION_SCHEMA.JOBS_TIMELINE.

    Per risolvere questo 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.
    • Distribuire query ad alta intensità di shuffling, nel tempo all'interno di una prenotazione o in diverse prenotazioni.

Modifica della scala di input dei dati

La ricezione di questi insight 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 l'hai eseguita. Puoi utilizzare la cronologia delle modifiche alla tabella per verificare se le dimensioni di qualsiasi tabella utilizzata nella query sono aumentate di recente.

Cosa fare per un analista

Per ridurre i dati elaborati nella query, segui 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, la dimensione della tabella di output può essere notevolmente maggiore di quella di una delle tabelle di input. Questo insight indica che il rapporto tra righe di output e righe di input è elevato e offre informazioni sul conteggio delle righe.

Cosa fare per un analista

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

Disallineamento partizione

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

La distribuzione dei dati disallineata 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 partizioni diventano molto grandi e questo causa un arresto anomalo dello slot che elabora la partizione sovradimensionata.

Il disallineamento avviene in JOIN fasi. Quando esegui un'operazione JOIN, BigQuery divide i dati sul lato destro e sul lato sinistro dell'operazione JOIN in partizioni. Se una partizione è troppo grande, i dati vengono ribilanciati per fasi di ripartizione. Se il disallineamento è troppo scadente e BigQuery non può ribilanciare ulteriormente il disallineamento, alla fase "JOIN" viene aggiunto un insight sul disallineamento partizione. 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 insight sul disallineamento partizione.

Cosa fare per un analista

Per evitare un disallineamento partizione, filtra i dati il prima possibile. Per ulteriori informazioni su come evitare il disallineamento delle partizioni, consulta Filtrare i dati per i dati disallineati.

Interpretare le informazioni sulla fase di query

Oltre a utilizzare gli insight sulle prestazioni delle query, puoi anche utilizzare 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 abbastanza slot disponibili per supportare il tuo carico di lavoro. In caso contrario, bilancia il carico quando esegui query ad alta intensità di risorse, in modo che non siano in concorrenza tra loro.
    • Se il valore Attendi ms è superiore rispetto a quello utilizzato per una sola fase, esamina la fase precedente per verificare se è stato introdotto un collo di bottiglia. Aspetti come le modifiche sostanziali ai dati o allo schema delle tabelle incluse nella query potrebbero influire sulle prestazioni della query.
  • Se il valore dello shuffling dei byte di output 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 inaspettatamente grandi quantità di dati. Una delle cause più comuni è che un passaggio elabora una INNER JOIN 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 per durata ed elaborazione. Considera la quantità di dati che producono e se sono commisurate alle dimensioni delle tabelle a cui viene fatto riferimento nella query. In caso contrario, rivedi i passaggi in queste fasi per verificare se alcuni potrebbero produrre una quantità imprevista di dati provvisori.

Passaggi successivi