Estadísticas de operaciones de columnas

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

  • Identificar columnas con tráfico inesperado de lectura, consulta y escritura

  • Identificar columnas de uso intensivo

Cuando consultas o escribes en una columna, Spanner incrementa en uno el recuento de operaciones correspondiente para esa columna, independientemente de la cantidad de filas a las que se accede.

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

Accede a las estadísticas de operaciones de columnas

Spanner proporciona las estadísticas de operaciones de columnas 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 sólida desde una o varias filas de una tabla
  • Realizar una lectura inactiva desde una o varias filas en una tabla
  • Leer desde una o varias filas en un índice secundario

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

Estadísticas de operaciones de columnas

En las siguientes tablas, se realiza un seguimiento de las estadísticas de lectura, consulta y escritura en tus columnas durante un período 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 longitud que se especifica en el nombre de la tabla.

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

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

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

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

Nombre de la columna Tipo Descripción
INTERVAL_END TIMESTAMP Fin del intervalo en el que se recopilaron las estadísticas de uso de la columna
TABLE_NAME STRING Nombre de la tabla o el índice
COLUMN_NAME STRING Nombre de la columna
READ_COUNT INT64 Cantidad de lecturas de la columna
QUERY_COUNT INT64 Cantidad de consultas que leen de la columna
WRITE_COUNT INT64 Cantidad de consultas que escriben en la tabla
IS_QUERY_CACHE_MEMORY_CAPPED BOOL Indica si la recopilación de estadísticas se limitó debido a la presión de la memoria

Si insertas datos en tu base de datos con mutaciones, Spanner incrementa WRITE_COUNT en 1 por cada tabla a la que accede 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 en el índice.

Retención de datos

Como mínimo, Spanner conserva los datos para cada tabla durante los siguientes períodos:

  • 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 varias instrucciones de SQL de ejemplo que recuperan estadísticas agregadas de operaciones de columnas. Puedes ejecutar estas sentencias de SQL con las bibliotecas cliente o la Google Cloud CLI.

Consulta las columnas de la tabla con la mayor cantidad de operaciones de escritura para el 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;

Consulta las columnas con la mayor cantidad de operaciones de consulta para el 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;

Consulta el uso de una columna durante 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;
    

Aquí:

  • table_name debe ser una tabla o un índice existente en la base de datos.
  • column_name debe ser una columna existente en 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;
    

Aquí:

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

Consulta el uso de una columna durante 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;

Realiza los siguientes reemplazos:

  • table_name: Nombre de la tabla o el índice en la base de datos
  • column_name: Nombre de la columna en 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;

Realiza los siguientes reemplazos:

  • table_name: Nombre de la tabla o el índice en la base de datos
  • column_name: Nombre de la columna en la tabla

¿Qué sigue?