Ottieni insight sulle prestazioni 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 per le query, ma è anche una complessa sistema distribuito con molti fattori interni ed esterni che possono influenzare la velocità delle query. La natura dichiarativa del linguaggio SQL può anche nascondendo la complessità dell'esecuzione delle query. Ciò significa che quando le query vengono più lento del previsto o più lento rispetto alle esecuzioni precedenti, comprendi cosa che è successo può essere una sfida.

Il grafico di esecuzione delle query fornisce un'interfaccia intuitiva per l'ispezione i dettagli delle prestazioni della 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 insight sulle prestazioni 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, le informazioni sul rendimento possono fornire solo un quadro parziale le prestazioni della 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 le seguenti ruoli IAM (Identity and Access Management) predefiniti:

  • 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. Clic 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 grafico della query nel grafico di esecuzione.

    Per determinare se una fase della query contiene insight sulle prestazioni, guarda l'icona visualizzato. Fasi con icona delle informazioni contiene informazioni sulle prestazioni. 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 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 nella 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 nella 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 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 nascosti per semplificare il piano di query che viene 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 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 jobs.list e l'ispezione del metodo JobStatistics2 le informazioni che vengono restituite.

Interpreta gli insight sulle prestazioni delle query

Utilizza questa sezione per saperne di più sul significato delle informazioni sul rendimento e su come risolvere il problema.

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 e 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 associati ai Ruolo Amministratore BigQuery.

Ognuna delle sezioni seguenti fornisce indicazioni su cosa puoi fare per risolvere le informazioni sul rendimento che ricevi, in base al ruolo che ricopri.

Conflitto slot

Quando esegui una query, BigQuery tenta di suddividere il lavoro necessari dalla query in attività. Un'attività è una singola sezione di dati l'input in e l'output da una fase. 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 degli slot si verifica quando ha molte attività pronte per essere eseguite, ma BigQuery non può avere abbastanza slot disponibili per eseguirli.

Cosa fare per un analista

Riduci i dati che stai elaborando nella query seguendo le indicazioni 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 l'interfaccia utente di BigQuery prezzi on demand, per le tue query viene utilizzata un pool condiviso di slot. Valuta la possibilità di passare a prezzi dell'analisi in base alla capacità acquistando invece prenotazioni. Le prenotazioni ti consentono di prenotare slot dedicati per i query.
  • Se utilizzi le prenotazioni BigQuery, assicurati che sia presente un numero sufficiente di slot nella prenotazione assegnata al progetto che stava eseguendo la query. La prenotazione potrebbe non avere abbastanza slot in questi scenari aggiuntivi:

    • Esistono altri job che utilizzano gli slot di prenotazione. Puoi utilizzare la modalità Grafici delle risorse amministratore per per vedere come la tua organizzazione utilizza la prenotazione.
    • La prenotazione non dispone di un numero sufficiente di slot assegnati da eseguire 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 alla prenotazione.
    • Crea una prenotazione aggiuntiva e assegnala al progetto eseguendo la query.
    • Distribuire query che richiedono molte risorse, nel tempo all'interno di un o con prenotazioni diverse.
  • Assicurati che le tabelle su cui esegui le query siano in cluster. Il clustering aiuta per garantire che BigQuery possa leggere rapidamente le colonne con correlati.

  • Assicurati che le tabelle su cui esegui le query siano partizionato. 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 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 un'area 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 ne hai di più che devono essere scritti in modalità shuffling rispetto alla capacità di shuffle.

Cosa fare per un analista

Analogamente alla contesa degli slot, riducendo la quantità di dati sottoposti a query potrebbero ridurre l'utilizzo dello shuffling. A questo scopo, segui le indicazioni fornite in Ridurre i dati elaborati nelle query.

Alcune operazioni in SQL tendono a fare un uso più ampio dello shuffle, in particolare JOIN operazioni e GROUP BY clausole. 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 prezzi on demand, per le tue query viene utilizzata un pool condiviso di slot. Valuta la possibilità di passare a prezzi dell'analisi in base alla capacità acquistando invece prenotazioni. Le prenotazioni ti offrono slot dedicati e capacità di shuffling per i tuoi progetti query.
  • 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 per 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 sono alte e offrono informazioni su questi conteggi di righe.

Cosa fare per un analista

Controlla le condizioni di join per confermare che l'aumento della dimensione è prevista. Evita di utilizzare incrociati. Se devi utilizzare un cross join, prova a utilizzare una clausola GROUP BY per preaggregare o utilizzare una funzione finestra. Per ulteriori informazioni, vedi Riduci 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 dei dati disallineata può causare un rallentamento delle query. Quando una query viene eseguito, BigQuery suddivide i dati in partizioni di piccole dimensioni. Impossibile condividere tra gli slot. Pertanto, se i dati sono distribuiti in modo non uniforme, diventano molto grandi e questo provoca un arresto anomalo dello slot che elabora la partizione sovradimensionata.

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 bilanciate 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 per 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 all'utilizzo approfondimenti sulle prestazioni delle query, puoi anche utilizzare le seguenti linee guida quando esamini la fase della query dettagli utili per determinare se c'è un problema con una query:

  • Se il valore Attendi ms per una o più fasi è elevato rispetto al valore precedente esecuzioni della query:
      .
    • Controlla se ne hai a sufficienza slot disponibili per supportare 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 Attendi ms è superiore a quello che è stato per una sola fase, prima di iniziare, per vedere se è stato introdotto un collo di bottiglia là. Aspetti come modifiche sostanziali ai dati o allo schema delle tabelle coinvolto nella query potrebbe influire sulle sue prestazioni.
  • Se il valore dello shuffling dei byte di output per una fase è elevato rispetto a precedenti della query o confrontate con una fase precedente, valuta passaggi elaborati in quella fase per verificare se vengono creati di dati. Una delle cause più comuni è che un passaggio elabora un INNER JOIN in cui sono presenti chiavi duplicate su entrambi i lati del join. Questa operazione 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