Estadísticas de operaciones de columna

Spanner proporciona tablas integradas que registran estadísticas de operaciones de lectura, consulta y escritura de las columnas de tus tablas. Con las estadísticas de operaciones de columnas, puedes hacer lo siguiente:

  • Identifica las columnas con tráfico de lectura, consulta y escritura inesperado.

  • Identifica las columnas que se usan con frecuencia.

Cuando consultas o escribes en una columna, Spanner aumenta en uno el recuento de operaciones correspondiente a esa columna, independientemente del número de filas a las que se acceda.

Puedes monitorizar el uso general de una base de datos mediante métricas que miden las operaciones por segundo, las operaciones por segundo por método de API y otras métricas relacionadas en los gráficos de Estadísticas del sistema.

Acceder a las estadísticas de operaciones de columnas

Spanner proporciona las estadísticas de las operaciones de columna en el esquema SPANNER_SYS. Puedes usar lo siguiente para acceder a los datos de SPANNER_SYS:

Los siguientes métodos de lectura única que proporciona Spanner no admiten SPANNER_SYS:

  • Realizar una lectura fuerte desde una sola fila o varias filas en una tabla.
  • Realizar una lectura inactiva de una sola fila o varias filas en una tabla.
  • Leer desde una sola fila o varias filas en un índice secundario.

Para obtener más información, consulta Métodos de lectura única.

Estadísticas de operaciones de columna

En las siguientes tablas se registran las estadísticas de lectura, consulta y escritura de tus columnas durante un periodo específico:

  • SPANNER_SYS.COLUMN_OPERATIONS_STATS_MINUTE: operaciones durante intervalos de 1 minuto
  • SPANNER_SYS.COLUMN_OPERATIONS_STATS_10MINUTE: operaciones durante intervalos de 10 minutos
  • SPANNER_SYS.COLUMN_OPERATIONS_STATS_HOUR: operaciones durante intervalos de 1 hora

Estas tablas tienen las siguientes propiedades:

  • Cada tabla contiene datos de intervalos de tiempo no superpuestos de la duración que especifica el nombre de la tabla.

  • Los intervalos de 1 minuto empiezan en el minuto, los intervalos de 10 minutos empiezan cada 10 minutos a partir de la hora en punto y los intervalos de 1 hora empiezan en la hora en punto.

    Por ejemplo, a las 11:59:30, las consultas SQL pueden acceder a los siguientes intervalos más recientes:

    • 1 minuto: de 11:58:00 a 11:58:59
    • 10 minutos: de 11:40:00 a 11:49:59
    • 1 hora: de 10:00:00 a 10:59:59

Esquema de todas las tablas de estadísticas de operaciones de columnas

Nombre de la columna Tipo Descripción
INTERVAL_END TIMESTAMP Fin del intervalo de tiempo en el que se recogieron las estadísticas de uso de la columna.
TABLE_NAME STRING Nombre de la tabla o del índice.
COLUMN_NAME STRING Nombre de la columna.
READ_COUNT INT64 Número de lecturas de la columna.
QUERY_COUNT INT64 Número de consultas que leen de la columna.
WRITE_COUNT INT64 Número de consultas que escriben en la tabla.
IS_QUERY_CACHE_MEMORY_CAPPED BOOL Indica si la recogida de estadísticas se ha limitado debido a la presión de la memoria.

Si insertas datos en tu base de datos mediante mutaciones, Spanner aumenta el WRITE_COUNT en 1 por cada tabla a la que acceda la instrucción de inserción. Además, una consulta que accede a un índice sin analizar la tabla subyacente solo incrementa el QUERY_COUNT del índice.

Conservación de datos

Como mínimo, Spanner conserva los datos de cada tabla durante los siguientes periodos:

  • SPANNER_SYS.COLUMN_OPERATIONS_STATS_MINUTE: intervalos que abarcan las seis horas anteriores.

  • SPANNER_SYS.COLUMN_OPERATIONS_STATS_10MINUTE: intervalos que abarcan los cuatro días anteriores.

  • SPANNER_SYS.COLUMN_OPERATIONS_STATS_HOUR: intervalos que abarcan los 30 días anteriores.

Consultas de ejemplo

En esta sección se incluyen varios ejemplos de instrucciones SQL que obtienen estadísticas de operaciones de columnas agregadas. Puedes ejecutar estas instrucciones SQL con las bibliotecas de cliente o la CLI de Google Cloud.

Consulta las columnas de la tabla con el mayor número de operaciones de escritura del intervalo más reciente

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;

Consultar las columnas con más operaciones de consulta del intervalo más reciente

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;

Consultar el uso de una columna en las últimas 6 horas

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;
    

Donde:

  • table_name debe ser una tabla o un índice que ya exista en la base de datos.
  • column_name debe ser una columna de la tabla.

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;
    

Donde:

  • table_name debe ser una tabla o un índice que ya exista en la base de datos.
  • column_name debe ser una columna de la tabla.

Consultar el uso de una columna en los últimos 14 días

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;

Haz las siguientes sustituciones:

  • table_name: nombre de la tabla o del índice de la base de datos.
  • column_name: nombre de la columna de la tabla.

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;

Haz las siguientes sustituciones:

  • table_name: nombre de la tabla o del índice de la base de datos.
  • column_name: nombre de la columna de la tabla.

Siguientes pasos