Se usó la API de Cloud Translation para traducir esta página.
Switch to English

Estadísticas de consulta

Cloud Spanner proporciona tablas integradas que conservan muchas estadísticas de las consultas que usaron más CPU y todas las consultas en conjunto. Google Cloud Console usa los datos de estas tablas SPANNER_SYS.QUERY_STATS* para generar la vista de estadísticas de consultas. También puedes recuperar estadísticas de las tablas mediante las instrucciones de SQL.

Uso

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.

Uso de CPU agrupado por consulta

Con las siguientes tablas, se realiza un seguimiento de las consultas con el uso más alto de CPU durante un período específico:

  • SPANNER_SYS.QUERY_STATS_TOP_MINUTE: Consultas en intervalos de 1 minuto
  • SPANNER_SYS.QUERY_STATS_TOP_10MINUTE: Consultas en intervalos de 10 minutos
  • SPANNER_SYS.QUERY_STATS_TOP_HOUR: Consultas 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 el texto de la consulta de SQL. Si una consulta usa parámetros de búsqueda, Cloud Spanner agrupa todas las ejecuciones de esa consulta en una fila. Si la consulta usa literales de string, Cloud Spanner solo agrupa las estadísticas si el texto completo de la consulta es idéntico; cuando algún texto difiere, cada consulta aparece como una fila separada.

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

  • Si Cloud Spanner no puede almacenar todas las consultas que se ejecutan durante el intervalo, el sistema prioriza las consultas con el mayor uso de CPU durante el intervalo especificado.

  • Las consultas con seguimiento incluyen aquellas que se completaron, fallaron o que el usuario canceló.

  • Un subconjunto de estadísticas es específico de las consultas que se ejecutaron, pero que no se completaron:

    • Recuento de ejecuciones y latencia menor en segundos en todas las consultas que no tuvieron éxito.

    • Recuento de ejecución para las consultas que agotó el tiempo de espera.

    • Recuento de ejecución para las consultas que el usuario canceló o falló debido a problemas de conectividad de red.

Esquema de la tabla

Nombre de la columna Tipo Descripción
INTERVAL_END TIMESTAMP Fin del intervalo en el que se produjeron las ejecuciones de consultas incluidas
TEXT STRING Texto de consulta de SQL, truncado a aproximadamente 64 KB
TEXT_TRUNCATED BOOL Indica si el texto de la consulta se truncó o no
TEXT_FINGERPRINT INT64 Hash del texto de la consulta
EXECUTION_COUNT INT64 Cantidad de veces que Cloud Spanner hizo la consulta durante el intervalo.
AVG_LATENCY_SECONDS FLOAT64 Promedio de tiempo, en segundos, para cada ejecución de consulta dentro de la base de datos. Este promedio excluye la codificación y el tiempo de transmisión del conjunto de resultados, así como la sobrecarga.
AVG_ROWS FLOAT64 Promedio de filas que mostró la consulta.
AVG_BYTES FLOAT64 Promedio de bytes de datos que mostró la consulta, sin incluir la sobrecarga de codificación de transmisión.
AVG_ROWS_SCANNED FLOAT64 Promedio de filas que analizó la consulta, sin incluir los valores borrados.
AVG_CPU_SECONDS FLOAT64 Promedio de segundos de tiempo de CPU que Cloud Spanner invirtió en todas las operaciones para ejecutar la consulta.
ALL_FAILED_EXECUTION_COUNT INT64 Cantidad de veces que la consulta falló durante el intervalo.
ALL_FAILED_AVG_LATENCY_SECONDS FLOAT64 Promedio de tiempo, en segundos, por cada ejecución de consulta que falló en la base de datos. Este promedio excluye la codificación y el tiempo de transmisión del conjunto de resultados, así como la sobrecarga.
CANCELLED_OR_DISCONNECTED_EXECUTION_COUNT INT64 Cantidad de veces que el usuario canceló la consulta o falló debido a una conexión de red dañada durante el intervalo.
TIMED_OUT_EXECUTION_COUNT INT64 Cantidad de veces que se agotó el tiempo de espera de la consulta durante el intervalo.

EXECUTION_COUNT y AVG_LATENCY_SECONDS para las consultas fallidas incluyen consultas que fallaron debido a una sintaxis incorrecta o que se encontraron un error transitorio, pero que se realizaron correctamente.

Tablas para estadísticas adicionales

También hay tablas que realizan un seguimiento de los datos adicionales de todas las consultas para las que Cloud Spanner capturó las estadísticas en un período específico:

  • SPANNER_SYS.QUERY_STATS_TOTAL_MINUTE: Consultas en intervalos de 1 minuto
  • SPANNER_SYS.QUERY_STATS_TOTAL_10MINUTE: Consultas en intervalos de 10 minutos
  • SPANNER_SYS.QUERY_STATS_TOTAL_HOUR: Consultas 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.
  • Cada fila contiene estadísticas de todas las consultas que se ejecutaron en la base de datos durante el intervalo especificado, combinadas. Solo hay una fila por intervalo de tiempo y, además, incluye consultas completadas, consultas fallidas y consultas que el usuario canceló.

  • Las estadísticas capturadas en las tablas TOTAL pueden incluir consultas que Cloud Spanner no capturó en las tablas TOP.

Esquema de la tabla

Nombre de la columna Tipo Descripción
INTERVAL_END TIMESTAMP Fin del intervalo en el que se produjeron las ejecuciones de consultas incluidas
EXECUTION_COUNT INT64 Cantidad de veces que Cloud Spanner hizo la consulta durante el intervalo.
AVG_LATENCY_SECONDS FLOAT64 Promedio de tiempo, en segundos, para cada ejecución de consulta dentro de la base de datos. Este promedio excluye la codificación y el tiempo de transmisión del conjunto de resultados, así como la sobrecarga.
AVG_ROWS FLOAT64 Promedio de filas que mostró la consulta.
AVG_BYTES FLOAT64 Promedio de bytes de datos que mostró la consulta, sin incluir la sobrecarga de codificación de transmisión.
AVG_ROWS_SCANNED FLOAT64 Promedio de filas que analizó la consulta, sin incluir los valores borrados.
AVG_CPU_SECONDS FLOAT64 Promedio de segundos de tiempo de CPU que Cloud Spanner invirtió en todas las operaciones para ejecutar la consulta.
ALL_FAILED_EXECUTION_COUNT INT64 Cantidad de veces que la consulta falló durante el intervalo.
ALL_FAILED_AVG_LATENCY_SECONDS FLOAT64 Promedio de tiempo, en segundos, por cada ejecución de consulta que falló en la base de datos. Este promedio excluye la codificación y el tiempo de transmisión del conjunto de resultados, así como la sobrecarga.
CANCELLED_OR_DISCONNECTED_EXECUTION_COUNT INT64 Cantidad de veces que el usuario canceló la consulta o falló debido a una conexión de red dañada durante el intervalo.
TIMED_OUT_EXECUTION_COUNT INT64 Cantidad de veces que se agotó el tiempo de espera de la consulta durante el intervalo.

Retención de datos

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

  • SPANNER_SYS.QUERY_STATS_TOP_MINUTE y SPANNER_SYS.QUERY_STATS_TOTAL_MINUTE: Intervalos que abarcan las 6 horas anteriores.

  • SPANNER_SYS.QUERY_STATS_TOP_10MINUTE y SPANNER_SYS.QUERY_STATS_TOTAL_10MINUTE: Intervalos que abarcan los 4 días anteriores.

  • SPANNER_SYS.QUERY_STATS_TOP_HOUR y SPANNER_SYS.QUERY_STATS_TOTAL_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 de consultas. Puedes ejecutar estas instrucciones de SQL con las bibliotecas cliente, la herramienta de línea de comandos de gcloud o Cloud Console.

Genera una lista de las estadísticas básicas de cada consulta en un período determinado

La siguiente consulta muestra los datos sin procesar de las consultas principales en el minuto anterior:

SELECT text,
       interval_end,
       execution_count,
       avg_latency_seconds,
       avg_rows,
       avg_bytes,
       avg_rows_scanned,
       avg_cpu_seconds
FROM spanner_sys.query_stats_top_minute
ORDER BY interval_end DESC;

Genera una lista de las consultas con el mayor uso de CPU

La siguiente consulta muestra las consultas con el uso de CPU más alto en la hora anterior:

SELECT text,
       execution_count AS count,
       avg_latency_seconds AS latency,
       avg_cpu_seconds AS cpu,
       execution_count * avg_cpu_seconds AS total_cpu
FROM spanner_sys.query_stats_top_hour
WHERE interval_end =
  (SELECT MAX(interval_end)
   FROM spanner_sys.query_stats_top_hour)
ORDER BY total_cpu DESC;

Encuentra el recuento total de ejecuciones en un período determinado

La siguiente consulta muestra la cantidad total de consultas ejecutadas en el intervalo completo de 1 minuto más reciente:

SELECT interval_end,
       execution_count
FROM spanner_sys.query_stats_total_minute
WHERE interval_end =
  (SELECT MAX(interval_end)
   FROM spanner_sys.query_stats_top_minute);

Encuentra la latencia promedio de una consulta

La siguiente consulta muestra la información de latencia promedio de una consulta específica:

SELECT avg_latency_seconds
FROM spanner_sys.query_stats_top_hour
WHERE text LIKE "SELECT x FROM table WHERE x=@foo;";

Encuentra las consultas que analizan la mayor cantidad de datos

Puedes usar la cantidad de filas analizadas por una consulta como una medida de la cantidad de datos que analizó la consulta. La siguiente consulta muestra el número de filas analizadas por consultas ejecutadas en la hora anterior:

SELECT text,
       execution_count,
       avg_rows_scanned
FROM spanner_sys.query_stats_top_hour
WHERE interval_end =
  (SELECT MAX(interval_end)
   FROM spanner_sys.query_stats_top_hour)
ORDER BY avg_rows_scanned DESC;

Calcular el total de uso de la CPU en todas las consultas

La siguiente consulta muestra el número de horas de CPU usadas en la hora anterior:

SELECT (avg_cpu_seconds * execution_count / 60 / 60)
  AS total_cpu_hours
FROM spanner_sys.query_stats_total_hour
WHERE interval_end =
  (SELECT MAX(interval_end)
   FROM spanner_sys.query_stats_total_hour);

Enumera las consultas que fallaron en un período determinado

La siguiente consulta muestra los datos sin procesar, incluida la cantidad de ejecuciones y la latencia promedio de las consultas fallidas de las principales consultas del minuto anterior:

SELECT text,
       interval_end,
       execution_count,
       all_failed_execution_count,
       all_failed_avg_latency_seconds,
       avg_latency_seconds,
       avg_rows,
       avg_bytes,
       avg_rows_scanned,
       avg_cpu_seconds
FROM spanner_sys.query_stats_top_minute
WHERE all_failed_execution_count > 0
ORDER BY interval_end;

Encuentra el recuento total de errores en un período determinado

La siguiente consulta muestra la cantidad total de consultas que no se pudieron ejecutar en el intervalo completo de 1 minuto más reciente.

SELECT interval_end,
       all_failed_execution_count
FROM spanner_sys.query_stats_total_minute
WHERE interval_end =
  (SELECT MAX(interval_end)
   FROM spanner_sys.query_stats_top_minute)
ORDER BY interval_end;

Genera una lista de las consultas que generan más tiempo de espera

La siguiente consulta muestra las consultas con el mayor tiempo de espera en la hora anterior.

SELECT text,
       execution_count AS count,
       timed_out_execution_count AS timeout_count,
       avg_latency_seconds AS latency,
       avg_cpu_seconds AS cpu,
       execution_count * avg_cpu_seconds AS total_cpu
FROM spanner_sys.query_stats_top_hour
WHERE interval_end =
  (SELECT MAX(interval_end)
   FROM spanner_sys.query_stats_top_hour)
ORDER BY timed_out_execution_count DESC;

Encontrar la latencia promedio de ejecuciones correctas y con errores para una consulta

La siguiente consulta muestra la latencia promedio combinada, la latencia promedio para ejecuciones correctas y la latencia promedio de ejecuciones fallidas para una consulta específica.

SELECT avg_latency_seconds AS combined_avg_latency,
       all_failed_avg_latency_seconds AS failed_execution_latency,
       ( avg_latency_seconds * execution_count -
         all_failed_avg_latency_seconds * all_failed_execution_count
       ) / (
       execution_count - all_failed_execution_count ) AS success_execution_latency
FROM   spanner_sys.query_stats_top_hour
WHERE  text LIKE "select x from table where x=@foo;";

Solución de problemas de uso de CPU elevado o latencia alta de consulta con estadísticas de consultas

Las estadísticas de consultas son útiles cuando necesitas investigar un alto uso de CPU en tu base de datos de Cloud Spanner o cuando solo intentas comprender las formas de consultas que consumen mucha CPU en tu base de datos. Inspeccionar las consultas que usan cantidades significativas de recursos de base de datos brinda a los usuarios de Cloud Spanner una posible forma de reducir los costos operativos y, posiblemente, mejorar las latencias generales del sistema. Mediante los siguientes pasos, te mostraremos cómo usar las estadísticas de consultas para investigar el uso elevado de CPU en tu base de datos.

Si bien el siguiente ejemplo se enfoca en el uso de la CPU, se pueden seguir pasos similares para solucionar problemas de latencia de consulta elevada y encontrar las consultas con las latencias más altas. Simplemente selecciona intervalos de tiempo y consultas por latencia en lugar de uso de CPU.

Selecciona un período de tiempo para investigar

Comienza tu investigación en busca de un momento en el que tu aplicación comenzó a experimentar un uso de CPU elevado. Por ejemplo, supongamos que el problema comenzó alrededor de las 5:00 p.m. del 24 de julio de 2020.

Recopila estadísticas de consultas para el período seleccionado

Después de seleccionar un período para comenzar nuestra investigación, veremos las estadísticas recopiladas en la tabla QUERY_STATS_TOTAL_10MINUTE alrededor de esa fecha. Los resultados de esta consulta pueden indicar cómo cambiaron la CPU y otras estadísticas de consulta durante ese período.

La siguiente consulta muestra las estadísticas de consultas agregadas de 16:30 a 17:30 UTC, incluido. Usamos ROUND en nuestra consulta para restringir la cantidad de decimales con fines de visualización.

SELECT interval_end,
       execution_count AS count,
       ROUND(avg_total_latency_seconds,2) AS latency,
       ROUND(avg_rows,2) AS rows_returned,
       ROUND(avg_bytes,2) AS bytes,
       ROUND(avg_rows_scanned,2) AS rows_scanned,
       ROUND(avg_cpu_seconds,3) AS avg_cpu
FROM spanner_sys.query_stats_total_10minute
WHERE
  interval_end >= "2020-07-24T16:30:00Z"
  AND interval_end <= "2020-07-20T17:30:00Z"
ORDER BY interval_end;

Cuando se ejecuta la consulta, se produjeron los siguientes resultados.

interval_end count Latencia filas_devolución bytes rows_scanned CPU_promedio
24-07-2020 16:030:00 6 0.06 USD 5,00 345.00 16,67 0,05
24-07-2020 16:40:00Z 55 0.02 0,2 25,29 0,2 0,004
24-07-2020 16:50:00 102 0.02 0,30 33.35 0,30 0,004
2020-07-24T17:00:00Z 154 1.06 4.42 486.33 7792208.12 4.633
24-07-2020 T1:10Z 94 0.02 1,68 106.84 1,68 0.006
24-07-2020 T:20:00Z 110 0.02 0.38 34,60 0.38 0,005
24-07-2020 T:30:00Z 47 0.02 0.23 24,96 0.23 0,004

En la tabla anterior, vemos que el tiempo de CPU promedio, la columna avg_cpu de la tabla de resultados, es más alto en los intervalos destacados que terminan en 17:00. También vemos una cantidad mucho mayor de filas analizadas en promedio. Esto indica que las consultas más costosas se ejecutaron entre 16:50 y 17:00. Elijamos ese intervalo para investigar más a fondo en el siguiente paso.

Descubrir qué consultas provocan un alto uso de CPU

Con un intervalo de tiempo para investigar seleccionado, ahora consultamos la tabla QUERY_STATS_TOP_10MINUTE. Los resultados de esta consulta pueden ayudar a indicar qué consultas causan un alto uso de la CPU.

SELECT text_fingerprint AS fingerprint,
       execution_count AS count,
       ROUND(avg_latency_seconds,2) AS latency,
       ROUND(avg_cpu_seconds,3) AS cpu,
       ROUND(execution_count * avg_cpu_seconds,3) AS total_cpu
FROM spanner_sys.query_stats_top_10MINUTE
WHERE
  interval_end = "2020-07-20T17:00:00Z"
ORDER BY total_cpu DESC;

Si ejecutas esta consulta, obtendrás los resultados siguientes.

huella digital count Latencia cpu total_cpu
5505124206529314852 30 3.88 17.635 529.039
1697951036096498470 10 4.49 18.388 183.882
2295109096748351518 1 0,33 0,048 0,048
11618299167612903606 1 0.25 0,02 0,02
10302798842433860499 1 0,04 0.006 0.006
123771704548746223 1 0,04 0.006 0.006
4216063638051261350 1 0,04 0.006 0.006
3654744714919476398 1 0,04 0.006 0.006
2999453161628434990 1 0,04 0.006 0.006
823179738756093706 1 0.02 0,005 0.0056

Las 2 consultas principales, destacadas en la tabla de resultados, son valores atípicos en términos de CPU y latencia promedio, así como la cantidad de ejecuciones y la CPU total. Investigue la primera consulta que aparece en estos resultados.

Comparación de ejecuciones de consultas a lo largo del tiempo

Al reducir la investigación, podemos convertir la atención en la tabla QUERY_STATS_TOP_MINUTE. Mediante la comparación de ejecuciones a lo largo del tiempo para una consulta en particular, podemos buscar correlaciones entre la cantidad de filas o bytes mostrados, o la cantidad de filas analizadas y la CPU o latencia elevada. Una desviación puede indicar que no es uniformidad en los datos. Un número consistente de filas analizadas de forma coherente puede indicar la falta de índices o un orden de unión subóptimo óptimo.

Investigaremos la consulta que muestra el uso promedio de CPU más alto y la latencia más alta; para ello, ejecuta la siguiente declaración, que filtra el texto fingerprint de esa consulta.

SELECT interval_end,
       ROUND(avg_latency_seconds,2) AS latency,
       avg_rows AS rows_returned,
       avg_bytes AS bytes_returned,
       avg_rows_scanned AS rows_scanned,
       ROUND(avg_cpu_seconds,3) AS cpu,
FROM spanner_sys.query_stats_top_minute
WHERE text_fingerprint = 5505124206529314852
ORDER BY interval_end DESC;

Si ejecutas esta consulta, se mostrarán los siguientes resultados.

interval_end Latencia filas_devolución bytes_devueltas rows_scanned cpu
24-07-2020 T:00:00Z 4.55 21 2365 30000000 19,255
24-07-2020 16:00 a.m. 33.6 21 2365 30000000 17,255
24-07-2020 P15:00:00Z 4.37 21 2365 30000000 18,350
24-07-2020 P14:00:00Z 4.02 21 2365 30000000 17.748
24-07-2020 13:00:00Z 3.12 21 2365 30000000 16,380
24-07-2020 P12:00:00Z 3.45 21 2365 30000000 15,476
24-07-2020 11:00:00Z 4,94 21 2365 30000000 2,2.611
24-07-2020 10:00:00. 6.48 21 2365 30000000 21,265
24-07-2020T:00:00Z 0.23 21 2365 5 0,05
24-07-2020 0,04 21 2365 5 0,02
24-07-2020T:00:00Z 0,05 21 2365 5 0,30

Cuando examinamos los resultados anteriores, vemos que la cantidad de filas analizadas, la CPU utilizada y la latencia cambiaron significativamente a las 9:00 a.m. Para comprender por qué estos números aumentaron de manera notable, examinaremos el texto de la consulta y ver si algún cambio en el esquema podría haber afectado la consulta.

Usa la siguiente consulta para recuperar el texto de la consulta que investigamos.

SELECT text,
       text_truncated
FROM spanner_sys.query_stats_top_hour
WHERE text_fingerprint = 5505124206529314852
LIMIT 1;

Esto muestra el siguiente resultado.

text text_truncated
seleccionar * de los pedidos donde o_custkey = 36901; falso

Cuando examinas el texto de la consulta que se muestra, nos dimos cuenta de que la consulta filtra en un campo llamado o_custkey. Esta es una columna sin clave en la tabla orders. Como sucede, solía haber un índice en esa columna que se descartó alrededor de las 9:00 a.m. Esto explica el cambio en el costo para esta consulta. Podemos volver a agregar el índice o, si la consulta se ejecuta con poca frecuencia, decide no tener el índice y aceptar el costo de lectura más alto.

Nuestra investigación se centró en las consultas que se completaron de forma correcta y descubrimos un motivo por el que la base de datos experimentó alguna degradación del rendimiento. En el siguiente paso, nos enfocaremos en las consultas fallidas o canceladas y mostraremos cómo examinar esos datos para obtener más estadísticas.

Investigar búsquedas fallidas

Las consultas que no se completan de manera correcta aún consumen recursos antes de que se agote el tiempo de espera, se cancelan o fallan de alguna otra forma. Cloud Spanner realiza un seguimiento del recuento de ejecución y los recursos consumidos por las consultas fallidas junto con las correctas.

Para verificar si las consultas fallidas son un colaborador importante del uso del sistema, primero podemos verificar cuántas consultas fallaron en el intervalo de interés.

SELECT interval_end,
       all_failed_execution_count AS failed_count,
       all_failed_avg_latency_seconds AS latency
FROM spanner_sys.query_stats_total_minute
WHERE
  interval_end >= "2020-07-24T16:50:00Z"
  AND interval_end <= "2020-07-24T17:00:00Z"
ORDER BY interval_end;
interval_end error_recuento Latencia
24-07-2020 16:05:00 1 15,211391
24-07-2020T5:53:00Z 3 58,31232

Si se investiga aún más, podemos buscar las consultas que es más probable que fallen con la siguiente consulta.

SELECT interval_end,
       text_fingerprint,
       execution_count,
       avg_latency_seconds AS avg_latency,
       all_failed_execution_count AS failed_count,
       all_failed_avg_latency_seconds AS failed_latency,
       cancelled_or_disconnected_execution_count AS cancel_count,
       timed_out_execution_count AS to_count
FROM spanner_sys.query_stats_top_minute
WHERE all_failed_execution_count > 0
ORDER BY interval_end;
interval_end text_fingerprint execution_count error_recuento cancelar_recuento to_recuento
24-07-2020 16:05:00 5505124206529314852 3 1 1 0
24-07-2020T5:53:00Z 1697951036096498470 2 1 1 0
24-07-2020T5:53:00Z 5505124206529314852 5 2 1 1

Como se muestra en la tabla anterior, la consulta con huella digital 5505124206529314852 falló varias veces durante diferentes intervalos de tiempo. Dado un patrón de fallas como este, es interesante comparar la latencia de ejecuciones correctas y fallidas.

SELECT interval_end,
       avg_latency_seconds AS combined_avg_latency,
       all_failed_avg_latency_seconds AS failed_execution_latency,
       ( avg_latency_seconds * execution_count -
         all_failed_avg_latency_seconds * all_failed_execution_count
       ) / (
       execution_count - all_failed_execution_count ) AS success_execution_latency
FROM   spanner_sys.query_stats_top_hour
WHERE  text_fingerprint = 5505124206529314852;
interval_end latencia_combinada failed_execution_latency success_execution_latency
24-07-2020 T:00:00Z 3.880420 13,830709 2.74832

Aplica las prácticas recomendadas

Tras identificar una consulta candidata para la optimización, podemos observar el perfil de consulta y tratar de optimizar mediante las prácticas recomendadas de SQL.

¿Qué sigue?