Utilizza code di query
BigQuery determina automaticamente il numero di query che possono essere eseguite contemporaneamente, ovvero la contemporaneità dinamica. Le query aggiuntive vengono messe in coda finché non diventano disponibili le risorse di elaborazione. Questo documento spiega come controllare la destinazione massima di contemporaneità e impostare il timeout della coda per le query interattive e batch.
Panoramica
BigQuery determina dinamicamente il numero di query che possono essere eseguite contemporaneamente in base alle risorse di calcolo disponibili. Il numero di query che possono essere eseguite contemporaneamente viene calcolato per progetto on demand o per prenotazione. Le query aggiuntive vengono inserite in coda fino a quando non è disponibile capacità sufficiente per iniziare l'esecuzione. La lunghezza della coda è limitata a 1000 query interattive e 20.000 query batch per progetto per regione, indipendentemente dal fatto che il progetto sia on demand o utilizzi una prenotazione. L'esempio seguente mostra il comportamento di un progetto on demand quando la contemporaneità delle query calcolata è 202:
Per le prenotazioni, hai la possibilità di impostare la destinazione massima di contemporaneità, un limite superiore per il numero di query che possono essere eseguite contemporaneamente in una prenotazione, per garantire che a ogni query venga allocato un numero minimo di slot. Non puoi specificare un target massimo di contemporaneità per un progetto on demand; viene sempre calcolato in modo dinamico.
Comportamento della coda
BigQuery applica una pianificazione equo per garantire che nessun singolo progetto possa consumare tutti gli slot in una prenotazione.
Le query dei progetti con la quota più bassa di contemporaneità vengono rimosse per prime. Durante l'esecuzione, gli slot vengono distribuiti equamente tra i progetti prima di essere distribuiti tra i job all'interno di un progetto.
Ad esempio, supponi di avere una prenotazione assegnata a due progetti: A e B. BigQuery calcola 5 per la contemporaneità della prenotazione. Il progetto A ha quattro query in esecuzione contemporaneamente, il progetto B ha una query in esecuzione e le altre query sono in coda. Una query del progetto B verrebbe rimossa prima dalla coda anche se è stata inviata dopo la query del progetto A. Una volta avviata l'esecuzione, una query riceve una discreta quota di slot nella prenotazione condivisa.
I job di query in un progetto on demand vengono eseguiti nell'ordine in cui sono stati inviati.
BigQuery determina dinamicamente il numero massimo di query batch in esecuzione contemporanea per progetto.
Quando elimini una prenotazione, tutte le query in coda scadono. Quando un progetto assegnato a una prenotazione viene riassegnato a un'altra prenotazione, tutte le richieste in coda o in esecuzione continuano a farlo nella prenotazione precedente, mentre tutte le nuove richieste vanno a quella nuova. Quando un progetto assegnato a una prenotazione viene rimosso dalla prenotazione, le query in esecuzione continuano nella prenotazione, mentre le richieste nuove e in coda vengono eseguite utilizzando il modello on demand. Facoltativamente, puoi annullare singoli job di query in esecuzione o in coda.
Timeout coda di controllo
Per controllare il timeout della coda per le query interattive o batch, utilizza
l'istruzione ALTER PROJECT SET OPTIONS
o l'istruzione ALTER ORGANIZATION SET OPTIONS
per impostare i campi default_interactive_query_queue_timeout_ms
o
default_batch_query_queue_timeout_ms
nella configurazione predefinita del tuo progetto o
dell'organizzazione.
Per visualizzare il timeout della coda per le query interattive o batch nel tuo progetto, esegui una query sulla vista INFORMATION_SCHEMA.EFFECTIVE_PROJECT_OPTIONS
.
Per disattivare la coda, imposta il timeout della coda su -1. Se raggiungi il limite massimo di contemporaneità delle query, le query aggiuntive non andranno a buon fine e generano un errore ADMISSION_DENIED
.
Imposta il target massimo di contemporaneità
Puoi impostare manualmente la destinazione massima di contemporaneità quando crei una prenotazione. Per impostazione predefinita, il target massimo di contemporaneità è pari a zero, il che significa che BigQuery determina dinamicamente la contemporaneità in base alle risorse disponibili. Altrimenti, se imposti un target diverso da zero, il target massimo di contemporaneità specifica un limite superiore per il numero di query eseguite contemporaneamente in una prenotazione, garantendo una quantità minima di capacità slot disponibile per ogni query in esecuzione.
L'aumento del target massimo di contemporaneità non garantisce che più query vengano eseguite contemporaneamente. La contemporaneità effettiva dipende dalle risorse di calcolo disponibili, che possono essere aumentate aggiungendo altri slot alla prenotazione.
Ruoli obbligatori
Per ottenere l'autorizzazione necessaria per impostare la contemporaneità in una nuova prenotazione,
chiedi all'amministratore di concederti il
ruolo IAM Editor risorse BigQuery (roles/bigquery.resourceEditor
) nel
progetto di amministrazione
che mantiene la proprietà degli impegni.
Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso.
Questo ruolo predefinito contiene l'autorizzazione bigquery.reservations.create
, necessaria per impostare la contemporaneità in una nuova prenotazione.
Potresti anche essere in grado di ottenere questa autorizzazione con i ruoli personalizzati o altri ruoli predefiniti.
Per ulteriori informazioni sui ruoli IAM in BigQuery, consulta Autorizzazioni e ruoli predefiniti.
Imposta il target massimo di contemporaneità per una prenotazione
Seleziona una delle seguenti opzioni:
Console
Nella console Google Cloud, vai alla pagina BigQuery.
Nel menu di navigazione, vai alla sezione Gestione della capacità.
Fai clic su Crea prenotazione.
Seleziona le impostazioni di prenotazione.
Per espandere la sezione Impostazioni avanzate, fai clic sulla
freccia di espansione.Per impostare la contemporaneità dei job target, attiva l'opzione Esegui l'override della contemporaneità automatica dei job di destinazione e inserisci la Contemporaneità target dei job.
Fai clic su Salva.
SQL
Per impostare il target massimo di contemporaneità per una nuova prenotazione, utilizza l'istruzione DDL CREATE RESERVATION
e imposta il campo target_job_concurrency
.
Nella console Google Cloud, vai alla pagina BigQuery.
Nell'Editor query, inserisci la seguente istruzione:
CREATE RESERVATION `ADMIN_PROJECT_ID.LOCATION.RESERVATION_NAME` OPTIONS ( target_job_concurrency = CONCURRENCY);
Sostituisci quanto segue:
-
ADMIN_PROJECT_ID
: progetto proprietario della prenotazione -
LOCATION
: il luogo della prenotazione, ad esempioregion-us
-
RESERVATION_NAME
: il nome della prenotazione -
CONCURRENCY
: target massimo di contemporaneità
-
Fai clic su
Esegui.
Per ulteriori informazioni su come eseguire le query, consulta Eseguire una query interattiva.
bq
Per impostare il target massimo di contemporaneità per una nuova prenotazione, esegui il comando bq mk
:
bq mk \ --project_id=ADMIN_PROJECT_ID \ --location=LOCATION \ --target_job_concurrency=CONCURRENCY \ --reservation \ RESERVATION_NAME
Sostituisci quanto segue:
ADMIN_PROJECT_ID
: progetto proprietario della prenotazioneLOCATION
: il luogo della prenotazioneCONCURRENCY
: target massimo di contemporaneitàRESERVATION_NAME
: il nome della prenotazione
API
Per impostare la destinazione massima di contemporaneità nell'API BigQuery Reservation, imposta il campo concurrency
nella risorsa di prenotazione e chiama il metodo CreateReservationRequest
.
Aggiorna la destinazione massima di contemporaneità
Puoi aggiornare il target massimo di contemporaneità per una prenotazione in qualsiasi momento. Tuttavia, l'aumento del target non garantisce che più query vengano eseguite contemporaneamente. La contemporaneità effettiva dipende dalle risorse di computing disponibili. Se riduci il target massimo di contemporaneità, le query in esecuzione attiva non sono interessate e le query in coda non vengono eseguite finché il numero di query in parallelo non scende al di sotto del nuovo target.
Se imposti il target massimo di contemporaneità su 0, BigQuery determina dinamicamente la contemporaneità in base alle risorse disponibili (comportamento predefinito).
Ruoli obbligatori
Per ottenere l'autorizzazione necessaria per aggiornare la destinazione massima di contemporaneità per una prenotazione, chiedi all'amministratore di concederti il ruolo IAM Editor risorse BigQuery (roles/bigquery.resourceEditor
) per il progetto di amministrazione che mantiene la proprietà degli impegni.
Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso.
Questo ruolo predefinito contiene l'autorizzazione bigquery.reservations.update
, necessaria per aggiornare il target massimo di contemporaneità per una prenotazione.
Potresti anche essere in grado di ottenere questa autorizzazione con i ruoli personalizzati o altri ruoli predefiniti.
Per ulteriori informazioni sui ruoli IAM in BigQuery, consulta Autorizzazioni e ruoli predefiniti.
Aggiorna il target massimo di contemporaneità per una prenotazione
Seleziona una delle seguenti opzioni:
Console
Nella console Google Cloud, vai alla pagina BigQuery.
Nel menu di navigazione, vai alla sezione Gestione della capacità.
Fai clic sulla scheda Prenotazioni slot.
Trova la prenotazione che vuoi aggiornare.
Espandi l'opzione
Azioni.Fai clic su Modifica.
Per espandere la sezione Impostazioni avanzate, fai clic sulla
freccia di espansione.Per impostare la contemporaneità dei job target, attiva l'opzione Esegui l'override della contemporaneità automatica dei job di destinazione e inserisci la Contemporaneità target dei job.
Fai clic su Salva.
SQL
Per aggiornare il target massimo di contemporaneità per una prenotazione esistente, utilizza l'istruzione DDL ALTER RESERVATION
e imposta il campo target_job_concurrency
.
Nella console Google Cloud, vai alla pagina BigQuery.
Nell'Editor query, inserisci la seguente istruzione:
ALTER RESERVATION `ADMIN_PROJECT_ID.LOCATION.RESERVATION_NAME` SET OPTIONS ( target_job_concurrency = CONCURRENCY);
Sostituisci quanto segue:
-
ADMIN_PROJECT_ID
: progetto proprietario della prenotazione -
LOCATION
: il luogo della prenotazione, ad esempioregion-us
-
RESERVATION_NAME
: il nome della prenotazione -
CONCURRENCY
: target massimo di contemporaneità
-
Fai clic su
Esegui.
Per ulteriori informazioni su come eseguire le query, consulta Eseguire una query interattiva.
bq
Per aggiornare il target massimo di contemporaneità per una prenotazione esistente, esegui il comando bq update
:
bq update \ --project_id=ADMIN_PROJECT_ID \ --location=LOCATION \ --target_job_concurrency=CONCURRENCY \ --reservation \ RESERVATION_NAME
Sostituisci quanto segue:
ADMIN_PROJECT_ID
: progetto proprietario della prenotazioneLOCATION
: il luogo della prenotazioneCONCURRENCY
: target massimo di contemporaneitàRESERVATION_NAME
: il nome della prenotazione
API
Per aggiornare la destinazione massima di contemporaneità nell'API BigQuery Reservation, imposta il campo concurrency
nella risorsa di prenotazione e chiama il metodo UpdateReservationRequest
.
Monitoraggio
Per scoprire quali query sono in esecuzione e quali vengono in coda, controlla le viste INFORMATION_SCHEMA.JOBS_BY_*
e INFORMATION_SCHEMA.JOBS_TIMELINE_BY_*
. Il campo state
è impostato su RUNNING
per le query in esecuzione attiva e su
PENDING
per le query in coda.
Per visualizzare il numero di query in parallelo eseguite quando è stata raggiunta la soglia di contemporaneità dinamica per ogni secondo nell'ultimo giorno, esegui la query seguente:
SELECT t1.period_start, t1.job_count AS dynamic_concurrency_threshold FROM ( SELECT period_start, state, COUNT(DISTINCT job_id) AS job_count FROM `PROJECT_ID.REGION_ID`.INFORMATION_SCHEMA.JOBS_TIMELINE WHERE period_start BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 DAY) AND CURRENT_TIMESTAMP() AND reservation_id = "RESERVATION_ID" GROUP BY period_start, state) AS t1 JOIN ( SELECT period_start, state, COUNT(DISTINCT job_id) AS job_count FROM `PROJECT_ID.REGION_ID`.INFORMATION_SCHEMA.JOBS_TIMELINE WHERE state = "PENDING" AND period_start BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 DAY) AND CURRENT_TIMESTAMP() AND reservation_id = "RESERVATION_ID" GROUP BY period_start, state HAVING COUNT(DISTINCT job_id) > 0 ) AS t2 ON t1.period_start = t2.period_start WHERE t1.state = "RUNNING";
Sostituisci quanto segue:
PROJECT_ID
: il nome del progetto in cui hai eseguito le queryREGION_ID
: la località in cui sono state elaborate le queryRESERVATION_ID
: il nome della prenotazione in cui vengono eseguite le query
Puoi monitorare la lunghezza della coda di query per la prenotazione utilizzando i grafici delle risorse amministrative di BigQuery e selezionando il grafico Contemporaneità dei job con la metrica In attesa.
Puoi anche monitorare la lunghezza della coda in Cloud Monitoring visualizzando la metrica conteggio job e filtrando in base al numero di job in stato in attesa.
Limitazioni
- Ogni progetto on demand può mettere in coda fino a 1000 query interattive e 20.000 query batch contemporaneamente. Le query che superano questo limite restituiscono un errore di quota. Non puoi richiedere un aumento di questi limiti.
- All'interno di una prenotazione, ogni progetto assegnato alla prenotazione può mettere in coda fino a 1000 query interattive e 20.000 query batch contemporaneamente. Le query che superano questo limite restituiscono un errore di quota. Non puoi richiedere un aumento di questi limiti.
- Per impostazione predefinita, i job di query che non hanno avviato l'esecuzione scadono dopo 6 ore per le query interattive e 24 ore per le query batch.
- Non puoi impostare il target massimo di contemporaneità per le query in esecuzione in un progetto on demand.
- Non puoi impostare il target massimo di contemporaneità per le query eseguite con una prenotazione della versione Standard. Per ulteriori informazioni sulle versioni, consulta Introduzione alle versioni di BigQuery.
Passaggi successivi
- Scopri di più su come diagnosticare e risolvere gli errori relativi ai limiti di coda delle query.