Statistiche sulle operazioni sulle colonne

Spanner fornisce tabelle integrate che registrano le statistiche delle operazioni di lettura, query e scrittura per le colonne delle tabelle. Con le statistiche delle operazioni sulle colonne puoi:

  • Identificare le colonne con traffico di lettura, query e scrittura imprevisto.

  • Identificare le colonne utilizzate di frequente.

Quando esegui una query o scrivi in una colonna, Spanner incrementa di uno il conteggio delle operazioni corrispondente per quella colonna, indipendentemente dal numero di righe a cui accedi.

Puoi monitorare un database nel suo complesso utilizzando le metriche che misurano le operazioni al secondo, le operazioni al secondo per metodo API e altre metriche correlate nei grafici di System Insights.

Accedere alle statistiche delle operazioni sulle colonne

Spanner fornisce le statistiche delle operazioni sulle colonne nello schema SPANNER_SYS. Puoi utilizzare quanto segue per accedere ai dati SPANNER_SYS:

I seguenti metodi di lettura singola forniti da Spanner non supportano SPANNER_SYS:

  • Esecuzione di una lettura forte da una o più righe di una tabella.
  • Esecuzione di una lettura obsoleta da una o più righe di una tabella.
  • Lettura da una o più righe di un indice secondario.

Per ulteriori informazioni, consulta Metodi di lettura singola.

Statistiche delle operazioni sulle colonne

Le seguenti tabelle tengono traccia delle statistiche di lettura, query e scrittura sulle colonne durante un periodo di tempo specifico:

  • SPANNER_SYS.COLUMN_OPERATIONS_STATS_MINUTE: operazioni durante intervalli di 1 minuto
  • SPANNER_SYS.COLUMN_OPERATIONS_STATS_10MINUTE: operazioni durante intervalli di 10 minuti
  • SPANNER_SYS.COLUMN_OPERATIONS_STATS_HOUR: operazioni durante intervalli di 1 ora

Queste tabelle hanno le seguenti proprietà:

  • Ogni tabella contiene dati per intervalli di tempo non sovrapposti della lunghezza specificata dal nome della tabella.

  • Gli intervalli di 1 minuto iniziano al minuto, gli intervalli di 10 minuti iniziano ogni 10 minuti a partire dall'ora e gli intervalli di 1 ora iniziano all'ora.

    Ad esempio, alle 11:59:30, le query SQL possono accedere agli intervalli più recenti seguenti:

    • 1 minuto: 11:58:00–11:58:59
    • 10 minuti: 11:40:00–11:49:59
    • 1 ora: 10:00:00–10:59:59

Schema per tutte le tabelle delle statistiche delle operazioni sulle colonne

Nome colonna Tipo Descrizione
INTERVAL_END TIMESTAMP Fine dell'intervallo di tempo in cui sono state raccolte le statistiche sull'utilizzo delle colonne.
TABLE_NAME STRING Nome della tabella o dell'indice.
COLUMN_NAME STRING Nome della colonna.
READ_COUNT INT64 Numero di letture dalla colonna.
QUERY_COUNT INT64 Numero di query che leggono dalla colonna.
WRITE_COUNT INT64 Numero di query che scrivono nella tabella.
IS_QUERY_CACHE_MEMORY_CAPPED BOOL Indica se la raccolta delle statistiche è stata limitata a causa della pressione della memoria.

Se inserisci dati nel database utilizzando le mutazioni, Spanner incrementa WRITE_COUNT di 1 per ogni tabella a cui accede l'istruzione di inserimento. Inoltre, una query che accede a un indice senza scansionare la tabella sottostante incrementa solo QUERY_COUNT sull'indice.

Conservazione dei dati

Spanner conserva i dati per ogni tabella per i seguenti periodi di tempo:

  • SPANNER_SYS.COLUMN_OPERATIONS_STATS_MINUTE: intervalli che coprono le sei ore precedenti.

  • SPANNER_SYS.COLUMN_OPERATIONS_STATS_10MINUTE: intervalli che coprono i quattro giorni precedenti.

  • SPANNER_SYS.COLUMN_OPERATIONS_STATS_HOUR: intervalli che coprono i 30 giorni precedenti.

Esempi di query

Questa sezione include diversi esempi di istruzioni SQL che recuperano le statistiche aggregate delle operazioni sulle colonne. Puoi eseguire queste istruzioni SQL utilizzando le librerie client o Google Cloud CLI.

Eseguire una query sulle colonne della tabella con il maggior numero di operazioni di scrittura per l'intervallo più recente

GoogleSQL

    SELECT interval_end,
          table_name,
          column_name,
          write_count
    FROM spanner_sys.column_operations_stats_minute
    WHERE interval_end = (
          SELECT MAX(interval_end)
          FROM spanner_sys.column_operations_stats_minute)
    ORDER BY write_count DESC;

PostgreSQL

    SELECT interval_end,
          table_name,
          column_name,
          write_count
    FROM spanner_sys.column_operations_stats_minute
    WHERE interval_end = (
          SELECT MAX(interval_end)
          FROM spanner_sys.column_operations_stats_minute)
    ORDER BY write_count DESC;

Eseguire una query sulle colonne con il maggior numero di operazioni di query per l'intervallo più recente

GoogleSQL

    SELECT interval_end,
          table_name,
          column_name,
          query_count
    FROM spanner_sys.column_operations_stats_minute
    WHERE interval_end = (
          SELECT MAX(interval_end)
          FROM spanner_sys.column_operations_stats_minute)
    ORDER BY query_count DESC;

PostgreSQL

    SELECT interval_end,
          table_name,
          column_name,
          query_count
    FROM spanner_sys.column_operations_stats_minute
    WHERE interval_end = (
          SELECT MAX(interval_end)
          FROM spanner_sys.column_operations_stats_minute)
    ORDER BY query_count DESC;

Eseguire una query sull'utilizzo di una colonna nelle ultime 6 ore

GoogleSQL

    SELECT interval_end,
          read_count,
          query_count,
          write_count
    FROM spanner_sys.column_operations_stats_minute
    WHERE table_name = "table_name"
          AND column_name = "column_name"
    ORDER BY interval_end DESC;
    

Dove:

  • table_name deve essere una tabella o un indice esistente nel database.
  • column_name deve essere una colonna esistente nella tabella.

PostgreSQL

    SELECT interval_end,
          read_count,
          query_count,
          write_count
    FROM spanner_sys.column_operations_stats_minute
    WHERE table_name = 'table_name'
          AND column_name = 'column_name'
    ORDER BY interval_end DESC;
    

Dove:

  • table_name deve essere una tabella o un indice esistente nel database.
  • column_name deve essere una colonna esistente nella tabella.

Eseguire una query sull'utilizzo di una colonna negli ultimi 14 giorni

GoogleSQL

SELECT interval_end,
       read_count,
       query_count,
       write_count
FROM spanner_sys.column_operations_stats_hour
WHERE interval_end > TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL -14 DAY)
      AND table_name = "table_name"
      AND column_name = "column_name"
ORDER BY interval_end DESC;

Esegui le seguenti sostituzioni:

  • table_name: nome della tabella o dell'indice nel database.
  • column_name: nome della colonna nella tabella.

PostgreSQL

SELECT interval_end,
   read_count,
   query_count,
   write_count
FROM spanner_sys.column_operations_stats_hour
WHERE interval_end > spanner.timestamptz_subtract(now(), '14 DAY')
  AND table_name = 'table_name'
  AND column_name = 'column_name'
ORDER BY interval_end DESC;

Esegui le seguenti sostituzioni:

  • table_name: nome della tabella o dell'indice nel database.
  • column_name: nome della colonna nella tabella.

Passaggi successivi