Esamina l'utilizzo elevato della CPU

Questa pagina descrive come utilizzare le metriche e i grafici sull'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 un'attività utente causa un elevato utilizzo della CPU

La console Google Cloud offre diverse di monitoraggio di Spanner, che ti consentono di vedere lo stato metriche essenziali per la tua istanza. Uno di questi è un grafico denominato Utilizzo della CPU - Totale. Questo grafico mostra l'utilizzo totale della CPU, in percentuale delle risorse della CPU dell'istanza, suddiviso per priorità dell'attività e tipo di operazione. Esistono due metodi tipi di attività: attività utente, come letture e scritture, e attività di sistema, che coprono attività automatizzate in background come la compattazione e il backfill degli indici.

La Figura 1 mostra un esempio del grafico Utilizzo CPU - Totale.

Esempio di utilizzo della CPU - Grafico totale

Figura 1. Grafico Utilizzo della CPU - totale nella dashboard Monitoraggio della console Google Cloud.

Ora immagina di ricevere un avviso da Cloud Monitoring che ti informa che l'utilizzo della CPU è aumentato notevolmente. Apri la dashboard di Monitoring per la tua istanza. nella console Google Cloud ed esamina Utilizzo CPU - Totale nella console Cloud. Come mostrato nella Figura 1, puoi vedere l'aumento dell'utilizzo della CPU dovuto alle attività utente ad alta priorità. Il prossimo è scoprire quale operazione dell'utente ad alta priorità sta causando l'aumento dell'utilizzo della CPU.

Puoi visualizzare questa e altre metriche in una serie temporale utilizzando le dashboard Approfondimenti sulle query. Queste dashboard predefinite ti consentono di visualizzare i picchi di utilizzo della CPU e identificare le query inefficienti.

Identifica quale operazione utente 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 maggiore utilizzo della CPU.

Successivamente esaminerai il grafico Utilizzo della CPU per tipo di operazione nella console Cloud. Questo grafico mostra la quantità di CPU utilizzo suddiviso per operazioni avviate dall'utente con priorità alta, media e bassa.

Che cos'è un'operazione avviata dall'utente?

Un'operazione avviata dall'utente è un'operazione avviata tramite un'API richiesta. Spanner raggruppa queste richieste in tipi o categorie di operazioni e puoi visualizzare ogni tipo di operazione come una riga nel grafico Utilizzo della CPU per tipo di operazione. La tabella seguente descrive i metodi API inclusi in ogni tipo di operazione.

Operazione Metodi dell'API Descrizione
read_readonly Read
StreamingRead
Sono incluse le letture che recuperano le righe dal database utilizzando ricerche e scansioni delle chiavi.
read_readwrite Read
StreamingRead
Sono incluse le letture all'interno delle transazioni di lettura/scrittura.
read_withpartitiontoken Leggi
StreamingRead
Include le operazioni di lettura eseguite utilizzando un set di token di partizione.
executesql_select_readonly ExecuteSql
ExecuteStreamingSql
Sono incluse le query di esecuzione dell'istruzione SQL Select e di modifica dello stream.
executesql_select_readwrite ExecuteSql
ExecuteStreamingSql
Include l'esecuzione dell'istruzione SELECT all'interno delle transazioni di lettura/scrittura.
executesql_select_withpartitiontoken ExecuteSql
ExecuteStreamingSql
Include l'istruzione Select eseguita utilizzando un insieme di token di partizione.
executesql_dml_readwrite ExecuteSql
ExecuteStreamingSql
ExecuteBatchDml
Include l'istruzione SQL di esecuzione DML.
executesql_dml_partitioned ExecuteSql
ExecuteStreamingSql
ExecuteBatchDml
Include l'istruzione SQL ed esegui DML partizionato.
beginorcommit BeginTransaction
Commit
Rollback
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 interne di pubblicazione critiche per il tempo e così via.

Di seguito è riportato un grafico di esempio della metrica Utilizzo CPU per tipi di operazioni.

Esempio di grafico sull'utilizzo della CPU per tipo di operazione

Figura 2. Grafico sull'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. Traccia 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 relativo filtro per categoria.

In alternativa, puoi anche creare questo grafico nell'esploratore delle metriche come descritto di seguito:

Crea un grafico per l'utilizzo della CPU per operazioni digita in Metrics Explorer

  1. Nella console Google Cloud, seleziona Monitoraggio o utilizza il pulsante seguente:

    Vai a Monitoring

  2. Seleziona Metrics Explorer nel riquadro di navigazione.
  3. 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.
  4. Nel campo Filtro, inserisci il valore instance_id, poi inserisci l'ID istanza che vuoi esaminare e fai clic su >Applica.
  5. Nel campo Raggruppa per, seleziona category dal elenco a discesa. Il grafico mostra l'utilizzo della CPU delle attività utente raggruppate per tipo di operazione o categoria.

Mentre la metrica Utilizzo CPU per priorità nella sezione precedente ha contribuito a determinare se un'attività utente o di sistema ha causato un aumento della CPU di utilizzo delle risorse, con la metrica Utilizzo CPU per tipo di operazione, puoi analizzare e scoprire il tipo di operazione avviata dall'utente alla base di questo aumento della CPU all'utilizzo delle risorse.

Identificare la richiesta utente che contribuisce all'aumento dell'utilizzo della CPU

Per determinare quale richiesta specifica dell'utente è responsabile del picco di 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 più informazioni.

Utilizza la seguente tabella come guida per determinare quale tabella di statistiche su cui eseguire query in base al tipo di operazione che causa un elevato utilizzo della CPU.

Tipo di operazione Query Leggi Transazione
read_readonly No No
lettura_scrittura No
read_withpartitiontoken No No
executesql_select_readonly No No
executesql_select_withpartitiontoken No No
executesql_select_readwrite No
executesql_dml_readwrite No
executesql_dml_partitioned No No
beginorcommit No No

Ad esempio, se il problema riguarda read_withpartitiontoken, risolvilo utilizzando le statistiche di lettura.

In questo scenario, l'operazione executesql_select_readonly sembra essere la causa dell'aumento dell'utilizzo della CPU che stai osservando. In base alla tabella precedente, dovresti esaminare le statistiche delle query per scoprire quali query sono costose, vengono eseguite di frequente o analizzano molti dati.

Per trovare le query con il maggiore utilizzo di CPU nell'ora precedente, puoi eseguire la seguente query sulla 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. Una volta identificata la query con l'utilizzo della CPU più elevato, puoi provare le seguenti opzioni per ottimizzarla.

  • Rivedere il piano di esecuzione delle query per identificare eventuali possibili inefficienze che potrebbero contribuire a un elevato utilizzo della CPU.

  • Controlla la query per assicurarti che segua le best practice per SQL.

  • Esamina la progettazione dello schema del database e aggiorna lo schema a consentono query più efficienti.

  • Stabilisci una linea di base per il numero di volte in cui Spanner esegue una query durante un intervallo. Utilizzando questo valore di riferimento, sarai in grado di rilevare e indaga sulla causa di eventuali deviazioni impreviste dal comportamento normale.

Se non sei riuscito a trovare una query ad alta intensità di CPU, aggiungi capacità di calcolo all'istanza. L'aggiunta di capacità di calcolo fornisce più risorse di CPU e consente Spanner per gestire un carico di lavoro più grande. Per ulteriori informazioni, consulta Aumento della capacità di calcolo.

Passaggi successivi