Analizza i pattern di accesso

Puoi analizzare visivamente il modo in cui le tue applicazioni leggono e scrivono i dati in Bigtable utilizzando la pagina Pattern di accesso in Google Cloud consoleoppure puoi chiamare l'API Cloud Monitoring in modo programmatico per eseguire query sulle metriche dei pattern di accesso sottostanti.

Prima di leggere questo documento, consulta Letture, Scritture e Monitoraggio.

Panoramica

Bigtable classifica automaticamente le richieste di dati in entrata in tipi di query in Cloud Monitoring. Il pattern di accesso del tuo workload è la combinazione di diversi tipi di query. Ad esempio, il pattern di accesso al workload può essere costituito da tipi di query di lettura puntuale, scansione breve e scrittura puntuale. Bigtable definisce 10 tipi di query distinti.

Mentre la pagina Insight di sistema mostra l'utilizzo complessivo delle risorse e Key Visualizer mostra come Bigtable distribuisce il traffico tra gli intervalli di chiavi di riga, la pagina Pattern di accesso fornisce una suddivisione incentrata sulle query del workload a livello di cluster, tabella e profilo dell'app. Puoi utilizzare la pagina Pattern di accesso per le seguenti attività:

  • Comprendi il tuo workload: visualizza la proporzione e la frequenza dei tipi di query di lettura, scrittura e lettura/scrittura per ogni cluster e raggruppa le metriche per tabella o profilo dell'app
  • Rileva pattern di query inefficienti e risolvi i problemi di latenza:
    • Identifica le letture sparse in cui Bigtable analizza un numero di righe o celle significativamente superiore a quello restituito a causa di filtri selettivi o di celle non raccolte in attesa di garbage collection
    • Monitora le scansioni inverse, che sono meno efficienti delle scansioni in avanti
    • Confronta i percentili di latenza lato server con le righe scansionate, le righe restituite e le celle visualizzate per individuare i pattern di accesso che contribuiscono ai picchi di latenza
  • Identifica i workload per l'adozione delle funzionalità:
    • Identifica le tabelle o i profili dell'applicazione con volumi elevati di letture puntuali che possono trarre vantaggio dal livello in memoria nella versione Enterprise Plus
    • Identifica i workload di scansione di grandi dimensioni o di lettura batch che puoi isolare dal traffico di produzione utilizzando il serverless computing di Data Boost

Limitazioni

Bigtable non classifica le query GoogleSQL per Bigtable come pattern di accesso e non le include nelle metriche dei pattern di accesso a righe, celle o byte. Nei grafici Distribuzione QPS, QPS e Latenza, le query SQL e altre richieste non classificate vengono visualizzate come QUERY_TYPE_UNKNOWN.

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per visualizzare la pagina Pattern di accesso nella console Google Cloud , chiedi all'amministratore di concederti i seguenti ruoli IAM nel progetto:

Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

Questi ruoli predefiniti contengono le autorizzazioni necessarie per visualizzare la pagina Pattern di accesso nella console Google Cloud . Per vedere quali sono esattamente le autorizzazioni richieste, espandi la sezione Autorizzazioni obbligatorie:

Autorizzazioni obbligatorie

Per visualizzare la pagina Pattern di accesso nella console Google Cloud , sono necessarie le seguenti autorizzazioni:

  • Visualizza i dettagli dell'istanza: bigtable.instances.get
  • Elenca cluster, profili di app e tabelle: bigtable.clusters.list, bigtable.appProfiles.list, bigtable.tables.list
  • Metriche di Monitoring delle query: monitoring.timeSeries.list

Potresti anche ottenere queste autorizzazioni con ruoli personalizzati o altri ruoli predefiniti.

Pattern di accesso

Quando la tua applicazione utilizza una libreria client di Bigtable, la libreria client traduce le chiamate ai metodi in richieste API Bigtable Data:

Bigtable classifica ogni richiesta API di dati in entrata sul server dopo il completamento, in base ai seguenti fattori, anziché solo al nome del metodo della libreria client:

  • Parametri della richiesta: se la richiesta ha come target una singola chiave di riga, più chiavi di riga o un intervallo di righe, se la richiesta imposta reversed e quali filtri applica
  • Statistiche di esecuzione: il numero di righe e celle scansionate e restituite e il payload in byte

Ad esempio, quando chiami un metodo di lettura di una singola riga come readRow o chiami readRows con una singola chiave di riga, Bigtable in genere classifica la richiesta come lettura puntuale, idonea per il livello in memoria. Tuttavia, se la lettura di una singola riga utilizza un filtro complesso o analizza un numero elevato di celle, Bigtable potrebbe classificarla come lettura sparsa, lettura collettiva o altra lettura. Al contrario, se chiami readRows per leggere più chiavi di riga o scansionare un intervallo di righe, Bigtable classifica la richiesta come lettura o scansione collettiva, che non è idonea per il livello in memoria.

Ordine di valutazione delle letture

Poiché una singola richiesta API di dati ReadRows può corrispondere alle caratteristiche di più categorie, Bigtable valuta le richieste di lettura nel seguente ordine e assegna il primo pattern di accesso corrispondente:

  1. Lettura puntuale
  2. Scansione breve (per scansioni in avanti) o scansione breve inversa (quando reversed è impostato su true)
  3. Scansione inversa (per qualsiasi richiesta di lettura rimanente in cui reversed è impostato su true)
  4. Lettura sparse (valutata prima della lettura collettiva in modo che Bigtable contrassegni le letture di più chiavi o le scansioni in avanti più grandi con un'eliminazione dei filtri pesante come sparse)
  5. Lettura collettiva
  6. Altra lettura (per qualsiasi richiesta ReadRows rimanente)

Definizioni dei tipi di query

La tabella seguente descrive ogni categoria di pattern di accesso, la relativa etichetta query_type in Monitoring, le operazioni tipiche della libreria client e il metodo API di dati sottostante (etichetta della metrica method) a cui si applica, nonché il modo in cui Bigtable classifica le richieste in quella categoria. Poiché i nomi dei metodi variano in base al linguaggio di programmazione, la tabella elenca i nomi dei metodi delle librerie client rappresentativi. Per esempi di codice specifici per linguaggio, consulta Esempi di lettura ed Esempi di scrittura. Per informazioni sui filtri semplici e complessi, consulta la sezione Filtri semplici e filtri complessi di questo documento.

Tipo di query Etichetta della metrica query_type Operazione client e metodo API di dati Criteri di classificazione
Lettura puntuale QUERY_TYPE_POINT_READ

Lettura di una singola riga, ad esempio readRow o readRows con una singola chiave

API di dati: ReadRows

Una lettura in avanti di una singola chiave di riga che non utilizza Nessuno o utilizza un filtro semplice, in cui il numero di celle scansionate e restituite e la dimensione totale della risposta rimangono entro limiti ridotti per una singola riga.

Scansione breve QUERY_TYPE_SHORT_SCAN

Scansione di un intervallo o di un prefisso di righe, ad esempio readRows con un singolo intervallo o prefisso

API di dati: ReadRows

Una scansione in avanti di un singolo intervallo di righe contigue che non utilizza Nessuno o utilizza un filtro semplice, in cui il numero di righe e celle scansionate e restituite e la dimensione totale della risposta rimangono entro limiti ridotti.

Scansione breve inversa QUERY_TYPE_REVERSE_SHORT_SCAN

Scansione inversa, ad esempio readRows con un singolo intervallo o prefisso in ordine inverso

API di dati: ReadRows

Una scansione inversa di un singolo intervallo di righe contigue che non utilizza Nessuno o utilizza un filtro semplice e rimane entro gli stessi limiti di righe, celle e byte di una scansione breve.

Scansione inversa QUERY_TYPE_REVERSE_SCAN

Scansione inversa, ad esempio readRows al contrario

API di dati: ReadRows

Qualsiasi lettura inversa che non si qualifica come scansione breve inversa, ad esempio una scansione inversa che supera i limiti di riga, cella o byte della scansione breve, specifica singole chiavi di riga, esegue la scansione di più intervalli di righe o utilizza un filtro complesso.

Lettura sparsa QUERY_TYPE_SPARSE_READ

Lettura filtrata o scansione di celle non raccolte, utilizzando readRow o readRows

API di dati: ReadRows

Qualsiasi richiesta di lettura in avanti (valutata dopo la lettura di un punto, la scansione breve e la scansione inversa) in cui Bigtable scansiona un numero di righe o celle significativamente superiore a quello restituito a causa dell'eliminazione dei filtri o di celle non raccolte in attesa di garbage collection.

Lettura collettiva QUERY_TYPE_BULK_READ

Lettura multi-riga, come ad esempio multi-tastoreadRows ObulkReadRows, o un grande lettura a riga singola utilizzandoreadRow

API di dati: ReadRows

Una lettura in avanti che specifica una o più chiavi di riga senza filtro o con un filtro semplice, supera i limiti di lettura puntuale (ad esempio, richiede più chiavi di riga o legge una singola riga di grandi dimensioni) e non è idonea come lettura sparse.

Altra lettura QUERY_TYPE_OTHER_READ

Scansione di intervalli di grandi dimensioni, scansione di più intervalli o lettura filtrata utilizzando readRow o readRows

API di dati: ReadRows

Qualsiasi richiesta ReadRows che non corrisponde alle categorie di lettura precedenti, ad esempio scansioni di intervalli in avanti di grandi dimensioni, scansioni di più intervalli, richieste che combinano chiavi di riga e intervalli di righe o letture con filtri complessi che non sono idonei come sparse.

Scrittura di punti QUERY_TYPE_POINT_WRITE

Scrittura semplice, aggiornamento incrementale o scrittura batch di piccole dimensioni, ad esempio mutateRow o bulkMutateRows

API di dati: MutateRow, MutateRows

Una richiesta MutateRow di una singola riga o una piccola richiesta batch MutateRows che modifica un numero ridotto di righe e celle con un payload di byte totali ridotto.

Altra scrittura QUERY_TYPE_OTHER_WRITE

Scrittura in batch di grandi dimensioni o scrittura semplice di grandi dimensioni, ad esempio bulkMutateRows o mutateRow

API di dati: MutateRow, MutateRows

Qualsiasi richiesta MutateRow o MutateRows che supera i limiti di scrittura puntuale, ad esempio scritture in batch più grandi o scritture con un numero elevato di mutazioni o payload di byte.

Lettura/scrittura QUERY_TYPE_READ_WRITE

Scrittura o aggiunta condizionale, ad esempio checkAndMutateRow o readModifyWriteRow

API di dati: CheckAndMutateRow, ReadModifyWriteRow

Qualsiasi richiesta di scrittura condizionale (CheckAndMutateRow) o di incremento o aggiunta atomica (ReadModifyWriteRow), indipendentemente dalle dimensioni del payload.

Nelle metriche relative al numero di richieste e alla latenza, Bigtable etichetta le richieste non classificate, come le query GoogleSQL per Bigtable, come QUERY_TYPE_UNKNOWN.

Filtri semplici e filtri complessi a confronto

Per essere considerata una lettura di un punto, una scansione breve, una scansione breve inversa o una lettura collettiva, una richiesta ReadRows non deve utilizzare Nessuno o un filtro semplice.

Bigtable classifica un filtro come semplice se utilizza solo i seguenti tipi di filtri, da soli o combinati in un filtro chain limitato. Per saperne di più, consulta Catena.

  • Nessun filtro (FILTER_NOT_SET)
  • pass_all_filter o block_all_filter
  • column_range_filter, column_qualifier_regex_filter o family_name_regex_filter
  • cells_per_column_limit_filter, cells_per_row_limit_filter o cells_per_row_offset_filter
  • timestamp_range_filter

Bigtable considera qualsiasi richiesta ReadRows come se utilizzasse un filtro complesso se la richiesta utilizza un tipo di filtro non presente nell'elenco precedente, ad esempio i seguenti, o se concatena un numero elevato di filtri:

  • value_regex_filter
  • value_range_filter
  • row_key_regex_filter
  • row_sample_filter
  • interleave
  • condition
  • sink
  • strip_value_transformer
  • apply_label_transformer

Bigtable classifica queste richieste come scansione inversa se reversed è true, altrimenti come lettura sparsa (se analizza un numero di righe o celle significativamente superiore a quello restituito) o un'altra lettura.

Visualizza i pattern di accesso

Puoi visualizzare la pagina Pattern di accesso nella console Google Cloud a livello di istanza o di cluster.

Visualizza i pattern di accesso in visualizzazione per un'istanza

  1. Nella console Google Cloud , apri l'elenco delle istanze Bigtable.

    Apri l'elenco delle istanze

  2. Fai clic sull'istanza di cui vuoi visualizzare le metriche.

  3. Nel riquadro di navigazione, in Osservabilità, fai clic su Pattern di accesso.

  4. Nell'elenco Cluster, seleziona il cluster di cui vuoi esaminare i pattern di accesso. Per impostazione predefinita, la console Google Cloud seleziona il primo cluster nell'istanza.

  5. Nell'elenco Raggruppa per, scegli come suddividere i grafici:

    • Nessuno: opzione predefinita che suddivide tutti i grafici in base al pattern di accesso, ad esempio QUERY_TYPE_POINT_READ
    • Profilo app: suddivide tutti i grafici in base all'ID profilo dell'applicazione e al pattern di accesso
    • Tabella: suddivide tutti i grafici in base all'ID tabella e al pattern di accesso
  6. (Facoltativo) Per modificare l'intervallo di tempo o attivare/disattivare l'aggiornamento automatico, utilizza il selettore dell'intervallo di tempo.

Visualizza i pattern di accesso in visualizzazione per un cluster

  1. Nella console Google Cloud , apri l'elenco delle istanze Bigtable.

    Apri l'elenco delle istanze

  2. Fai clic sull'istanza di cui vuoi visualizzare le metriche.

    Viene visualizzata la pagina di riepilogo dell'istanza.

  3. Nella tabella dei cluster, fai clic sull'ID del cluster.

  4. Nel riquadro di navigazione, fai clic su Pattern di accesso. La pagina mostra le metriche per il cluster selezionato.

  5. Nell'elenco Raggruppa per, scegli come suddividere i grafici:

    • Nessuno: opzione predefinita che suddivide tutti i grafici in base al pattern di accesso, ad esempio QUERY_TYPE_POINT_READ
    • Profilo app: suddivide tutti i grafici in base all'ID profilo dell'applicazione e al pattern di accesso
    • Tabella: suddivide tutti i grafici in base all'ID tabella e al pattern di accesso
  6. (Facoltativo) Per modificare l'intervallo di tempo o attivare/disattivare l'aggiornamento automatico, utilizza il selettore dell'intervallo di tempo.

Grafici e metriche nella pagina dei pattern di accesso

La pagina Pattern di accesso fornisce grafici per le seguenti metriche:

Metrica Disponibile per Descrizione
Distribuzione QPS Cluster
Tabelle
Profili app

La proporzione e la frequenza media delle richieste al secondo (QPS) aggregate nell'intero intervallo di tempo selezionato per il cluster, suddivise per query_type e l'opzione Raggruppa per selezionata.

Latenza Cluster
Tabelle
Profili app

La latenza delle richieste lato server nel tempo, suddivisa per query_type e l'opzione Raggruppa per selezionata. Utilizza il menu Percentile nel grafico per passare dal 99° percentile (predefinito) al 95° percentile e al 50° percentile.

QPS Cluster
Tabelle
Profili app

La frequenza delle richieste al secondo nel tempo, suddivisa per query_type e l'opzione Raggruppa per selezionata.

Righe restituite Cluster
Tabelle
Profili app

Il numero di righe che Bigtable restituisce al client al secondo per le richieste di lettura e lettura/scrittura dopo l'applicazione dei filtri.

Righe scansionate Cluster
Tabelle
Profili app

Il numero di righe lette da Bigtable al secondo durante l'elaborazione delle richieste di lettura e di lettura/scrittura, prima di applicare i filtri. Il confronto tra Righe analizzate e Righe restituite ti aiuta a identificare i filtri di lettura inefficienti.

Righe modificate Cluster
Tabelle
Profili app

Il numero di righe modificate al secondo dalle richieste di scrittura e di lettura/scrittura.

Celle visualizzate Cluster
Tabelle
Profili app

Il numero di celle che Bigtable ispeziona al secondo durante le richieste di lettura e di lettura/scrittura prima di applicare i filtri, incluse le celle che vengono filtrate o che sono in attesa di garbage collection.

Celle inviate Cluster
Tabelle
Profili app

Il numero di celle che Bigtable restituisce al client al secondo dopo l'applicazione dei filtri. Il confronto tra Celle visualizzate e Celle inviate ti aiuta a identificare le richieste di lettura che ispezionano molte celle per ogni cella restituita.

Byte inviati Cluster
Tabelle
Profili app

Il numero di byte di dati di riga codificati restituiti al secondo.

Puoi anche eseguire query su queste metriche in modo programmatico utilizzando l'API Cloud Monitoring, visualizzarle in Metrics Explorer o aggiungerle a dashboard personalizzate. Ogni metrica bigtable.googleapis.com/query_type/* sulla risorsa monitorata bigtable_table include le seguenti etichette:

  • Etichette delle risorse: project_id, instance, cluster e table
  • Etichette delle metriche: query_type, app_profile e method

Per saperne di più sull'esecuzione di query sulle metriche di Bigtable in Monitoring, consulta Monitora con Monitoring e Metriche.

Ottimizza i workload in base ai pattern di accesso

Puoi utilizzare le metriche nella pagina Pattern di accesso per prendere le seguenti decisioni:

  • Abilita il livello in-memory per letture puntuali a bassa latenza: se i grafici Distribuzione QPS, QPS e Latenza mostrano un volume elevato di richieste QUERY_TYPE_POINT_READ su tabelle o profili di app con target di latenza di lettura rigorosi, valuta la possibilità di abilitare il livello in-memory disponibile nella versione Enterprise Plus. Raggruppa i grafici per Tabella o Profilo app per identificare le tabelle e i workload che trarranno i maggiori vantaggi.
  • Isola le scansioni di grandi dimensioni e le letture batch con Data Boost: se osservi volumi elevati o picchi periodici di richieste QUERY_TYPE_BULK_READ o QUERY_TYPE_OTHER_READ che condividono un cluster con traffico di pubblicazione sensibile alla latenza, raggruppa per Profilo app per identificare l'origine delle scansioni. Instrada le letture di batch, report o analisi tramite un profilo dell'app dedicato configurato per l'utilizzo del serverless computing di Data Boost, in modo che le scansioni di grandi dimensioni non competano con i nodi di distribuzione per le risorse della CPU.
  • Riduci l'overhead dei filtri e ottimizza la garbage collection: se vedi un tasso elevato di richieste QUERY_TYPE_SPARSE_READ, se le righe scansionate sono molto più alte delle righe restituite o se le celle visualizzate sono molto più alte delle celle inviate, le richieste di lettura stanno scansionando dati che Bigtable non restituisce al client. Per migliorare l'efficienza di lettura, segui questi passaggi:
    • Restringi gli intervalli o i prefissi chiave di riga nella richiesta di lettura anziché fare affidamento su filtri di valori o espressioni regolari per ignorare le righe.
    • Includi un filtro per il limite di celle, ad esempio cells_per_column_limit_filter, quando la tua applicazione richiede solo le versioni più recenti delle celle. Per ulteriori informazioni, consulta Limite di celle per colonna.
    • Rivedi le policy di garbage collection in modo che le versioni delle celle scadute o obsolete non si accumulino e rallentino le scansioni. Per saperne di più, consulta la panoramica sulla garbage collection.
  • Sostituisci le scansioni inverse con scansioni in avanti: se osservi richieste QUERY_TYPE_REVERSE_SCAN o QUERY_TYPE_REVERSE_SHORT_SCAN frequenti con latenza elevata, valuta la possibilità di progettare le chiavi di riga in modo che l'applicazione possa eseguire scansioni in avanti. Per saperne di più, consulta Best practice per la progettazione degli schemi.

Passaggi successivi