Statistiche sulle operazioni sulle colonne

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

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

  • Identifica le colonne più utilizzate.

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 l'utilizzo complessivo di un database utilizzando 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 sulle operazioni sulle colonne

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

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

  • Esecuzione di una lettura coerente da una o più righe di una tabella.
  • Esecuzione di una lettura obsoleta da una o più righe di una tabella.
  • Lettura da una singola riga o da più righe in un indice secondario.

Per ulteriori informazioni, consulta Metodi di lettura singola.

Statistiche sulle operazioni sulle colonne

Le seguenti tabelle monitorano le 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 durata 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 di utilizzo delle colonne.
TABLE_NAME STRING Il 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 nell'indice.

Conservazione dei dati

Come minimo, 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 sulle operazioni sulle colonne. Puoi eseguire queste istruzioni SQL utilizzando le librerie client o Google Cloud CLI.

Esegui 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;

Esegui 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;

Esegui 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.

Esegui 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;

Effettua le seguenti sostituzioni:

  • table_name: il nome della tabella o dell'indice nel database.
  • column_name: il 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;

Effettua le seguenti sostituzioni:

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

Passaggi successivi