Questa pagina descrive le metriche di latenza fornite da Cloud Spanner. Se la tua applicazione presenta un'elevata latenza, utilizza queste metriche per diagnosticare e risolvere il problema.
Puoi visualizzare queste metriche nella console Google Cloud e nella console Cloud Monitoring. La pagina Monitoring nella console Google Cloud mostra due metriche relative alla latenza. Il primo è per la latenza e il secondo per la latenza in base al tipo di transazione.
Latenza
Le metriche di latenza per Spanner misurano il tempo impiegato da Spanner per elaborare le funzioni di richiesta di lettura (Read
, StreamingRead
, ExecuteSql
, StreamingExecuteSql
, ExecuteBatchDml
) o di scrittura (Commit
). Seleziona "Lettura/scrittura" per visualizzare le metriche di entrambe. La metrica acquisisce la quantità effettiva di tempo trascorso, non la quantità di CPU utilizzata da Spanner.
Queste metriche di latenza non includono la latenza che si verifica al di fuori di Spanner, ad esempio la latenza di rete e la latenza all'interno del livello dell'applicazione. Per misurare altri tipi di latenza, puoi utilizzare Cloud Monitoring per integrare la tua applicazione con metriche personalizzate.
Puoi visualizzare le metriche di latenza nella console Google Cloud e nella console Cloud Monitoring. Puoi visualizzare le metriche di latenza combinate che includono funzioni di lettura e scrittura oppure puoi visualizzare metriche separate per le operazioni di lettura e scrittura.
In base alla latenza di ogni richiesta, Spanner raggruppa le richieste in percentili. Puoi visualizzare le metriche di latenza per il 50° percentile e il 99° percentile di latenza:
Latenza del 50° percentile: la latenza massima, in secondi, per il 50% più veloce di tutte le richieste. Ad esempio, se la latenza del 50° percentile è 0,5 secondi, Spanner ha elaborato il 50% delle richieste in meno di 0,5 secondi.
Questa metrica a volte viene chiamata latenza mediana.
Latenza del 99° percentile: la latenza massima, in secondi, per il 99% delle richieste più rapido. Ad esempio, se la latenza del 99° percentile è pari a 2 secondi, Spanner ha elaborato il 99% delle richieste in meno di 2 secondi.
Latenza e operazioni al secondo
Quando un'istanza elabora un numero ridotto di richieste durante un periodo di tempo, le latenze per il 50° e il 99° percentile durante quel periodo non sono indicatori significativi delle prestazioni complessive dell'istanza. In queste condizioni, un numero molto ridotto di valori anomali può modificare drasticamente le metriche di latenza.
Ad esempio, supponiamo che un'istanza elabori 100 richieste in un'ora. In questo caso, la latenza del 99° percentile per l'istanza durante quell'ora è la quantità di tempo necessaria per elaborare la richiesta più lenta. Una misurazione della latenza basata su una singola richiesta non è significativa.
Latenza per tipo di transazione
Le metriche di latenza in base al tipo di transazione per Spanner misurano e mostrano il tempo impiegato da Spanner per elaborare una transazione. Puoi visualizzare le metriche per le transazioni di sola lettura e scrittura di sola lettura. Il tipo di transazione "Lettura/scrittura" include tutte le transazioni di sola lettura, mentre il tipo di transazione "Di sola lettura" include tutte le transazioni di sola lettura, nonché i metodi di lettura singola.
Analogamente alle metriche di latenza, questi grafici raggruppano i dati in percentile. Puoi visualizzare la metrica Latenza per tipo di transazione per la latenza del 50° percentile e del 99° percentile.
Una differenza importante tra la metrica Latenza e la metrica Latenza per tipo è che il grafico Latenza per tipo di transazione permette di suddividere il tipo di transazione di sola lettura per "Leader coinvolto" o "Nessun leader coinvolto". Se selezioni "Il leader è coinvolto", viene visualizzato un grafico che include le richieste che hanno coinvolto il leader. Ad esempio, se viene richiesta una lettura sicura da una replica di sola lettura, il leader viene consultato per assicurarsi che la replica di sola lettura disponga dei dati più recenti. In questo caso, la selezione di "Leader è coinvolto" contribuisce a valutare il tempo totale necessario per elaborare la transazione di lettura elevata. Se selezioni "Nessun leader coinvolto", il grafico mostra i lead in cui non è stato coinvolto alcun leader. Ad esempio, se una richiesta di sola lettura con timestamp di risposta impostata su almeno 15 secondi è richiesta da una replica di sola lettura, quest'ultima potrebbe pubblicare la lettura inattiva senza coinvolgere il leader. In confronto, le letture che coinvolgono il responsabile potrebbero registrare una latenza maggiore. Puoi utilizzare questi grafici per valutare la differenza di latenza tra letture elevate e non aggiornate. Tieni presente che in alcuni casi, una lettura inattiva potrebbe essere pubblicata anche da un leader e, in questi casi, le letture inattive verranno visualizzate sotto il grafico "Il leader è coinvolto".
Per le transazioni di lettura/scrittura, la leader è sempre coinvolta nella transazione, quindi i dati mostrati nel grafico includono sempre il tempo necessario affinché la richiesta raggiunga il leader e riceva una risposta.
Come diagnosticare i problemi di latenza
Le seguenti sezioni descrivono come diagnosticare diversi problemi comuni che potrebbero causare un'elevata latenza end-to-end della tua applicazione.
Per una rapida panoramica delle metriche di latenza di un'istanza, utilizza la console Google Cloud. Per esaminare le metriche in modo più approfondito e trovare correlazioni tra la latenza e altre metriche, utilizza la console di Cloud Monitoring.
Latenza totale elevata, bassa latenza di Spanner
Se la tua applicazione presenta una latenza superiore al previsto, ma le metriche di latenza per Spanner sono significativamente inferiori alla latenza totale end-to-end, potrebbe esserci un problema nel codice dell'applicazione. Se la tua applicazione ha un problema di prestazioni che determina un rallentamento di alcuni percorsi del codice, la latenza totale end-to-end di ogni richiesta potrebbe aumentare.
Per verificare la presenza di questo problema, benchmark la tua applicazione per identificare i percorsi del codice più lenti del previsto.
Puoi anche commentare il codice che comunica con Spanner, quindi misurare nuovamente la latenza totale. Se la latenza totale non cambia molto, è improbabile che Spanner sia la causa dell'elevata latenza.
Latenza totale elevata, latenza Spanner elevata
Se la tua applicazione ha una latenza superiore al previsto e anche le metriche di latenza di Spanner sono elevate, le cause possibili sono diverse:
La tua istanza ha bisogno di una maggiore capacità di calcolo. Se l'istanza non dispone di risorse CPU sufficienti e il relativo utilizzo della CPU supera il limite massimo consigliato, Spanner potrebbe non essere in grado di elaborare le richieste in modo rapido ed efficiente.
Alcune delle tue query causano un elevato utilizzo della CPU. Se le query non sfruttano le funzionalità di Spanner che migliorano l'efficienza, come i parametri delle query e gli indici secondari, o se includono un numero elevato di join o altre operazioni ad alta intensità di CPU, le query possono utilizzare gran parte delle risorse della CPU per l'istanza.
Per verificare questi problemi, utilizza la console di Cloud Monitoring per cercare una correlazione tra un elevato utilizzo della CPU e una latenza elevata. Controlla anche le statistiche sulle query per l'istanza per identificare le query che richiedono un uso intensivo della CPU nello stesso periodo di tempo.
Se noti che l'utilizzo e la latenza della CPU sono entrambi elevati contemporaneamente, intervieni per risolvere il problema:
Se non hai trovato molte query che richiedono molta CPU, aggiungi capacità di calcolo all'istanza.
L'aggiunta di capacità di calcolo fornisce più risorse di CPU e consente a Spanner di gestire un carico di lavoro più grande.
Se hai trovato query ad alta intensità di CPU, rivedi i piani di esecuzione delle query per scoprire perché le query sono lente, quindi aggiorna le tue query per seguire le best practice di SQL per Spanner.
Potrebbe essere necessario rivedere la progettazione dello schema per il database e aggiornare lo schema per consentire query più efficienti.
Passaggi successivi
- Monitorare l'istanza con la console Google Cloud o la console Cloud Monitoring.
- Scopri come trovare correlazioni tra metriche ad alta latenza e altre.
- Scopri come ridurre la latenza di lettura seguendo le best practice SQL e utilizzando i limiti di timestamp.
- Scopri le metriche di latenza nelle tabelle delle statistiche delle query, che puoi recuperare utilizzando le istruzioni SQL.
- Scopri come la configurazione dell'istanza influisce sulla latenza.