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:

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

  • Identifica las columnas que se usan con frecuencia.

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 System Insights.

Cómo 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 son compatibles con 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 en intervalos de 1 minuto
  • SPANNER_SYS.COLUMN_OPERATIONS_STATS_10MINUTE: Operaciones en intervalos de 10 minutos
  • SPANNER_SYS.COLUMN_OPERATIONS_STATS_HOUR: Operaciones en 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 Es el final 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 la columna.
WRITE_COUNT INT64 Es la 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 instrucciones de SQL con las bibliotecas cliente o la CLI de Google Cloud.

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;

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

Consultar 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: Es el nombre de la tabla o el índice en la base de datos.
  • column_name: Es el 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: Es el nombre de la tabla o el índice en la base de datos.
  • column_name: Es el nombre de la columna en la tabla.

¿Qué sigue?