Informazioni sugli slot

Uno slot BigQuery è una CPU virtuale usata 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 dei dati. Con un modello basato sulla capacità, puoi pagare per una capacità di elaborazione delle query dedicata o con scalabilità automatica. Il modello basato sulla capacità offre un controllo esplicito su slot e capacità di analisi, mentre il modello on demand no.

I clienti che utilizzano il modello di prezzi basato sulla capacità scelgono esplicitamente quanti slot prenotare. Le query vengono eseguite all'interno di questa capacità e paghi ogni secondo per la capacità di cui viene eseguito il deployment. Ad esempio, se acquisti 2000 slot BigQuery, le query in forma aggregata possono utilizzare soltanto 2000 CPU virtuali in qualsiasi momento. Questa capacità è disponibile fino a quando non la elimini e paghi per 2000 slot finché non li elimini.

I progetti sul modello di prezzi on demand di BigQuery sono soggetti a quota di slot per progetto con funzionalità di burst temporaneo. La maggior parte degli utenti nel modello on demand ritiene che la capacità 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 utilizza il tuo account, consulta Monitoraggio BigQuery.

Stima il numero di slot da acquistare

L'architettura di BigQuery è progettata per scalare in modo efficiente e aumentare le risorse. A seconda del carico di lavoro, la capacità incrementale probabilmente fornirà vantaggi incrementali. La scelta del numero ottimale di slot da acquistare dipende quindi dai requisiti di prestazioni, velocità effettiva e utilità.

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

Puoi anche esaminare l'utilizzo corrente degli slot da parte dei tuoi progetti, insieme al prezzo mensile scelto che vuoi pagare. I carichi di lavoro on demand hanno un limite di slot flessibile di 2000 slot, ma è importante verificare quanti slot vengono effettivamente utilizzati dai progetti mediante le viste INFORMATION_SCHEMA.JOBS*, Cloud Logging, l'API Jobs o gli audit log di BigQuery. Per saperne di più, consulta Visualizzare gli slot disponibili e gli slot assegnati.

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 della 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, composte a loro volta da insiemi di passaggi di esecuzione più granulari. BigQuery utilizza un'architettura parallela molto distribuita per eseguire queste query e le fasi modellano le unità di lavoro che molti potenziali worker potrebbero eseguire in parallelo. Le fasi comunicano tra loro tramite un'architettura di shuffle distribuita, di cui parleremo in maggiore dettaglio sul blog di Google Cloud.

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

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

Gli slot BigQuery eseguono singole unità di lavoro in ogni fase della query. Ad esempio, se BigQuery stabilisce che il fattore di parallelizzazione ottimale di una fase è 10, richiederà 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 l'esecuzione della query viene eseguita e man mano 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 un'indicazione del fattore di parallelizzazione più ottimale scelto da BigQuery per quella fase. Le unità di lavoro in coda e vengono eseguite man mano che gli slot diventano disponibili.

Quando le richieste di query superano gli slot impegnati, non ti viene addebitato alcun costo per gli slot aggiuntivi e non ti vengono addebitate tariffe on demand aggiuntive. Le tue singole unità di lavoro vengono messe 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. Dopodiché, se 100 slot terminano il lavoro, scelgono dinamicamente 100 unità di lavoro dalle 1000 unità di lavoro in coda. Rimangono 900 unità di lavoro in coda.
  4. Dopodiché, se 500 slot terminano il lavoro, scelgono dinamicamente 500 unità di lavoro dalle 900 in coda. Rimangono 400 unità di lavoro in coda.

Pianificazione degli slot.

Slot di BigQuery in coda se la domanda supera la disponibilità

Slot inattivi

Alcuni slot potrebbero essere inattivi in un determinato momento. Questi possono includere:

  • Impegni slot non assegnati a nessuna prenotazione.
  • Slot assegnati a una base di 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 fino a quando dispone della capacità. La capacità inattiva è immediatamente prerilasciabile alla prenotazione originale assegnata in base alle esigenze, indipendentemente dalla priorità della query che richiede le risorse. Questo avviene automaticamente in tempo reale.

Per evitare questo comportamento e assicurarti che una prenotazione utilizzi solo gli slot di cui è stato eseguito il provisioning, imposta ignore_idle_slots su true. Le prenotazioni con ignore_idle_slots impostato su true possono tuttavia condividere i propri slot inattivi con altre prenotazioni.

Non puoi condividere 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 condivisibili perché potrebbero fare lo scale down.

Finché ignore_idle_slots è false, una prenotazione può avere un numero di slot pari a 0 e avere comunque accesso agli slot inutilizzati. Se utilizzi solo la prenotazione default, disattiva ignore_idle_slots come best practice. Puoi quindi assegnare un progetto o una cartella alla prenotazione, che utilizzerà solo gli 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 solo per altri job di query 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 fair schedule.

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 l'equità finale. Durante periodi brevi, alcuni job potrebbero ricevere una quota sproporzionata di slot, ma lo scheduler alla fine la corregge. L'obiettivo dello scheduler è trovare un equilibrio tra l'eliminazione aggressiva delle attività in esecuzione (il che comporta uno spreco di tempo degli slot) e l'essere troppo permissivi (il che si traduce in job con attività di lunga durata che ottengono una quota sproporzionata del tempo di slot).

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.

Pianificazione equa in BigQuery

Gli slot sono distribuiti equamente tra i progetti e quindi all'interno dei job all'interno 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 domanda di capacità di ogni query cambia. Le query 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 per le query in esecuzione. Le singole unità di lavoro possono essere messe in pausa, ripristinate e messe in coda con la massima facilità man mano che diventa disponibile più capacità per ogni query.
  • Al completamento di una query, la capacità utilizzata da quella query diventa automaticamente disponibile per tutte le altre query.
  • 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 esigenze.

Pianificazione di più query.

Pianificazione equa in BigQuery

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