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.
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,
- Un'etapa di query richiede 2000 slot, ma ne sono disponibili solo 1000.
- BigQuery consuma tutti i 1000 slot e mette in coda gli altri 1000.
- 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.
- 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 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à.
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 richiesto di slot e di assegnarlo a quella prenotazione.
Quote e limiti per gli slot
Le quote e i limiti di slot offrono una protezione 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 la sezione Monitoraggio di BigQuery.
Slot inattivi
In un determinato momento, alcuni slot potrebbero essere inattivi. ad esempio:
- Impegni di slot non allocati a nessun riferimento di prenotazione.
- Slot allocati a un riferimento di 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 in uso da un'altra prenotazione vengono rapidamente prelevati. 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 areservation_a
, che ha 500 slot di riferimento senza scalabilità automatica.project_b
è assegnato areservation_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 base 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 riferimento 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 timeout della query. Le query aggiuntive in project_b
rimangono in coda fino a quando non sono 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 scaling automatico 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 di 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.
Le assegnazioni 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.
Evita di fare affidamento solo su slot inattivi per i carichi di lavoro di produzione con requisiti di tempo rigorosi. Questi job devono utilizzare slot di riferimento o a 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 può verificarsi un prelievo preventivo di 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.