Ottenere informazioni sul rendimento delle query

Questo documento descrive come utilizzare il grafico di esecuzione delle query per diagnosticare una query problemi di prestazioni e per visualizzare informazioni sulle prestazioni delle query.

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. Utilizzandola, puoi esaminare le informazioni del piano di query in formato grafico per qualsiasi query, in esecuzione completata.

Puoi anche utilizzare il grafico di esecuzione delle query per ottenere informazioni sul rendimento delle query. Gli approfondimenti sul rendimento 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 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 progetto.

  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 dei in ogni fase della query:

    Il piano di query grafico nel grafico di esecuzione.

    Per determinare se una fase della query contiene insight sulle prestazioni, guarda l'icona visualizzato. Le fasi con un'icona di informazione contengono approfondimenti sul rendimento. Fasi con un Icona segno di spunta non fare.

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

    Dettagli della fase di 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 corrente della query.

    Sincronizza il grafico con una query in esecuzione.

  7. (Facoltativo) Per evidenziare le fasi principali in base alla durata sul 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 nella 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 le fasi di ridistribuzione dello 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 utilizzati per migliorare la distribuzione dei dati tra i worker durante l'elaborazione della 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 approfondimenti sulle prestazioni visualizzato anche nella scheda Informazioni job per la query:

La scheda delle informazioni sul job.

SQL

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

    Vai a BigQuery

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

Utilizza questa sezione per scoprire di più sul significato delle informazioni sul rendimento e su come gestirle.

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

  • Analisti: vengono eseguite query in un progetto. Stai interessato a scoprire perché una query eseguita in precedenza risulta inaspettatamente più lenta e di ricevere 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 i Risorse e prenotazioni BigQuery. 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 scomporre il lavoro necessari dalla query in tasks. Un'attività è un singolo segmento di dati che viene inserito in una fase e da essa viene generato. Un singolo slot seleziona un'attività ed esegue quella porzione di dati per lo stage. Idealmente, BigQuery slots esegue queste attività in parallelo per ottenere prestazioni elevate. La contesa per gli 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 per 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 l'utilizzo degli slot prendendo 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 prenotazioni. Le prenotazioni ti consentono di prenotare slot dedicati per i query.
  • 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 utilizzano 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 di quanto devono essere grandi le prenotazioni per l'elaborazione delle query attività di machine learning.

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

    • Aggiungi altri slot (slot di riferimento o numero massimo di slot di prenotazione) prenotazione.
    • Crea un'altra prenotazione e assegnala al progetto che esegue la query.
    • Distribuire query che richiedono molte risorse, nel corso del tempo all'interno di o con prenotazioni diverse.
  • Assicurati che le tabelle su cui esegui le 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 le query siano partizionata, Per non partizionate, BigQuery legge l'intera tabella. Il partizionamento delle tabelle aiuta a garantire di eseguire query solo sul sottoinsieme di le tabelle che ti interessano.

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, memorizza i risultati intermedi in shuffle. Le fasi successive della query leggono i dati dall'ordinamento casuale per continuare l'esecuzione della query. Una quota di shuffling insufficiente si verifica quando ne hai di più che devono essere scritti in modalità shuffling rispetto alla capacità di shuffle.

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, la riduzione della quantità di dati in queste operazioni potrebbe ridurre l'utilizzo dello shuffling.

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 prenotazioni. Le prenotazioni ti offrono slot dedicati e capacità di ordinamento per le query dei tuoi progetti.
  • Se utilizzi le prenotazioni BigQuery, gli slot includono e una capacità di shuffle dedicata. Se la tua prenotazione esegue alcune query che fare ampio uso dello shuffle, questo potrebbe causare l'esecuzione di altre query in parallelo per non avere una capacità di shuffling sufficiente. Puoi identificare quali job utilizzano shuffling molto spesso la capacità tramite query period_shuffle_ram_usage_ratio nella colonna 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 eseguendo la query.
    • Distribuisci query ad alta intensità di shuffling, nel tempo all'interno di un o con prenotazioni diverse.

Modifica della scala di input dei dati

Questi insight sulle prestazioni indicano 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 alla tabella per verificare se il le dimensioni di qualsiasi tabella utilizzata nella query sono recentemente aumentate.

Cosa fare se sei un analista

Riduci i dati che stai elaborando nella query seguendo le indicazioni 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 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 per un analista

Controlla le condizioni di join per verificare che l'aumento delle dimensioni della tabella di output sia previsto. Evita di utilizzare incrociati. 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 Ridurre i dati prima di utilizzare un JOIN.

Disallineamento partizione

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

La distribuzione distorta dei dati può causare un rallentamento delle query. Quando una query viene eseguito, BigQuery suddivide i dati in partizioni di piccole dimensioni. 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.

Il disallineamento avviene in JOIN fasi. Quando esegui un'operazione JOIN, BigQuery suddivide i dati sul lato destro e sul lato sinistro Operazione JOIN nelle partizioni. Se una partizione è troppo grande, i dati vengono riequilibrati dalle fasi di ripartizione. Se il disallineamento è pessimo BigQuery non può eseguire il ribilanciamento ulteriormente, un insight sul disallineamento partizione è aggiunto al "JOIN" durante la fase di sviluppo. Questo processo è noto come fasi di ripartizione. Se BigQuery rileva le partizioni di grandi dimensioni che non possono essere divise inoltre, viene aggiunto un insight sul disallineamento partizione alla fase JOIN.

Cosa fare se sei un analista

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

Interpretare 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 Attendi ms per una o più fasi è elevato rispetto al valore precedente esecuzioni della query:
    • Verifica di avere un numero sufficiente di slot disponibile per soddisfare il tuo carico di lavoro. In caso contrario, bilancia il carico eseguire query che richiedono molte risorse e non sono in concorrenza tra loro.
    • Se il valore di Attendi ms è superiore a quello di una sola fase, per vedere se è stato introdotto un collo di bottiglia là. 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. Questo può restituire una quantità inaspettata di dati.
  • Utilizza il grafico di esecuzione per esaminare le fasi principali per durata e e l'elaborazione dei dati. Valutare la quantità di dati che producono e se in base alle dimensioni delle tabelle a cui viene fatto riferimento nella query. Se non lo è, rivedi i passaggi in queste fasi per vedere se qualcuno potrebbe generare una quantità imprevista di dati provvisori.

Passaggi successivi