Esaminare l'utilizzo elevato della CPU

Questa pagina descrive come utilizzare le metriche e i grafici di utilizzo della CPU, insieme ad altri strumenti di introspezione, per analizzare l'utilizzo elevato della CPU nel database.

Identificare se un'attività di sistema o utente sta causando un utilizzo elevato della CPU

La consoleGoogle Cloud fornisce diversi strumenti di monitoraggio per Spanner, consentendoti di visualizzare lo stato delle metriche più essenziali per la tua istanza. Uno di questi è un grafico chiamato Utilizzo CPU - Totale. Questo grafico mostra l'utilizzo totale della CPU, come percentuale delle risorse della CPU dell'istanza, suddiviso per priorità dell'attività e tipo di operazione. Esistono due tipi di attività: attività utente, come letture e scritture, e attività di sistema, che coprono le attività in background automatizzate come la compattazione e il riempimento dell'indice.

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

Esempio di un grafico Utilizzo CPU - Totale

Figura 1. Grafico Utilizzo CPU - totale nella dashboard di monitoraggio nella consoleGoogle Cloud .

Ora immagina di ricevere un avviso da Cloud Monitoring che indica che l'utilizzo della CPU è aumentato in modo significativo. Apri la dashboard Monitoring per la tua istanza nella console Google Cloud ed esamina il grafico Utilizzo CPU - Totale nella console Google Cloud . Come mostrato nella Figura 1, puoi vedere l'aumento dell'utilizzo della CPU dovuto alle attività utente ad alta priorità. Il passaggio successivo consiste nello scoprire quale operazione utente ad alta priorità sta causando questo aumento dell'utilizzo della CPU.

Puoi visualizzare questa e altre metriche in una serie temporale utilizzando le dashboard Approfondimenti query. Queste dashboard predefinite ti aiutano a visualizzare i picchi di utilizzo della CPU e a identificare le 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 dell'utilizzo maggiore della CPU.

Successivamente, esaminerai il grafico Utilizzo della CPU per tipo di operazione nella consoleGoogle Cloud . Questo grafico mostra l'utilizzo della CPU 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 una richiesta API. Spanner raggruppa queste richieste in tipi di operazioni o categorie e puoi visualizzare ogni tipo di operazione come una linea 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
Include le letture che recuperano righe dal database utilizzando ricerche e scansioni di chiavi.
read_readwrite Read
StreamingRead
Include le letture all'interno delle transazioni di lettura/scrittura.
read_withpartitiontoken Read
StreamingRead
Include le operazioni di lettura eseguite utilizzando un insieme di token di partizione.
executesql_select_readonly ExecuteSql
ExecuteStreamingSql
Include l'esecuzione dell'istruzione SQL SELECT e le query di flusso delle modifiche.
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'esecuzione dell'istruzione SQL DML.
executesql_dml_partitioned ExecuteSql
ExecuteStreamingSql
ExecuteBatchDml
Include l'esecuzione dell'istruzione SQL DML partizionata.
beginorcommit BeginTransaction
Commit
Rollback
Include le transazioni di inizio, commit e rollback.
misc PartitionQuery
PartitionRead
GetSession
CreateSession
Include PartitionQuery, PartitionRead, Create Database, Create Instance, operazioni correlate alla sessione, operazioni di pubblicazione interne sensibili al tempo e così via.

Ecco un grafico di esempio della metrica Utilizzo della CPU per tipo di operazione.

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

Figura 2. Grafico Utilizzo della CPU per tipo di operazione nella consoleGoogle Cloud .

Puoi limitare la visualizzazione a una priorità specifica utilizzando il menu Priorità nella parte superiore del grafico. Traccia ogni tipo o categoria di operazione su un grafico a linee. Le categorie elencate sotto il grafico identificano ogni grafico. Puoi nascondere e mostrare ogni grafico selezionando o deselezionando il rispettivo filtro per categoria.

In alternativa, puoi anche creare questo grafico in Esplora metriche come descritto di seguito:

Crea un grafico per l'utilizzo della CPU per tipo di operazione in Metrics Explorer

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

    Vai a Monitoraggio

  2. Seleziona Esplora metriche nel riquadro di navigazione.
  3. Nel campo Find resource type and metric (Trova tipo di risorsa e metrica), inserisci il valore spanner.googleapis.com/instance/cpu/utilization_by_operation_type , quindi seleziona la riga che viene 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 dall'elenco a discesa. Il grafico mostra l'utilizzo della CPU delle 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 della 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 quale richiesta utente contribuisce all'aumento dell'utilizzo della CPU

Per determinare quale richiesta utente specifica è responsabile del picco di utilizzo della CPU nel grafico del tipo di operazione executesql_select_readonly visualizzato nella Figura 2, utilizzerai le tabelle delle statistiche di introspezione integrate per ottenere maggiori informazioni.

Utilizza la seguente tabella come guida per determinare la tabella delle statistiche da interrogare in base al tipo di operazione che causa un elevato utilizzo della CPU.

Tipo di operazione Query Leggi Transazione
read_readonly No No
read_readwrite 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 è 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, devi esaminare le statistiche delle query per scoprire quali query sono costose, vengono eseguite di frequente o analizzano molti dati.

Per scoprire le query con l'utilizzo della CPU più elevato 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 in base all'utilizzo della CPU. Una volta identificata 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 utilizzo elevato 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 per consentire query più efficienti.

  • Stabilisci una baseline per il numero di volte in cui Spanner esegue una query durante un intervallo. Utilizzando questa base di riferimento, potrai rilevare e analizzare la causa di eventuali deviazioni impreviste dal comportamento normale.

Se non sei riuscito a trovare una query che utilizza molte risorse della CPU, aggiungi capacità di calcolo all'istanza. L'aggiunta di capacità di calcolo fornisce più risorse CPU e consente a Spanner di gestire un workload più grande. Per saperne di più, consulta Aumento della capacità di calcolo.

Passaggi successivi