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:
-
Visualizza le risorse Bigtable:
- Bigtable Viewer (
roles/bigtable.viewer) - Bigtable Reader (
roles/bigtable.reader)
- Bigtable Viewer (
-
Visualizza i dati delle serie temporali di Monitoring:
Monitoring Viewer (
roles/monitoring.viewer)
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:
- Letture: tutti i metodi di lettura della libreria client, tra cui
letture di singole righe come
readRow, letture di più righe comereadRowsobulkReadRowscon più chiavi di riga e scansioni di intervalli o prefissi di riga comereadRowscon un intervallo o un prefisso, inviano una richiesta API di datiReadRows. - Scritture: i metodi di scrittura della libreria client inviano una richiesta
MutateRowper scritture semplici e aggiornamenti incrementali, una richiestaMutateRowsper scritture in batch, una richiestaCheckAndMutateRowper scritture condizionali o una richiestaReadModifyWriteRowper aggiunte e incrementi.
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
reversede 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:
- Lettura puntuale
- Scansione breve (per scansioni in avanti) o scansione breve inversa (quando
reversedè impostato sutrue) - Scansione inversa (per qualsiasi richiesta di lettura rimanente in cui
reversedè impostato sutrue) - 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)
- Lettura collettiva
- Altra lettura (per qualsiasi richiesta
ReadRowsrimanente)
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 API di dati: |
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 API di dati: |
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
API di dati: |
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
API di dati: |
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 API di dati: |
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-tasto API di dati: |
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 API di dati: |
Qualsiasi richiesta |
| Scrittura di punti | QUERY_TYPE_POINT_WRITE |
Scrittura semplice,
aggiornamento incrementale o
scrittura batch di piccole dimensioni, ad esempio
API di dati: |
Una richiesta |
| Altra scrittura | QUERY_TYPE_OTHER_WRITE |
Scrittura in batch di grandi dimensioni o scrittura semplice di grandi dimensioni, ad esempio API di dati: |
Qualsiasi richiesta |
| Lettura/scrittura | QUERY_TYPE_READ_WRITE |
Scrittura o aggiunta condizionale, ad esempio API di dati: |
Qualsiasi richiesta di scrittura condizionale ( |
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_filteroblock_all_filtercolumn_range_filter,column_qualifier_regex_filterofamily_name_regex_filtercells_per_column_limit_filter,cells_per_row_limit_filterocells_per_row_offset_filtertimestamp_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_filtervalue_range_filterrow_key_regex_filterrow_sample_filterinterleaveconditionsinkstrip_value_transformerapply_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
Nella console Google Cloud , apri l'elenco delle istanze Bigtable.
Fai clic sull'istanza di cui vuoi visualizzare le metriche.
Nel riquadro di navigazione, in Osservabilità, fai clic su Pattern di accesso.
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.
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
- Nessuno: opzione predefinita che suddivide tutti i grafici in base al pattern di accesso, ad esempio
(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
Nella console Google Cloud , apri l'elenco delle istanze Bigtable.
Fai clic sull'istanza di cui vuoi visualizzare le metriche.
Viene visualizzata la pagina di riepilogo dell'istanza.
Nella tabella dei cluster, fai clic sull'ID del cluster.
Nel riquadro di navigazione, fai clic su Pattern di accesso. La pagina mostra le metriche per il cluster selezionato.
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
- Nessuno: opzione predefinita che suddivide tutti i grafici in base al pattern di accesso, ad esempio
(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 |
| Latenza | Cluster Tabelle Profili app |
La latenza delle richieste lato server nel tempo, suddivisa per |
| QPS | Cluster Tabelle Profili app |
La frequenza delle richieste al secondo nel tempo, suddivisa per |
| 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,clusteretable - Etichette delle metriche:
query_type,app_profileemethod
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_READsu 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_READoQUERY_TYPE_OTHER_READche 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_SCANoQUERY_TYPE_REVERSE_SHORT_SCANfrequenti 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
- Monitora le prestazioni delle istanze con System Insights
- Analizza i pattern di utilizzo delle chiavi di riga con Key Visualizer
- Risolvi i problemi di latenza