Informazioni sugli slot

Uno slot BigQuery è una CPU virtuale utilizzata da BigQuery per eseguire query SQL. Durante l'esecuzione della query, BigQuery calcola automaticamente il numero di slot richiesti da una query, a seconda delle dimensioni e della complessità della query.

Puoi scegliere se utilizzare un modello di prezzi on demand o un modello di prezzi basato sulla capacità. Entrambi i modelli utilizzano slot per l'elaborazione dati. Con un modello basato sulla capacità, puoi pagare per la capacità di elaborazione delle query dedicata o con scalabilità automatica. Il modello basato sulla capacità ti offre un controllo esplicito su slot e capacità di analisi, mentre il modello on demand no.

I clienti che scelgono il modello di prezzi basato sulla capacità scelgono esplicitamente quanti slot prenotare. Le tue query vengono eseguite all'interno di questa capacità e paghi per la capacità continuamente ogni secondo di cui viene eseguito il deployment. Ad esempio, se acquisti 2000 slot BigQuery, le query aggregate possono utilizzare solo 2000 CPU virtuali in un dato momento. Hai questa capacità finché non la elimini e paghi per 2000 slot finché non li elimini.

I progetti con il modello di prezzi on demand di BigQuery sono soggetti a una quota di slot per progetto con funzionalità di burst transitorio. La maggior parte degli utenti del modello on demand ritiene che la capacità di slot predefinita sia più che sufficiente. A seconda del carico di lavoro, l'accesso a più slot migliora le prestazioni delle query. Per verificare quanti slot vengono utilizzati dal tuo account, consulta Monitoraggio di BigQuery.

Stima il numero di slot da acquistare

BigQuery è progettato per scalare in modo efficiente con maggiori risorse. A seconda del carico di lavoro, è probabile che la capacità incrementale offra vantaggi incrementali. Pertanto, la scelta del numero ottimale di slot da acquistare dipende dai requisiti in termini di prestazioni, velocità effettiva e utilità.

Puoi fare esperimenti con gli slot di riferimento e con scalabilità automatica per determinare la migliore configurazione degli slot. Ad esempio, puoi testare il tuo carico di lavoro con 500 slot di riferimento, quindi 1000, quindi 1500 e 2000 e osservare l'impatto sulle prestazioni.

Puoi anche esaminare l'utilizzo attuale degli slot dei tuoi progetti, insieme al prezzo mensile scelto che vuoi pagare. I carichi di lavoro on demand hanno un limite di 2000 slot flessibili, ma è importante verificare quanti slot vengono effettivamente utilizzati dai progetti utilizzando le viste INFORMATION_SCHEMA.JOBS*, Cloud Logging, l'API Jobs o gli audit log di BigQuery. Per maggiori informazioni, consulta Visualizzare gli slot disponibili e gli slot allocati.

Cronologia di utilizzo degli slot.

Dopo aver acquistato gli slot ed eseguito i carichi di lavoro per almeno sette giorni, puoi utilizzare lo strumento di stima degli slot per analizzare le prestazioni e modellare l'effetto dell'aggiunta o della riduzione degli slot. Per maggiori informazioni, consulta Stimare i requisiti di capacità degli slot.

Esecuzione di query utilizzando gli slot

Quando BigQuery esegue un job di query, converte l'istruzione SQL dichiarativa in un grafico di esecuzione, suddiviso in una serie di fasi di query, a loro volta composte da insiemi più granulari di passaggi di esecuzione. BigQuery utilizza un'architettura parallela molto distribuita per eseguire queste query e le fasi modellano le unità di lavoro che molti potenziali worker possono eseguire in parallelo. Le fasi comunicano tra loro tramite un'architettura di shuffle distribuita rapida, di cui si parla più dettagliatamente nel blog di Google Cloud.

L'esecuzione delle query in BigQuery è dinamica, il che significa che il piano di query può essere modificato mentre una query è in corso. Le fasi introdotte durante l'esecuzione di una query vengono spesso utilizzate per migliorare la distribuzione dei dati tra i worker delle query.

BigQuery può eseguire più fasi contemporaneamente. BigQuery può utilizzare l'esecuzione speculativa per accelerare una query e BigQuery può ripartizionare dinamicamente una fase per ottenere una parallelizzazione ottimale.

Gli slot BigQuery eseguono singole unità di lavoro in ogni fase della query. Ad esempio, se BigQuery determina che il fattore di parallelizzazione ottimale di una fase è 10, richiede 10 slot per elaborare quella fase.

Slot di query.

La query GoogleSQL è un DAG dinamico

Esecuzione della query in economia delle risorse slot

Se una query richiede più slot di quelli attualmente disponibili, BigQuery mette in coda le singole unità di lavoro e attende che gli slot diventino disponibili. Man mano che si procede nell'esecuzione delle query e che gli slot si liberano, queste unità di lavoro in coda vengono selezionate dinamicamente per l'esecuzione.

BigQuery può richiedere un numero illimitato di slot per una determinata fase di una query. Il numero di slot richiesti non è correlato alla quantità di capacità acquistata, ma piuttosto a un'indicazione del fattore di parallelizzazione ottimale scelto da BigQuery per la fase. Le unità di lavoro sono in coda e vengono eseguite man mano che gli slot diventano disponibili.

Quando le richieste di query superano gli slot che hai scelto, non ti vengono addebitati gli slot aggiuntivi né le tariffe on demand aggiuntive. Le tue singole unità di lavoro sono in coda.

Ad esempio,

  1. Una fase di query richiede 2000 slot, ma ne sono disponibili solo 1000.
  2. BigQuery consuma tutti i 1000 slot e mette in coda gli altri 1000 slot.
  3. Successivamente, se 100 slot terminano il proprio lavoro, vengono prelevati dinamicamente 100 unità di lavoro dalle 1000 unità di lavoro in coda. Rimangono 900 unità di lavoro in coda.
  4. In seguito, se 500 slot terminano il proprio lavoro, vengono prelevati dinamicamente 500 unità di lavoro dalle 900 unità di lavoro in coda. Rimangono 400 unità di lavoro in coda.

Pianificazione slot.

Slot BigQuery in coda se la domanda supera la disponibilità

Slot inattivi

Alcuni slot potrebbero essere inattivi in un determinato momento. Ecco alcuni esempi:

  • Impegni slot non allocati a nessuna prenotazione.
  • Slot allocati a un riferimento della prenotazione, ma non in uso.

Per impostazione predefinita, le query in esecuzione in una prenotazione utilizzano automaticamente gli slot inattivi di altre prenotazioni all'interno dello stesso progetto di amministrazione. Ciò significa che un job può sempre essere eseguito finché è disponibile della capacità. La capacità inattiva è immediatamente prerilasciabile alla prenotazione originale assegnata, se necessario, indipendentemente dalla priorità della query che richiede le risorse. Ciò avviene automaticamente in tempo reale.

Per evitare questo comportamento e garantire che una prenotazione utilizzi solo gli slot di cui è stato eseguito il provisioning, imposta ignore_idle_slots su true. Tuttavia, le prenotazioni con ignore_idle_slots impostate su true possono condividere i relativi slot inattivi con altre prenotazioni.

Non puoi condividere gli slot inattivi tra prenotazioni di versioni diverse. Puoi condividere solo gli slot di riferimento o gli slot impegnati. Gli slot con scalabilità automatica potrebbero essere temporaneamente disponibili, ma non sono condivisibili perché potrebbero fare lo scale down.

Se ignore_idle_slots è false, una prenotazione può avere un numero di slot 0 e avere comunque accesso agli slot inutilizzati. Se utilizzi solo la prenotazione default, disattiva ignore_idle_slots come best practice. Dopodiché puoi assegnare un progetto o una cartella alla prenotazione, che utilizzerà solo slot inattivi.

Compiti di tipo ML_EXTERNAL sono un'eccezione perché gli slot utilizzati dai job di creazione di modelli esterni di BigQuery ML non sono prerilasciabili. Gli slot in una prenotazione con entrambi i tipi di assegnazione ML_EXTERNAL e QUERY sono disponibili per altri job di query solo quando gli slot non sono occupati dai job ML_EXTERNAL. Inoltre, questi job non possono utilizzare slot inattivi di altre prenotazioni.

Allocazione degli slot all'interno delle prenotazioni

BigQuery alloca la capacità degli slot all'interno di una singola prenotazione utilizzando un algoritmo chiamato equa pianificazione.

Lo scheduler BigQuery applica la stessa condivisione degli slot tra i progetti con query in esecuzione all'interno di una prenotazione e poi all'interno dei job di un determinato progetto. Lo scheduler fornisce equità finale. Durante brevi periodi, alcuni job potrebbero ricevere una quota sproporzionata di slot, ma lo scheduler alla fine corregge il problema. L'obiettivo dello scheduler è trovare un equilibrio tra l'eliminazione aggressiva delle attività in esecuzione (che si traduce in uno spreco di tempo di slot) e l'essere troppo permissivi (che si traduce in una quota sproporzionata del tempo di slot da parte dei job con attività a lunga esecuzione).

Se un job importante richiede costantemente più slot di quelli che riceve dallo scheduler, valuta la possibilità di creare una prenotazione aggiuntiva con un numero garantito di slot e di assegnare il job a quella prenotazione.

Buona pianificazione in BigQuery

Gli slot sono distribuiti equamente tra i progetti e poi all'interno dei job del progetto. Ciò significa che ogni query ha accesso a tutti gli slot disponibili in qualsiasi momento e la capacità viene riallocata in modo dinamico e automatico tra le query attive man mano che la capacità di ogni query cambia. Le query vengono completate e le nuove query vengono inviate per l'esecuzione alle seguenti condizioni:

  • Ogni volta che viene inviata una nuova query, la capacità viene riallocata automaticamente tra le query in esecuzione. Le singole unità di lavoro possono essere messe in pausa, riprese e messe in coda man mano che diventa disponibile ulteriore capacità per ogni query.
  • Ogni volta che una query viene completata, la capacità utilizzata da tale query diventa automaticamente disponibile immediatamente per tutte le altre query da utilizzare.
  • Ogni volta che la richiesta di capacità di una query cambia a causa di modifiche al DAG dinamico della query, BigQuery rivaluta automaticamente la disponibilità della capacità per questa e per tutte le altre query, riallocando e mettendo in pausa gli slot in base alle necessità.

Pianificazione di più query.

Una pianificazione equa in BigQuery

A seconda della complessità e delle dimensioni, una query potrebbe non richiedere tutti gli slot di cui ha diritto o potrebbero richiedere più slot. BigQuery garantisce dinamicamente che, data una pianificazione equa, tutti gli slot possano essere utilizzati completamente in qualsiasi momento.