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.
Disponibilidad
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 minutoSPANNER_SYS.QUERY_STATS_TOP_10MINUTE
: Consultas en intervalos de 10 minutosSPANNER_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: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.
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 el usuario completó, falló o canceló.
Un subconjunto de estadísticas es específico para las consultas que se ejecutaron, pero que no se completaron:
Recuento de ejecuciones y latencia media en segundos en todas las consultas que no tuvieron éxito.
Recuento de ejecuciones para las consultas que se agotó el tiempo de espera.
Recuento de ejecuciones para las consultas que canceló el usuario o que no se pudieron completar debido a problemas de conectividad de la 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 |
Cantidad 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, para 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 con error incluyen consultas que fallaron debido a una sintaxis incorrecta o encontraron un error transitorio, pero se realizaron correctamente luego de reintentar.
Estadísticas agregadas
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 minutoSPANNER_SYS.QUERY_STATS_TOTAL_10MINUTE
: Consultas en intervalos de 10 minutosSPANNER_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: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.
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, que incluye consultas completadas, consultas con errores y las que canceló el usuario.
Las estadísticas capturadas en las tablas
TOTAL
pueden incluir consultas que Cloud Spanner no capturó en las tablasTOP
.
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 |
Cantidad 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, para 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
ySPANNER_SYS.QUERY_STATS_TOTAL_MINUTE
: Intervalos que abarcan las 6 horas anteriores.SPANNER_SYS.QUERY_STATS_TOP_10MINUTE
ySPANNER_SYS.QUERY_STATS_TOTAL_10MINUTE
: Intervalos que abarcan los 4 días anteriores.SPANNER_SYS.QUERY_STATS_TOP_HOUR
ySPANNER_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);
Genera una lista de las consultas que fallaron en un período de tiempo determinado
La siguiente consulta muestra los datos sin procesar, incluido el recuento de ejecución y la latencia promedio de las consultas con errores de las consultas principales 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;
Cómo encontrar 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 con más tiempo de espera
La siguiente consulta muestra las consultas con el recuento de tiempo de espera más alto 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;
Encuentra la latencia promedio de las ejecuciones correctas y con errores de una consulta
En la siguiente consulta, se muestra la latencia promedio combinada, la latencia promedio de las ejecuciones exitosas y la latencia promedio de las ejecuciones fallidas de 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;";
Soluciona problemas de uso de CPU alto o latencia elevada de consultas con estadísticas de consultas
Las estadísticas de consultas son útiles cuando necesitas investigar el uso alto de CPU en tu base de datos de Cloud Spanner o cuando solo intentas comprender las formas de consultas pesadas de 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 forma potencial de reducir los costos operativos y, posiblemente, mejorar las latencias generales del sistema. En 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 ejemplo a continuación se enfoca en el uso de CPU, se pueden seguir pasos similares para solucionar problemas de latencia de las consultas y encontrar las consultas con las mayores latencias. Solo debes seleccionar intervalos de tiempo y consultas por latencia en lugar del uso de CPU.
Selecciona un período de tiempo para investigar
Comienza tu investigación; para ello, busca un momento en el que tu aplicación haya comenzado a experimentar un uso elevado de CPU. Por ejemplo, digamos que el problema comenzó a las 5:00 p.m. el 24 de julio de 2020.
Recopila estadísticas de consultas para el período seleccionado
Cuando selecciones un período para iniciar nuestra investigación, analizaremos las estadísticas recopiladas en la tabla QUERY_STATS_TOTAL_10MINUTE
alrededor de ese momento.
Los resultados de esta consulta podrían indicar cómo cambiaron las estadísticas de CPU y de otras consultas durante ese período.
La siguiente consulta muestra las estadísticas de consulta agregadas de 16:30 a 17:30 UTC inclusive. Usamos ROUND
en nuestra consulta a fin de restringir el número de decimales para fines de visualización.
SELECT interval_end,
execution_count AS count,
ROUND(avg_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 | rows_returned | bytes | rows_scann | CPU_promedio |
---|---|---|---|---|---|---|
24 de julio de 2020:30:00Z | 6 | 0.06 | 5.00 | 566.0 | 16,67 | 0,0335 |
24-07-2020:40:00Z | 55 | 0.02 | 0,22 | 25.29 | 0,22 | 0.004 |
24 de julio de 2020:50:00Z | 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 de julio de 2020:10:00 Z | 94 | 0.02 | 1,68 | 106.84 | 1,68 | 0.006 |
24 de julio de 2020:20:00Z | 110 | 0.02 | 0.38 | 34,60 | 0.38 | 0.005 |
24 de julio de 2020: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 en la tabla de resultados es más alta en los intervalos destacados que finaliza 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 en el próximo paso.
Descubre qué consultas están causando el uso elevado de CPU
Con un intervalo de tiempo para investigar seleccionado, ahora consultamos la tabla QUERY_STATS_TOP_10MINUTE
. Los resultados de esta consulta pueden indicar qué consultas generan un uso elevado de 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;
Cuando se ejecuta esta consulta, se generan los siguientes resultados.
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,48 | 0,48 |
11618299167612903606 | 1 | 0.25 | 0,21 | 0,21 |
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, que se destacan en la tabla de resultados, son valores atípicos en términos de CPU y latencia promedio, además de la cantidad de ejecuciones y la CPU total. Examinemos la primera consulta que se indica en estos resultados.
Compara las ejecuciones de consulta a lo largo del tiempo
Luego de reducir la investigación, podemos llamar la tabla a la QUERY_STATS_TOP_MINUTE
. Mediante la comparación de las ejecuciones de 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 latencia o CPU elevadas. Una desviación puede indicar que no son uniformes en los datos. La cantidad constante de filas analizadas de forma constante puede indicar la falta de índices apropiados o un orden de unión deficiente.
Ina fin de investigar la consulta que muestra el uso promedio de CPU más alto y la latencia más alta, ejecuta la siguiente declaración que filtra en text_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;
Cuando se ejecuta esta consulta, se muestran los siguientes resultados.
interval_end | Latencia | rows_returned | bytes_devueltas | rows_scann | cpu |
---|---|---|---|---|---|
24-07-2020 00:00:00:00 a.m. | 4.55 | 21 | 2365 | 30000000 | 19,255 |
24-07-2020:00:00 Z | 3,26 | 21 | 2365 | 30000000 | 17,255 |
24-07-2020 a las 15:00:00 a.m. | 4.37 | 21 | 2365 | 30000000 | 18,350 |
24-07-2020:00:00 a.m. | 4.02 | 21 | 2365 | 30000000 | 17.748 |
24-07-2020:00:00 Z | 3.12 | 21 | 2365 | 30000000 | 16.380 |
24 de julio de 2020 a las 12:00:00 a.m. | 3.45 | 21 | 2365 | 30000000 | 15,476 |
24-07-2020 a las 11:00:00 a.m. | 4,94 | 21 | 2365 | 30000000 | 2,2.611 |
24-07-2020 00:00:00:00 a.m. | 6.48 | 21 | 2365 | 30000000 | 21.265 |
24-07-2020:00:00Z | 0.23 | 21 | 2365 | 5 | 0,4040 |
24/7/7 2020 | 0,04 | 21 | 2365 | 5 | 0,21 |
24-07-2020:00:00 Z | 0.09 | 21 | 2365 | 5 | 0,30 |
Al examinar los resultados anteriores, vemos que la cantidad de filas analizadas, la CPU usada y la latencia cambiaron significativamente a las 9:00 a.m. Para comprender por qué estos números aumentaron de manera drástica, examinaremos el texto de la consulta y veremos si algún cambio en el esquema pudo 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 |
---|---|
Seleccione * de los pedidos en los que o_custkey = 36901; | falso |
Al examinar el texto de consulta que se muestra, nos dimos cuenta de que la consulta está filtrando 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 arroja cerca de las 9:00 a.m. Esto explica el cambio en el costo de esta consulta. Podemos volver a agregar el índice, o si la consulta no se ejecuta con 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 correctamente, y descubrimos un motivo por el que la base de datos tuvo algunos niveles de rendimiento. En el siguiente paso, nos enfocaremos en consultas fallidas o canceladas y mostraremos cómo examinar esos datos para obtener más información.
Investigar las consultas con errores
Las consultas que no se completan con éxito todavía consumen recursos antes de que se agoten, se cancelan o fallan. Cloud Spanner realiza un seguimiento del recuento de ejecuciones y los recursos que consumen las consultas con errores, junto con las consultas exitosas.
Para verificar si las consultas con errores son un colaborador importante del uso del sistema, primero podemos verificar cuántas consultas fallaron en el intervalo de tiempo 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:42:00Z | 1 | 15,211391 |
24 de julio de 2020:53:00 Z | 3 | 58.312232 |
Si investigas aún más, podemos buscar las consultas que tengan más probabilidades de fallar 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 | cancelación_recuento | to_count |
---|---|---|---|---|---|
24-07-2020:42:00Z | 5505124206529314852 | 3 | 1 | 1 | 0 |
24 de julio de 2020:53:00 Z | 1697951036096498470 | 2 | 1 | 1 | 0 |
24 de julio de 2020:53:00 Z | 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 las ejecuciones exitosas con éxito.
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_promedio | failed_execution_latency | latency_execution_latency |
---|---|---|---|
24-07-2020 00:00:00:00 a.m. | 3.880420 | 15.78709 | 2.774832 |
Aplica las prácticas recomendadas
Después de identificar una consulta de candidato para la optimización, podemos analizar el perfil de consulta y tratar de realizar las optimizaciones con las prácticas recomendadas de SQL.
¿Qué sigue?
Obtén información sobre cómo ver estadísticas de consultas en Cloud Console.
Usa las consultas activas más antiguas para determinar las consultas activas que duran más tiempo en ejecución.
Obtén más información sobre cómo investigar una utilización de CPU elevada.
Obtén más información sobre otras herramientas de introspección.
Aprende sobre qué otra información Cloud Spanner almacena para cada base de datos en las tablas de esquema de información de la base de datos.
Obtén más información sobre las prácticas recomendadas de SQL para Cloud Spanner.