Questa pagina descrive come utilizzare le metriche e i grafici di utilizzo della CPU, insieme ad altri strumenti di introspezione, per esaminare l'utilizzo elevato della CPU nel database.
Identifica se un'attività di sistema o utente causa un elevato utilizzo della CPU
La console Google Cloud offre diversi strumenti di monitoraggio per Spanner, che consentono di visualizzare lo stato delle metriche più essenziali per l'istanza. Uno di questi è un grafico chiamato Utilizzo CPU - Totale. Questo grafico mostra l'utilizzo totale della CPU, sotto forma di percentuale delle risorse della CPU dell'istanza, suddiviso per priorità dell'attività e tipo di operazione. Esistono due tipi di attività: le attività utente, come le letture e le scritture, e le attività di sistema, che coprono le attività automatizzate in background come la compattazione e il backfill dell'indice.
La Figura 1 mostra un esempio del grafico Utilizzo CPU - Totale.
Figura 1. Grafico Utilizzo CPU - totale nella dashboard di Monitoring nella console Google Cloud.
Ora, immagina di ricevere un avviso da Cloud Monitoring che ti informa che l'utilizzo della CPU è aumentato in modo significativo. Apri la dashboard Monitoring per l'istanza nella console Google Cloud ed esamina il grafico Utilizzo CPU - Totale nella console Cloud. Come mostrato nella Figura 1, puoi vedere l'aumento dell'utilizzo della CPU derivante dalle attività utente ad alta priorità. Il passaggio successivo consiste nel scoprire quale operazione utente ad alta priorità causa l'aumento dell'utilizzo della CPU.
Puoi visualizzare questa e altre metriche su una serie temporale utilizzando le dashboard di Approfondimenti sulle query. Queste dashboard predefinite consentono di visualizzare picchi di utilizzo della CPU e di identificare query inefficienti.
Identifica l'operazione utente che causa il picco di utilizzo della CPU
Il grafico Utilizzo CPU - Totale nella Figura 1 mostra che le attività utente ad alta priorità sono la causa di un utilizzo maggiore della CPU.
Esaminerai quindi il grafico Utilizzo della CPU per tipo di operazione nella console Cloud. Questo grafico mostra l'utilizzo della CPU suddiviso per operazioni avviate dall'utente ad alta, media e bassa priorità.
Che cos'è un'operazione avviata dall'utente?
Un'operazione avviata dall'utente è un'operazione avviata tramite una richiesta API. Spanner raggruppa queste richieste in tipi o categorie di operazioni e puoi visualizzare ogni tipo di operazione sotto forma di riga nel grafico Utilizzo della CPU per tipo di operazione. La seguente tabella descrive i metodi API inclusi in ogni tipo di operazione.
Operazione | Metodi dell'API | Descrizione |
---|---|---|
read_readonly | Lettura StreamingRead |
Include le letture che recuperano le righe dal database utilizzando ricerche e scansioni delle chiavi. |
read_readwrite | Lettura StreamingRead |
Include le letture all'interno delle transazioni di lettura/scrittura. |
read_withpartitiontoken | Lettura StreamingRead |
Include le operazioni di lettura eseguite utilizzando un set di token di partizione. |
executesql_select_readonly | EseguiSql EseguiStreamingSql |
Include l'esecuzione dell'istruzione SQL Select e delle query di modifiche in tempo reale. |
executesql_select_readwrite | EseguiSql EseguiStreamingSql |
Include l'esecuzione dell'istruzione Select all'interno delle transazioni di lettura/scrittura. |
executesql_select_withpartitiontoken | EseguiSql EseguiStreamingSql |
Include l'esecuzione dell'istruzione Select eseguita utilizzando un set di token di partizione. |
executesql_dml_readwrite | EseguiSql EseguiStreamingSql EseguiBatchDml |
Include l'esecuzione dell'istruzione SQL DML. |
executesql_dml_partitioned | EseguiSql EseguiStreamingSql EseguiBatchDml |
Include l'esecuzione dell'istruzione SQL DML partizionata. |
iniziareocommit | Rollback Inizio transazione |
Include le transazioni di inizio, commit e rollback. |
varie | PartitionQuery PartitionRead GetSession CreateSession |
Include PartitionQuery, PartitionRead, Crea database, Crea istanza, operazioni relative alla sessione, operazioni di gestione interne urgenti in base al tempo e così via. |
Ecco un grafico di esempio della metrica Utilizzo CPU per tipi di operazione.
Figura 2. Grafico di utilizzo della CPU per tipo di operazione nella console Google Cloud.
Puoi limitare la visualizzazione a una priorità specifica utilizzando il menu Priorità nella parte superiore del grafico. Indica ogni tipo di operazione o categoria su un grafico a linee. Le categorie elencate sotto il grafico identificano ciascun grafico. Puoi nascondere e mostrare ciascun grafico selezionando o deselezionando il rispettivo filtro per categoria.
In alternativa, puoi anche creare questo grafico in Metrics Explorer come descritto di seguito:
Crea un grafico per l'utilizzo della CPU per tipo di operazioni in Metrics Explorer
- Nella console Google Cloud, seleziona Monitoring o utilizza il pulsante seguente:
- Seleziona Metrics Explorer nel riquadro di navigazione.
-
Nel campo Trova tipo di risorsa e metrica, inserisci il valore
spanner.googleapis.com/instance/cpu/utilization_by_operation_type
, quindi seleziona la riga visualizzata sotto la casella. -
Nel campo Filtro, inserisci il valore
instance_id
, quindi inserisci l'ID istanza da esaminare e fai clic su >Applica. -
Nel campo Raggruppa per, seleziona
category
dall'elenco a discesa. Il grafico mostrerà l'utilizzo della CPU per le attività utente raggruppate per tipo di operazione o categoria.
Mentre la metrica Utilizzo della CPU per priorità nella sezione precedente ha contribuito a determinare se un'attività utente o di sistema ha causato un aumento dell'utilizzo delle risorse della CPU, con la metrica Utilizzo CPU per tipo di operazione puoi approfondire e scoprire il tipo di operazione avviata dall'utente alla base di questo aumento dell'utilizzo della CPU.
Identifica la richiesta dell'utente che contribuisce all'aumento dell'utilizzo della CPU
Per determinare quale richiesta dell'utente specifica è responsabile del picco di utilizzo della CPU nel grafico del tipo di operazione executesql_select_readonly che vedi nella Figura 2, utilizzerai le tabelle delle statistiche di introspezione integrate per ottenere ulteriori informazioni.
Utilizza la seguente tabella come guida per determinare su quale tabella di statistiche eseguire una query in base al tipo di operazione che causa un utilizzo elevato della CPU.
Tipo di operazione | Query | Lettura | Transazione |
---|---|---|---|
read_readonly | No | Sì | No |
read_readwrite | No | Sì | Sì |
read_withpartitiontoken | No | Sì | No |
executesql_select_readonly | Sì | No | No |
executesql_select_withpartitiontoken | Sì | No | No |
executesql_select_readwrite | Sì | No | Sì |
executesql_dml_readwrite | Sì | No | Sì |
executesql_dml_partitioned | No | No | Sì |
iniziareocommit | No | No | Sì |
Ad esempio, se il problema è read_withpartitiontoken, utilizza le statistiche di lettura per risolverlo.
In questo scenario, l'operazione executesql_select_readonly sembra essere il motivo dell'aumento di utilizzo della CPU che stai osservando. In base alla tabella precedente, dovresti consultare le statistiche sulle query per scoprire quali query sono costose, quali vengono eseguite di frequente o analizza una grande quantità di dati.
Per individuare le query con il massimo utilizzo di CPU nell'ora precedente, puoi eseguire la seguente query nella tabella delle statistiche query_stats_top_hour
.
SELECT text,
execution_count AS count,
avg_latency_seconds AS latency,
avg_cpu_seconds AS cpu,
execution_count * avg_cpu_seconds AS total_cpu
FROM spanner_sys.query_stats_top_hour
WHERE interval_end =
(SELECT MAX(interval_end)
FROM spanner_sys.query_stats_top_hour)
ORDER BY total_cpu DESC;
L'output mostrerà le query ordinate per utilizzo della CPU. Dopo aver identificato la query con l'utilizzo più elevato della CPU, puoi provare le seguenti opzioni per ottimizzarla.
Esamina il piano di esecuzione della query per identificare eventuali inefficienze che potrebbero contribuire a un elevato utilizzo della CPU.
Esamina la query per assicurarti che segua le best practice SQL per Cloud Spanner.
Esamina la progettazione dello schema del database e aggiornalo per consentire query più efficienti.
Stabilire una base per il numero di volte in cui Spanner esegue una query durante un intervallo. Utilizzando questa base di riferimento, sarai in grado di rilevare e analizzare la causa di eventuali deviazioni impreviste dal comportamento normale.
Se non sei riuscito a trovare una query che utilizza molta CPU, aggiungi capacità di calcolo all'istanza. L'aggiunta di capacità di calcolo fornisce più risorse della CPU e consente a Spanner di gestire un carico di lavoro più grande. Per ulteriori informazioni, consulta Aumento della capacità di calcolo.
Passaggi successivi
Scopri di più sulle metriche di utilizzo della CPU.
Scopri altri strumenti di introspezione.
Scopri di più sul monitoraggio con Cloud Monitoring.
Scopri di più sulle best practice SQL per Spanner.
Consulta l'elenco delle metriche di Cloud Spanner.