Estadísticas de operaciones de tabla

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 flujos de cambios) e índices. Con las estadísticas de operaciones de tabla, puedes hacer lo siguiente:

  • Identifica las tablas con un aumento del tráfico de escritura correspondiente al aumento del almacenamiento.

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

  • Identifica las tablas que se usan mucho.

Cuando consultas o escribes en una tabla, el recuento de operaciones correspondiente a la tabla aumenta en 1, independientemente del número de filas a las que se acceda.

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

Acceder a las estadísticas de operaciones de tabla

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

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

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

Estadísticas de operaciones de tabla

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

  • SPANNER_SYS.TABLE_OPERATIONS_STATS_MINUTE: operaciones durante intervalos de 1 minuto
  • SPANNER_SYS.TABLE_OPERATIONS_STATS_10MINUTE: operaciones durante intervalos de 10 minutos
  • SPANNER_SYS.TABLE_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 se basan en la hora del reloj. Los intervalos de 1 minuto empiezan en el minuto, los de 10 minutos empiezan cada 10 minutos a partir de la hora en punto y los de 1 hora empiezan a la hora en punto.

    Por ejemplo, a las 11:59:30, los intervalos más recientes disponibles para las consultas SQL son los siguientes:

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

Nombre de la columna Tipo Descripción
INTERVAL_END TIMESTAMP Hora de finalización del intervalo en el que se recogieron los tamaños de las tablas.
TABLE_NAME STRING Nombre de la tabla o del índice.
READ_QUERY_COUNT INT64 Número de consultas o lecturas de la tabla.
WRITE_COUNT INT64 Número de consultas que escriben en la tabla.
DELETE_COUNT INT64 Número de consultas que realizan eliminaciones en la tabla.

Si insertas datos en tu base de datos mediante mutaciones, el valor de write_count aumenta 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 read_query_count del índice.

Conservación de datos

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

  • 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 varios ejemplos de instrucciones SQL que obtienen estadísticas de operaciones de tablas agregadas. Puedes ejecutar estas instrucciones SQL mediante las bibliotecas de cliente o gcloud spanner.

Consultar las tablas y los índices con el mayor número de operaciones de escritura del 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;
  

Consultar las tablas y los índices con el mayor número de operaciones de eliminación del 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;
  

Consultar las tablas y los índices con las operaciones de lectura y consulta más frecuentes del 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;
  

Consultar el uso de una tabla en 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;
    

Donde:

  • table_name debe ser una tabla o un índice que ya exista 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;
    

Donde:

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

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

Donde:

  • table_name debe ser una tabla o un índice que ya exista 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;

Donde:

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

Consultar las tablas e índices que no se han usado 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));

Siguientes pasos