Estadísticas de operaciones de tablas

Spanner proporciona tablas integradas que registran las estadísticas de las operaciones de lectura (o consulta), escritura y eliminación de tus tablas (incluidas las tablas de transmisiones de cambios) y los índices. Con las estadísticas de operaciones de tablas, puedes hacer lo siguiente:

  • Identifica las tablas con mayor tráfico de escritura que corresponden al aumento de almacenamiento.

  • Identifica las tablas con tráfico de lectura, escritura y eliminación inesperado.

  • Identifica las tablas que se usan con frecuencia.

Cuando consultas o escribes en una tabla, el recuento de operaciones correspondiente para la tabla aumenta en 1, independientemente de la cantidad de filas a las que se accede.

Las métricas generales de operaciones por segundo de una base de datos se pueden supervisar con Operations per second, Operations per second by API method y otras métricas relacionadas en los gráficos de Estadísticas del sistema.

Cómo acceder a las estadísticas de las operaciones de tablas

Spanner proporciona las estadísticas de las operaciones de la tabla en el esquema SPANNER_SYS.Puedes acceder a los datos de SPANNER_SYS de las siguientes maneras:

  • La página de Spanner Studio de una base de datos en la consola de Google Cloud

  • El comando gcloud spanner databases execute-sql.

  • El método executeSql o el método executeStreamingSql.

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

Estadísticas de operaciones de tablas

En las siguientes tablas, se realiza un seguimiento de las estadísticas de lectura (o consulta), escritura y eliminación en tus tablas e índices durante un período específico:

  • SPANNER_SYS.TABLE_OPERATIONS_STATS_MINUTE: Operaciones en intervalos de 1 minuto
  • SPANNER_SYS.TABLE_OPERATIONS_STATS_10MINUTE: Operaciones en intervalos de 10 minutos
  • SPANNER_SYS.TABLE_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 se basan en tiempos de reloj. 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., los intervalos más recientes disponibles para las consultas de SQL son los siguientes:

    • 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 tablas

Nombre de la columna Tipo Descripción
INTERVAL_END TIMESTAMP Es el final del intervalo en el que se recopilaron los tamaños de las tablas.
TABLE_NAME STRING Nombre de la tabla o el índice.
READ_QUERY_COUNT INT64 Cantidad de consultas o lecturas que se realizan en la tabla.
WRITE_COUNT INT64 Es la cantidad de consultas que escriben en la tabla.
DELETE_COUNT INT64 Cantidad de consultas que realizan operaciones de eliminación en la tabla.

Si insertas datos en tu base de datos con mutaciones, el valor de write_count aumenta 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 read_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.TABLE_OPERATIONS_STATS_MINUTE: Intervalos que abarcan las 6 horas anteriores.

  • SPANNER_SYS.TABLE_OPERATIONS_STATS_10MINUTE: Intervalos que abarcan los 4 días anteriores.

  • SPANNER_SYS.TABLE_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 tablas. Puedes ejecutar estas instrucciones de SQL con las bibliotecas cliente o gcloud spanner.

Consulta las tablas y los índices con la mayor cantidad de operaciones de escritura para el intervalo más reciente

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

Consulta las tablas y los índices con la mayor cantidad de operaciones de eliminación para el intervalo más reciente

    SELECT interval_end,
          table_name,
          delete_count
    FROM spanner_sys.table_operations_stats_minute
    WHERE interval_end = (
          SELECT MAX(interval_end)
          FROM spanner_sys.table_operations_stats_minute)
    ORDER BY delete_count DESC;
  

Consulta las tablas y los índices con la mayor cantidad de operaciones de lectura y consulta para el intervalo más reciente

    SELECT interval_end,
          table_name,
          read_query_count
    FROM spanner_sys.table_operations_stats_minute
    WHERE interval_end = (
          SELECT MAX(interval_end)
          FROM spanner_sys.table_operations_stats_minute)
    ORDER BY read_query_count DESC;
  

Consulta el uso de una tabla durante las últimas 6 horas

GoogleSQL

    SELECT interval_end,
          read_query_count,
          write_count,
          delete_count
    FROM spanner_sys.table_operations_stats_minute
    WHERE table_name = "table_name"
    ORDER BY interval_end DESC;
    

Aquí:

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

PostgreSQL

    SELECT interval_end,
          read_query_count,
          write_count,
          delete_count
    FROM spanner_sys.table_operations_stats_minute
    WHERE table_name = 'table_name'
    ORDER BY interval_end DESC;
    

Aquí:

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

Consulta el uso de una tabla durante los últimos 14 días

GoogleSQL

SELECT interval_end,
       read_query_count,
       write_count,
       delete_count
FROM spanner_sys.table_operations_stats_hour
WHERE interval_end > TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL -14 DAY)
      AND table_name = "table_name"
ORDER BY interval_end DESC;

Aquí:

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

PostgreSQL

SELECT interval_end,
   read_query_count,
   write_count,
   delete_count
FROM spanner_sys.table_operations_stats_hour
WHERE interval_end > spanner.timestamptz_subtract(now(), '14 DAY')
  AND table_name = 'table_name'
ORDER BY interval_end DESC;

Aquí:

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

Consulta las tablas y los índices que no se usaron en las últimas 24 horas

GoogleSQL

(SELECT t.table_name
 FROM  information_schema.tables AS t
 WHERE t.table_catalog = ""
   AND t.table_schema = ""
   AND t.table_type = "BASE TABLE"
 UNION ALL
 SELECT cs.change_stream_name
 FROM information_schema.change_streams cs
 WHERE cs.change_stream_catalog = ""
   AND cs.change_stream_schema = ""
 UNION ALL
 SELECT idx.index_name
 FROM information_schema.indexes idx
 WHERE idx.index_type = "INDEX"
   AND idx.table_catalog = ""
   AND idx.table_schema = "")
 EXCEPT ALL
(SELECT  DISTINCT(table_name)
 FROM spanner_sys.table_operations_stats_hour
 WHERE interval_end > TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL -24 HOUR));

¿Qué sigue?