Informazioni sugli slot

Uno slot BigQuery è un'unità di calcolo virtuale utilizzata da BigQuery per eseguire query SQL o altri tipi di job. Durante l'esecuzione di una query, BigQuery determina automaticamente quanti slot vengono utilizzati dalla query. Il numero di slot utilizzati dipende dalla quantità di dati elaborati, dalla complessità della query e dal numero di slot disponibili. In generale, l'accesso a più slot ti consente di eseguire più query contemporaneamente e le query complesse possono essere eseguite più velocemente.

Sebbene tutte le query utilizzino gli slot, hai due opzioni per la fatturazione dell'utilizzo: il modello di prezzo on demand o il modello di prezzo basato sulla capacità.

Per impostazione predefinita, l'addebito avviene utilizzando il modello on demand. Con questo modello, ti viene addebitato il costo della quantità di dati elaborati (misurata in TiB) da ogni query. I progetti che utilizzano il modello on demand sono soggetti a limiti di slot per progetto e per organizzazione con capacità di picco transitorio. La maggior parte degli utenti che utilizzano il modello on demand ritiene i limiti di capacità degli slot più che sufficienti. Tuttavia, a seconda del carico di lavoro, l'accesso a più slot potrebbe migliorare le prestazioni delle query. Per verificare quanti slot utilizza il tuo account, consulta Monitoraggio di BigQuery.

Con il modello basato sulla capacità, paghi la capacità dello slot allocata per le tue query nel tempo. Questo modello ti offre un controllo esplicito sulla capacità totale degli slot, diversamente dal modello on demand. Scegli esplicitamente il numero di slot da utilizzare tramite una prenotazione. Puoi specificare il numero di slot in una prenotazione come valore di riferimento che viene sempre allocato o come valore a scalabilità automatica, che viene allocato in base alle esigenze.

Esecuzione di query utilizzando gli slot

Quando BigQuery esegue un job di query, converte l'istruzione SQL in un piano di esecuzione suddiviso in una serie di fasi di query, che a loro volta sono composte da insiemi più granulari di passaggi di esecuzione. BigQuery utilizza un'architettura parallela fortemente distribuita per eseguire queste query e le fasi modellano le unità di lavoro che molti potenziali worker possono eseguire in parallelo. I dati vengono trasmessi tra le fasi utilizzando una rapida architettura di smistamento distribuita, discussa più dettagliatamente nel Google Cloud blog.

L'esecuzione delle query di BigQuery è dinamica, il che significa che il piano delle query può essere modificato mentre una query è in esecuzione. Le fasi introdotte durante l'esecuzione di una query vengono spesso utilizzate per migliorare la distribuzione dei dati tra i worker di query. Inoltre, l'esecuzione delle query potrebbe essere influenzata dalla variazione della quantità di capacità disponibile man mano che altre query completano o iniziano l'esecuzione oppure se gli slot vengono aggiunti alla prenotazione dall'autoscaler.

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

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

Slot query.

Grafico di esecuzione delle query di fasi e passaggi

Risparmio di risorse per gli slot

Se una query richiede più slot di quelli disponibili, BigQuery aggiunge singole unità di lavoro alla coda e attende che gli slot diventino disponibili. Man mano che l'esecuzione delle query procede e gli slot diventano disponibili, queste unità di lavoro in coda vengono acquisite in modo dinamico per l'esecuzione.

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

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

Ad esempio,

  1. Un'etapa 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.
  3. In seguito, se 100 slot completano il loro lavoro, raccolgono 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 completano il loro lavoro, raccolgono dinamicamente 500 unità di lavoro dalle 900 unità di lavoro in coda. Rimangono 400 unità di lavoro in coda.

Pianificazione degli slot.

Slot BigQuery in coda se la domanda supera la disponibilità

Pianificazione equa in BigQuery

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

Il programmatore BigQuery applica la condivisione equa degli slot tra i progetti con query in esecuzione all'interno di una prenotazione e poi all'interno dei job di un determinato progetto. Il programmatore garantisce l'equità finale. Per brevi periodi, alcuni job potrebbero ricevere una quota sproporzionata di slot, ma lo schedulatore corregge infine il problema. Lo scopo dello scheduler è trovare un equilibrio tra l'espulsione aggressiva delle attività in esecuzione (che comporta un inutile spreco di tempo di slot) e un atteggiamento troppo permissivo (che comporta l'assegnazione a job con attività in esecuzione prolungata di una quota sproporzionata del tempo di slot).

La programmazione equa garantisce che ogni query abbia accesso a tutti gli slot disponibili in qualsiasi momento e che la capacità venga riallocata dinamicamente e automaticamente tra le query attive man mano che le richieste di capacità di ciascuna query cambiano. 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 in modo graduale man mano che diventa disponibile più capacità per ogni query.
  • Ogni volta che una query viene completata, la capacità consumata dalla query diventa automaticamente disponibile per tutte le altre query.
  • Ogni volta che la domanda 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.

Pianificazione equa in BigQuery

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

Se un job importante ha costantemente bisogno di più slot di quelli che riceve dall'organizzatore, valuta la possibilità di creare una prenotazione aggiuntiva con il numero di slot richiesto e di assegnare il job a quella prenotazione.

Come esempio di pianificazione equa, supponiamo di avere la seguente configurazione delle prenotazioni:

  • Prenotazione A, con 1000 slot di riferimento senza scalabilità automatica
  • Progetto A e progetto B, assegnati alla prenotazione

Scenario 1: nel progetto A esegui la query A (una query simultanea) che richiede un utilizzo elevato degli slot e nel progetto B esegui 20 query simultanee. Anche se ci sono un totale di 21 query che utilizzano la prenotazione A, la distribuzione degli slot è la seguente:

  • Il progetto A riceve 500 slot e la query A viene eseguita con 500 slot.
  • Il progetto B riceve 500 slot condivisi tra le sue 20 query.

Scenario 2: nel progetto A esegui la query A (una query simultanea) che richiede 100 slot per l'esecuzione e nel progetto B esegui 20 query simultanee. Poiché la query A non richiede il 50% della prenotazione, la distribuzione degli slot è la seguente:

  • Il progetto A riceve 100 slot e la query A viene eseguita con 100 slot.
  • Il progetto B riceve 900 slot condivisi tra le sue 20 query.

Al contrario, considera la seguente configurazione della prenotazione:

  • Prenotazione B, con 1000 slot di riferimento senza scalabilità automatica.
  • 10 progetti, tutti assegnati alla prenotazione B.

Supponiamo che i 10 progetti eseguano query con una domanda di slot sufficiente, quindi ogni progetto riceve 1/10 del totale gli slot di prenotazione (o 100 slot), indipendentemente dal numero di query in esecuzione in ogni progetto.

Quote e limiti per gli slot

Le quote e i limiti di slot forniscono una salvaguardia per BigQuery. Modelli di determinazione del prezzo diversi utilizzano tipi di quote di slot diversi, come segue:

  • Modello di prezzi on demand: sei soggetto a un limite di slot per progetto e organizzazione con capacità di picco temporaneo. A seconda dei tuoi carichi di lavoro, l'accesso a più slot può migliorare le prestazioni delle query.

  • Modello di determinazione dei prezzi in base alla capacità: le quote e i limiti per le prenotazioni definiscono il numero massimo di slot che puoi allocare a tutte le prenotazioni in una località. Ti vengono addebitati solo le prenotazioni e gli impegni, non le quote. Per informazioni su come aumentare la quota di slot, consulta Richiedere un aumento della quota.

Per verificare quanti slot stai utilizzando, consulta Monitoraggio di BigQuery.

Slot inattivi

In qualsiasi momento, alcuni slot potrebbero essere inattivi. ad esempio:

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

Gli slot inattivi non sono applicabili quando utilizzi il modello di prezzo on demand.

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. BigQuery alloca immediatamente gli slot a una prenotazione assegnata quando sono necessari. Gli slot inattivi utilizzati da un'altra prenotazione vengono rapidamente precompitati. Per un breve periodo di tempo potresti notare che il consumo totale degli slot supera il massimo specificato per tutte le prenotazioni, ma non ti verrà addebitato alcun costo per questo utilizzo aggiuntivo degli slot.

Ad esempio, immagina di avere la seguente configurazione delle prenotazioni:

  • project_a è assegnato a reservation_a, che dispone di 500 slot di riferimento senza scalabilità automatica.
  • project_b è assegnato a reservation_b, che ha 100 slot di riferimento senza scalabilità automatica.
  • Entrambe le prenotazioni si trovano nello stesso progetto amministrativo e non sono assegnati altri progetti a queste prenotazioni.

Esegui query_b in project_b. Se non è in esecuzione alcuna query in project_a, query_b ha accesso ai 500 slot inutilizzati di reservation_a. Mentre query_b è ancora in esecuzione, potrebbe utilizzare fino a 600 slot: 100 slot di riferimento più 500 slot inattivi.

Mentre query_b è in esecuzione, supponiamo che tu esegua query_a in project_a, che può usare 500 slot.

  • Poiché hai 500 slot di base riservati per project_a, query_a si avvia immediatamente e vengono allocati 500 slot.
  • Il numero di slot allocati a query_b diminuisce rapidamente fino a 100 slot di base.
  • Le query aggiuntive eseguite in project_b condividono questi 100 slot. Se le query successive non dispongono di slot sufficienti per l'avvio, vengono messe in coda fino al completamento delle query in esecuzione e alla disponibilità degli slot.

In questo esempio, se project_b è stato assegnato a una prenotazione senza slot di base o scalabilità automatica, query_b non avrà slot dopo l'avvio di query_a. BigQuery mette in pausa query_b finché non sono disponibili slot inattivi o non scade il tempo di attesa della query. Le query aggiuntive in project_b verranno messe in coda fino a quando non saranno disponibili slot inattivi.

Per assicurarti che una prenotazione utilizzi solo gli spazi di cui è stato eseguito il provisioning, imposta ignore_idle_slots su true. Tuttavia, le prenotazioni con ignore_idle_slots impostato su true possono condividere gli slot inattivi con altre prenotazioni.

Non puoi condividere gli slot inattivi tra prenotazioni di versioni diverse. Puoi condividere solo gli slot di riferimento o quelli assegnati. Gli slot con scalabilità automatica potrebbero essere temporaneamente disponibili, ma non sono condivisibili come slot inattivi per altre prenotazioni perché potrebbero essere ridotti.

Finché ignore_idle_slots è false, una prenotazione può avere un conteggio degli slot di 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 in quanto gli slot utilizzati dai job di creazione di modelli esterni di BigQuery ML non sono preassegnabili. Gli slot di una prenotazione con tipi di assegnazione sia ML_EXTERNAL che QUERY sono disponibili per altri job di query solo quando non sono occupati dai job ML_EXTERNAL. Inoltre, questi job non possono utilizzare gli slot inattivi di altre prenotazioni.

Equità basata sulle prenotazioni

Con l'equità basata sulle prenotazioni, BigQuery assegna la priorità e alloca gli slot inutilizzati in modo equo a tutte le prenotazioni all'interno dello stesso progetto amministrativo, indipendentemente dal numero di progetti che eseguono job in ogni prenotazione. Ogni prenotazione riceve una quota simile di capacità disponibile nel pool di slot inutilizzati e gli slot vengono distribuiti equamente all'interno dei progetti. Questa funzionalità è supportata solo con le versioni Enterprise o Enterprise Plus.

Il seguente grafico mostra come vengono distribuiti gli slot inattivi se non è attivata l'equità basata sulle prenotazioni:

Gli slot inattivi vengono condivisi tra i progetti.

In questo grafico, gli slot inutilizzati vengono condivisi equamente tra i progetti.

Se non è attivata l'equità basata sulle prenotazioni, gli slot inattivi disponibili vengono distribuiti equamente tra i progetti all'interno delle prenotazioni.

Il seguente grafico mostra come vengono distribuiti gli slot inattivi quando è attivata l'equità basata sulle prenotazioni:

Gli slot inattivi vengono condivisi tra le prenotazioni.

In questo grafico, gli slot inutilizzati vengono condivisi equamente tra le prenotazioni, non tra i progetti.

Se l'equità basata sulle prenotazioni è attivata, gli slot inattivi disponibili vengono distribuiti equamente tra le prenotazioni.

Quando attivi l'equità basata sulle prenotazioni, controlla il consumo di risorse per gestire la disponibilità degli slot e le prestazioni delle query.

Evita di fare affidamento esclusivamente su slot inattivi per carichi di lavoro di produzione con requisiti di tempo rigorosi: questi job dovrebbero utilizzare slot di riferimento o con scalabilità automatica. Ti consigliamo di utilizzare gli slot inattivi per i job con priorità inferiore, in quanto possono essere prelevati in qualsiasi momento.

Utilizzo eccessivo degli slot

Quando un job mantiene gli slot per troppo tempo, può ricevere una quota ingiusta di slot. Per evitare ritardi, BigQuery consente ad altri job di prendere in prestito altri slot, con conseguente utilizzo totale degli slot superiore alla capacità specificata. L'eventuale utilizzo eccessivo degli slot viene attribuito solo ai job che ricevono più della loro quota equa.

Gli slot in eccesso non ti vengono addebitati direttamente. I job continuano invece a essere eseguiti e ad accumulare l'utilizzo degli slot in base alla loro quota fino a quando tutto l'utilizzo in eccesso non viene coperto dalla capacità allocata. Gli slot in eccesso sono esclusi dall'utilizzo degli slot registrato, ad eccezione di alcune statistiche dettagliate sull'esecuzione.

Tieni presente che è possibile prelevare alcuni slot per ridurre i ritardi futuri e offrire altri vantaggi, come la riduzione della variabilità del costo degli slot e della latenza del tempo di coda. Il prestito di slot è limitato a una piccola parte della tua capacità totale di slot.