Tablas de estadísticas de transacciones

Cloud Spanner proporciona tablas integradas que almacenan estadísticas sobre las transacciones. Puedes recuperar estadísticas de estas tablas SPANNER_SYS.TXN_STATS* mediante instrucciones de SQL.

Cuándo usar las estadísticas de transacciones

Las estadísticas de transacciones son útiles para investigar problemas de rendimiento. Por ejemplo, puedes verificar si hay transacciones de ejecución lenta que podrían afectar el rendimiento o las consultas por segundo (QPS) en tu base de datos. Otra situación es cuando tus aplicaciones cliente experimentan una latencia de ejecución de transacciones alta. El análisis de las estadísticas de transacciones puede ayudar a descubrir cuellos de botella potenciales, como grandes volúmenes de actualizaciones en una columna en particular, que podrían afectar la latencia.

Availability

Los datos SPANNER_SYS solo están disponibles a través de interfaces de SQL (por ejemplo, executeQuery y gcloud spanner databases execute-sql); otros métodos de lectura únicos que proporciona Cloud Spanner no son compatibles con SPANNER_SYS.

Estadísticas de latencia agrupadas por transacción

En las siguientes tablas, se realiza un seguimiento de las estadísticas de las transacciones que consumen recursos TOP durante un período específico.

  • SPANNER_SYS.TXN_STATS_TOP_MINUTE: Estadísticas de transacciones agregadas en intervalos de 1 minuto.

  • SPANNER_SYS.TXN_STATS_TOP_10MINUTE: Estadísticas de transacciones agregadas en intervalos de 10 minutos.

  • SPANNER_SYS.TXN_STATS_TOP_HOUR: Estadísticas de transacciones agregadas 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 finalizan en el minuto, los intervalos de 10 minutos finalizan cada 10 minutos a partir de la hora y los intervalos de 1 hora finalizan 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:01 a 11:59:00 a.m.
    • 10 minutos: De 11:40:01 a 11:50:00 a.m.
    • 1 hora: De 10:00:01 a 11:00:00 a.m.
  • Cloud Spanner agrupa las estadísticas según las FPRINT (huellas digitales) de las transacciones. FPRINT es el hash calculado según las operaciones involucradas en la transacción.

  • Debido a que las estadísticas se agrupan en función de FPRINT, si la misma transacción se ejecuta varias veces en cualquier intervalo de tiempo, solo veremos una entrada para esa transacción en estas tablas.

  • Cada fila contiene estadísticas de todas las ejecuciones de una transacción en particular que Cloud Spanner captura estadísticas durante el intervalo especificado.

Si Cloud Spanner no puede almacenar estadísticas de todas las transacciones ejecutadas durante el intervalo en estas tablas, el sistema prioriza las transacciones con la latencia más alta, los intentos de confirmación y los bytes escritos durante el intervalo especificado.

Esquema de la tabla

Nombre de la columna Tipo Descripción
INTERVAL_END TIMESTAMP Fin del intervalo de tiempo en el que se produjeron las ejecuciones de transacciones incluidas.
FPRINT INT64 La huella digital es el hash calculado según las operaciones involucradas en la transacción. INTERVAL_END y FPRINT en conjunto actúan como una clave única para estas tablas.
READ_COLUMNS ARRAY<STRING> El conjunto de columnas que leyó la transacción.
WRITE_CONSTRUCTIVE_COLUMNS ARRAY<STRING> Es el conjunto de columnas que la transacción escribió de manera constructiva (es decir, asignadas a valores nuevos).
WRITE_DELETE_TABLES ARRAY<STRING> El conjunto de tablas que tenían filas borradas o reemplazadas por la transacción.
COMMIT_ATTEMPT_COUNT INT64 Cantidad total de intentos de confirmación en la transacción.
COMMIT_FAILED_PRECONDITION_COUNT INT64 Cantidad total de errores de condición previa (FAILED_PRECONDITION) para la transacción.
COMMIT_ABORT_COUNT INT64 Cantidad de veces que se anularon las confirmaciones para la transacción.
AVG_PARTICIPANTS FLOAT64 Cantidad promedio de participantes en cada intento de confirmación Para obtener más información sobre los participantes, consulta El ciclo de las operaciones de lectura y escritura en Cloud Spanner.
AVG_TOTAL_LATENCY_SECONDS FLOAT64 Promedio de segundos tomados de la primera operación de la transacción para confirmar o anular
AVG_COMMIT_LATENCY_SECONDS FLOAT64 Promedio de segundos necesarios para realizar la operación de confirmación.
AVG_BYTES FLOAT64 Cantidad promedio de bytes escritos por la transacción.

Ejemplos de consultas

Esta sección incluye varias instrucciones de SQL de ejemplo que recuperan estadísticas de transacciones. Puedes ejecutar estas instrucciones de SQL con las bibliotecas cliente, la herramienta de línea de comandos de gcloud o Cloud Console.

Enumera las estadísticas básicas de cada transacción en un período determinado

La siguiente consulta muestra los datos sin procesar de las transacciones principales del minuto anterior.

SELECT fprint,
       read_columns,
       write_constructive_columns,
       write_delete_tables,
       avg_total_latency_seconds,
       avg_commit_latency_seconds,
       avg_bytes
FROM spanner_sys.txn_stats_top_minute
WHERE interval_end =
  (SELECT MAX(interval_end)
   FROM spanner_sys.txn_stats_top_minute);
Resultado de la consulta
fprint read_columns write_constructive_columns write_delete_tables avg_total_latency_seconds avg_commit_latency_seconds avg_bytes
40015598317 [] ["Routes"] ["Users"] 0.006578737 0.006547737 25286
20524969030 ["id", "no"] [] [] 0.001732442 0.000247442 0
77848338483 [] [] ["Cars", "Routes"] 0.033467418 0.000251418 0

Enumera las transacciones con la latencia de confirmación promedio más alta

En la siguiente consulta, se muestran las transacciones con latencia de confirmación promedio alta en la hora anterior, ordenadas desde la latencia de confirmación promedio más alta a la más baja.

SELECT fprint,
       read_columns,
       write_constructive_columns,
       write_delete_tables,
       avg_total_latency_seconds,
       avg_commit_latency_seconds,
       avg_bytes
FROM spanner_sys.txn_stats_top_hour
WHERE interval_end =
  (SELECT MAX(interval_end)
   FROM spanner_sys.txn_stats_top_hour)
ORDER BY avg_commit_latency_seconds DESC;
Resultado de la consulta
fprint read_columns write_constructive_columns write_delete_tables avg_total_latency_seconds avg_commit_latency_seconds avg_bytes
40015598317 [] ["Routes"] ["Users"] 0.006578737 0.006547737 25286
77848338483 [] [] ["Cars", "Routes"] 0.033467418 0.000251418 0
20524969030 ["id", "no"] [] [] 0.001732442 0.000247442 0

Encuentra la latencia promedio de las transacciones que leen ciertas columnas

En la siguiente consulta, se muestra la información de latencia promedio para las transacciones que leen la columna ADDRESS de las estadísticas de 1 hora:

SELECT fprint,
       read_columns,
       write_constructive_columns,
       write_delete_tables,
       avg_total_latency_seconds
FROM spanner_sys.txn_stats_top_hour
WHERE 'ADDRESS' IN UNNEST(read_columns)
ORDER BY avg_total_latency_seconds DESC;
Resultado de la consulta
fprint read_columns write_constructive_columns write_delete_tables avg_total_latency_seconds
77848338483 ["ID", "ADDRESS"] [] ["Cars", "Routes"] 0.033467418
40015598317 ["ID", "NAME", "ADDRESS"] [] ["Users"] 0.006578737

Enumera las transacciones según la cantidad promedio de bytes modificados

En la siguiente consulta, se observan las transacciones muestreadas en la última hora, ordenadas por la cantidad promedio de bytes modificados por la transacción.

SELECT fprint,
       read_columns,
       write_constructive_columns,
       write_delete_tables,
       avg_bytes
FROM spanner_sys.txn_stats_top_hour
ORDER BY avg_bytes DESC;
Resultado de la consulta
fprint read_columns write_constructive_columns write_delete_tables avg_bytes
40015598317 [] [] ["Users"] 25286
77848338483 [] [] ["Cars", "Routes"] 12005
20524969030 ["ID", "ADDRESS"] [] ["Users"] 10923

Estadísticas agregadas

SPANNER_SYS también contiene tablas a fin de almacenar datos agregados de todas las transacciones para las que Cloud Spanner capturó estadísticas en un período específico:

  • SPANNER_SYS.TXN_STATS_TOTAL_MINUTE: agrega estadísticas para todas las transacciones durante intervalos de 1 minuto
  • SPANNER_SYS.TXN_STATS_TOTAL_10MINUTE: agrega estadísticas para todas las transacciones durante intervalos de 10 minutos
  • SPANNER_SYS.TXN_STATS_TOTAL_HOUR: agrega estadísticas para todas las transacciones durante intervalos de 1 hora

Las tablas de estadísticas agregadas 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 finalizan en el minuto, los intervalos de 10 minutos finalizan cada 10 minutos a partir de la hora y los intervalos de 1 hora finalizan en la hora.

    Por ejemplo, a las 11:59:30 a.m., los intervalos más recientes disponibles para las consultas de SQL sobre las estadísticas de transacciones agregadas son los siguientes:

    • 1 minuto: De 11:58:01 a 11:59:00 a.m.
    • 10 minutos: De 11:40:01 a 11:50:00 a.m.
    • 1 hora: De 10:00:01 a 11:00:00 a.m.
  • Cada fila contiene estadísticas para todas las transacciones ejecutadas en la base de datos durante el intervalo especificado, combinadas. Solo hay una fila por intervalo de tiempo.

  • Las estadísticas capturadas en las tablas SPANNER_SYS.TXN_STATS_TOTAL_* pueden incluir transacciones que Cloud Spanner no capturó en las tablas SPANNER_SYS.TXN_STATS_TOP_*.

Esquema de la tabla

Nombre de la columna Tipo Descripción
INTERVAL_END TIMESTAMP Fin del intervalo de tiempo en el que se capturó esta estadística.
COMMIT_ATTEMPT_COUNT INT64 Cantidad total de intentos de confirmación en la transacción.
COMMIT_FAILED_PRECONDITION_COUNT INT64 Cantidad total de errores de condición previa (FAILED_PRECONDITION) para la transacción.
COMMIT_ABORT_COUNT INT64 Cantidad de veces que se anularon las confirmaciones para la transacción.
AVG_PARTICIPANTS FLOAT64 Cantidad promedio de participantes en cada intento de confirmación Para obtener más información sobre los participantes, consulta El ciclo de las operaciones de lectura y escritura en Cloud Spanner.
AVG_TOTAL_LATENCY_SECONDS FLOAT64 Promedio de segundos tomados de la primera operación de la transacción para confirmar o anular
AVG_COMMIT_LATENCY_SECONDS FLOAT64 Promedio de segundos necesarios para realizar la operación de confirmación.
AVG_BYTES FLOAT64 Cantidad promedio de bytes escritos por la transacción.

Ejemplos de consultas

Esta sección incluye varias instrucciones de SQL de ejemplo que recuperan estadísticas de transacciones. Puedes ejecutar estas instrucciones de SQL con las bibliotecas cliente, la herramienta de línea de comandos de gcloud o Cloud Console.

Encuentra la cantidad total de intentos de confirmación para una transacción en un período de tiempo determinado

En la siguiente consulta, se muestra la cantidad total de intentos de confirmación para todas las transacciones en el intervalo de 1 minuto completo más reciente:

SELECT interval_end,
       commit_attempt_count
FROM spanner_sys.txn_stats_total_minute
WHERE interval_end =
  (SELECT MAX(interval_end)
   FROM spanner_sys.txn_stats_total_minute)
ORDER BY interval_end;
Resultado de la consulta
interval_end commit_attempt_count
2020-01-17 11:46:00-08:00 21

Ten en cuenta que solo hay una fila en el resultado porque las estadísticas agregadas tienen solo una entrada por interval_end para cualquier duración de tiempo.

Encuentra la latencia de confirmación total en todas las transacciones

La siguiente consulta muestra la latencia de confirmación total en todas las transacciones de los 10 minutos anteriores:

SELECT (avg_commit_latency_seconds * commit_attempt_count / 60 / 60)
  AS total_commit_latency_hours
FROM spanner_sys.txn_stats_total_10minute
WHERE interval_end =
  (SELECT MAX(interval_end)
   FROM spanner_sys.txn_stats_total_10minute);
Resultado de la consulta
total_commit_latency_hours
0.8967

Ten en cuenta que solo hay una fila en el resultado porque las estadísticas agregadas tienen solo una entrada por interval_end para cualquier duración de tiempo.

Retención de datos

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

  • SPANNER_SYS.TXN_STATS_TOP_MINUTE y SPANNER_SYS.TXN_STATS_TOTAL_MINUTE: Intervalos que abarcan las 6 horas anteriores.

  • SPANNER_SYS.TXN_STATS_TOP_10MINUTE y SPANNER_SYS.TXN_STATS_TOTAL_10MINUTE: Intervalos que abarcan los 4 días anteriores.

  • SPANNER_SYS.TXN_STATS_TOP_HOUR y SPANNER_SYS.TXN_STATS_TOTAL_HOUR: Intervalos que abarcan los 30 días anteriores.

Qué sigue