Las tablas dinámicas ejecutan tareas de actualización en segundo plano según la hora de inicio y el intervalo configurados. Cuando la tabla base cambia, la tabla dinámica se actualiza para reflejar los datos más recientes. Este tema explica cómo monitorear, consultar y gestionar dichas tareas de actualización.
Métricas de monitoreo
A partir de Hologres V4.0.8, hay cuatro métricas disponibles para las tareas de actualización de tablas dinámicas. Configure los umbrales de alerta en CloudMonitor según sus necesidades. Para obtener más información, consulte CloudMonitor.
QPS de fallos de actualización a nivel de instancia
Nombre de la métrica: Dynamic Table Refresh Failed QPS Unidad: count/s (consultas por segundo)
Esta métrica muestra la tasa de fallos de las tareas de actualización en todas las tablas dinámicas de una instancia. En condiciones normales, el valor se mantiene cercano a cero.
Si este valor es distinto de cero de forma constante o va en aumento, vaya a HoloWeb para solucionar el problema.
Latencia de datos
Nombre de la métrica: Dynamic Table Lag Unidad: s (segundos)
Esta métrica indica el retraso de cada tabla dinámica respecto a su tabla base o a un momento específico. Refleja la actualidad de los datos.
Si la latencia aumenta continuamente:
|
Causa posible |
Siguiente paso |
|
Las tareas de actualización fallan repetidamente o la actualización automática está en pausa |
Vaya a la consola de HoloWeb y compruebe el estado de la tarea |
|
Ha cambiado un gran volumen de datos ascendentes y los recursos de la instancia son insuficientes para procesarlos |
Revise las métricas de monitoreo de Hologres, como la duración de la actualización, para investigar cuellos de botella de recursos |
Duración de la tarea de actualización
Nombre de la métrica: Dynamic Table Refresh Duration Unidad: ms (milisegundos)
Esta métrica muestra cuánto tiempo lleva ejecutándose la tarea de actualización actual de cada tabla dinámica. Úsela para detectar si el ciclo de actualización se está alargando.
Si el valor aumenta repentinamente o se mantiene muy por encima de su promedio histórico:
|
Possible cause |
Next step |
|
Cuello de botella de recursos |
Compruebe las métricas de CPU, memoria y almacenamiento de la instancia |
|
Aumento del volumen de datos ascendentes |
Consulte |
QPM de fallos de actualización por tabla
Nombre de la métrica: Dynamic Table Refresh Failed QPM Unidad: count/m (conteos por minuto)
Esta métrica muestra el número de tareas de actualización fallidas por minuto para cada tabla dinámica. En condiciones normales, el valor es cero.
Interpretación de esta métrica:
|
Observed pattern |
Meaning |
Action |
|
Picos ocasionales; las actualizaciones posteriores son exitosas |
Presión transitoria del sistema o actualización de la instancia |
No se requiere ninguna acción |
|
El valor se mantiene por encima de cero de forma persistente para una tabla específica |
Fallo persistente de actualización |
Consulte |
Consulta de tareas de actualización
Consulta de tareas de actualización en ejecución
Mediante hologres.hg_dynamic_table_refresh_activity
La tabla del sistema hologres.hg_dynamic_table_refresh_activity muestra las tareas de actualización en ejecución —tanto completas como incrementales— junto con su consumo de recursos. Para ver la descripción de los campos, consulte hologres.hg_dynamic_table_refresh_activity.
Esta tabla del sistema solo es compatible con Hologres V3.0, y V4.0.8 y versiones posteriores.
-- View currently running refresh tasks
SELECT
pid,
query_id,
refresh_mode,
'RUNNING' AS status,
refresh_start,
extract(epoch FROM duration) AS duration, -- milliseconds
serverless_queue_time_ms::bigint / 1000 AS serverless_queue_time_sec,
serverless_resource_used_time_ms::bigint / 1000 AS serverless_resource_used_time_sec,
serverless_allocated_cores
FROM hologres.hg_dynamic_table_refresh_activity
WHERE datname = '${database}'
AND table_write = quote_ident('${schema}') || '.' || quote_ident('${tableName}')
ORDER BY refresh_start DESC
LIMIT 2000;
Mediante hg_stat_activity
La vista del sistema hg_stat_activity también muestra las tareas de actualización en ejecución. La visualización varía según el modo de actualización:
Actualización completa: Aparece una sentencia
INSERT.Actualización incremental: Aparece una tarea de
Refresh.
Mediante hologres.hg_dynamic_table_refresh_log
Para las tablas dinámicas creadas con la sintaxis 3.1, hologres.hg_dynamic_table_refresh_log proporciona una vista por tabla de los registros de tareas de actualización. El siguiente ejemplo consulta todas las tareas de actualización que se están ejecutando actualmente para una tabla específica:
-- View running refresh tasks for a specific table (3.1 syntax)
SELECT query_job_id, status
FROM hologres.hg_dynamic_table_refresh_log('<dynamic_table_name>')
WHERE status = 'RUNNING';
hologres.hg_dynamic_table_refresh_log solo es compatible con tablas dinámicas creadas con la sintaxis 3.1. Para las tablas dinámicas creadas con la sintaxis 3.0, utilice hologres.hg_dynamic_table_refresh_activity o hg_stat_activity.
El valor query_job_id que devuelve esta vista también se utiliza al cancelar una tarea de actualización en ejecución. Para obtener más información, consulte Tablas dinámicas creadas con la nueva sintaxis 3.1.
Mediante métricas de monitoreo
Compruebe métricas como QPS, RPS (registros por segundo) y latencia para confirmar el estado de ejecución. Un Command Type con valor refresh indica una tarea de actualización de tabla dinámica. Para obtener más información, consulte Monitoring metrics.
Si la tarea de actualización se ejecuta en recursos de Serverless Computing, también puede comprobar su estado en las métricas de Serverless Computing.
Consulta de tareas de actualización históricas
Mediante hologres.hg_dynamic_table_refresh_history
La tabla del sistema hologres.hg_dynamic_table_refresh_history registra el historial de todas las tareas de actualización —completas, incrementales y manuales— del último mes. Para ver la descripción de los campos, consulte hologres.hg_dynamic_table_refresh_history.
Los registros se conservan durante un mes. No es posible consultar datos con antigüedad superior a un mes.
Los propietarios de tablas solo pueden ver su propio historial de actualizaciones. Los usuarios con el rol de superusuario pueden ver todos los registros de actualización.
Ejemplo 1: Consulta de tareas de actualización incremental del último día
SELECT
query_id,
refresh_mode,
status,
refresh_start,
duration,
refresh_latency / 1000 AS refresh_latency_second,
serverless_allocated_cores,
queue_time_ms::bigint / 1000 AS queue_time_second,
serverless_resource_used_time_ms::bigint / 1000 AS serverless_resource_used_time_second
FROM hologres.hg_dynamic_table_refresh_history
WHERE refresh_start >= CURRENT_DATE - INTERVAL '1 day'
AND dynamic_table_name = '<dynamic_table>'
AND refresh_mode = 'incremental'
ORDER BY refresh_start DESC
LIMIT 100;
Ejemplo 2: Consulta de todas las tareas de actualización de la instancia del último día
SELECT
query_id,
refresh_mode,
status,
refresh_start,
duration,
refresh_latency / 1000 AS refresh_latency_second,
serverless_allocated_cores,
queue_time_ms::bigint / 1000 AS queue_time_second,
serverless_resource_used_time_ms::bigint / 1000 AS serverless_resource_used_time_second
FROM hologres.hg_dynamic_table_refresh_history
WHERE refresh_start >= CURRENT_DATE - INTERVAL '1 day';
Ejemplo 3: Consulta de tareas de actualización de una tabla específica del último día
SELECT
query_id,
refresh_mode,
status,
refresh_start,
duration,
refresh_latency / 1000 AS refresh_latency_second,
serverless_allocated_cores,
queue_time_ms::bigint / 1000 AS queue_time_second,
serverless_resource_used_time_ms::bigint / 1000 AS serverless_resource_used_time_second
FROM hologres.hg_dynamic_table_refresh_history
WHERE schema_name = '<schema_name>'
AND dynamic_table_name = '<dynamic_table>'
AND refresh_start >= CURRENT_DATE - INTERVAL '1 day';
Para las tablas dinámicas de actualización completa creadas con la sintaxis heredada 3.0,hologres.hg_dynamic_table_refresh_historypodría no reflejar con precisión el estado de éxito o fallo; una actualización fallida podría aparecer comoSuccess. Para obtener el historial real de actualizaciones de estas tablas: 1. Obtenga el valor decron_job_namedesdehologres.hg_dynamic_table_properties. 2. Consulte los registros de ejecución del trabajo programado (cron) mediante ese nombre.
-- Step 1: Get the cron_job_name
SELECT property_value AS cron_job_name
FROM hologres.hg_dynamic_table_properties
WHERE dynamic_table_name = '<dt_name>'
AND property_key = 'cron_job_name';
-- Step 2: Query cron job execution records
SELECT *
FROM hologres.hg_user_cron_tasks
WHERE jobname = '<cron_job_name>'
ORDER BY start_time DESC;
Mediante registros de consultas lentas
Las tareas de actualización también aparecen en los registros de consultas lentas con Command Type establecido en refresh. Para obtener más información, consulte Get and analyze slow query logs.
Consulta del plan de ejecución de una tarea de actualización
Utilice EXPLAIN and EXPLAIN ANALYZE en una sentencia de actualización para ver su plan de ejecución e identificar cuellos de botella de rendimiento, del mismo modo que lo haría con una consulta normal.
EXPLAIN REFRESH DYNAMIC TABLE hmtest.dt_order_lineitem;
Salida de ejemplo:
QUERY PLAN
-------------------------------------------------------------------------------------------------------------
Gather (cost=0.00..10.13 rows=1 width=16)
-> Insert (cost=0.00..10.13 rows=1 width=16)
-> Redistribution (cost=0.00..10.11 rows=1 width=16)
-> Final HashAggregate (cost=0.00..10.11 rows=1 width=16)
Group Key: orders.o_orderpriority
-> Redistribution (cost=0.00..10.11 rows=10 width=16)
Hash Key: orders.o_orderpriority
-> Partial HashAggregate (cost=0.00..10.11 rows=10 width=16)
Group Key: orders.o_orderpriority
-> Hash Left Semi Join (cost=0.00..10.11 rows=1000 width=8)
Hash Cond: (orders.o_orderkey = lineitem.l_orderkey)
-> Redistribution (cost=0.00..5.03 rows=1000 width=16)
Hash Key: orders.o_orderkey
-> Local Gather (cost=0.00..5.01 rows=1000 width=16)
-> Seq Scan on orders (cost=0.00..5.01 rows=1000 width=16)
Filter: ((o_orderdate >= '1996-07-01 00:00:00+08'::timestamp with time zone) AND (o_orderdate < '1996-10-01 00:00:00+08'::timestamp with time zone))
-> Hash (cost=5.03..5.03 rows=1000 width=8)
-> Redistribution (cost=0.00..5.03 rows=1000 width=8)
Hash Key: lineitem.l_orderkey
-> Local Gather (cost=0.00..5.03 rows=1000 width=8)
-> Seq Scan on lineitem (cost=0.00..5.03 rows=1000 width=8)
Filter: (l_commitdate < l_receiptdate)
Optimizer: HQO version 2.1.0
(23 rows)
Configuración del tiempo de espera de actualización
Establezca un tiempo de espera para evitar que las tareas de actualización de larga duración bloqueen recursos. Hologres admite tres niveles de configuración de tiempo de espera.
Tiempo de espera a nivel de tabla
Configure un tiempo de espera a nivel de tabla al crear la tabla dinámica. Este se aplica a todas las tareas de actualización de dicha tabla. El siguiente ejemplo utiliza el conjunto de datos público tpch_10g. Antes de ejecutar el código, importe el conjunto de datos. Para obtener más información, consulte Create a public dataset import task.
-- Set a 30-minute timeout for all refresh tasks on this table
CREATE DYNAMIC TABLE tpch_q1_batch
WITH (
refresh_mode = 'full',
auto_refresh_enable = 'true',
full_auto_refresh_interval = '1 hours',
refresh_guc_statement_timeout = '30 min'
)
AS
SELECT
l_returnflag,
l_linestatus,
SUM(l_quantity) AS sum_qty,
SUM(l_extendedprice) AS sum_base_price,
SUM(l_extendedprice * (1 - l_discount)) AS sum_disc_price,
SUM(l_extendedprice * (1 - l_discount) * (1 + l_tax)) AS sum_charge,
AVG(l_quantity) AS avg_qty,
AVG(l_extendedprice) AS avg_price,
AVG(l_discount) AS avg_disc,
COUNT(*) AS count_order
FROM hologres_dataset_tpch_10.lineitem
WHERE l_shipdate <= DATE '1998-12-01' - INTERVAL '120' DAY
GROUP BY l_returnflag, l_linestatus;
Tiempo de espera a nivel de sesión
Para una actualización manual, configure el tiempo de espera mediante un parámetro GUC (Grand Unified Configuration) a nivel de sesión:
SET statement_timeout = <time>;
REFRESH DYNAMIC TABLE <dynamic_schema_name.dynamic_table_name>;
Para obtener más información sobre la configuración de tiempos de espera, consulte Modify active query timeout.
Tiempo de espera por actualización
Anule el tiempo de espera para una única actualización manual mediante refresh ... WITH (refresh_guc_statement_timeout = '...'):
REFRESH DYNAMIC TABLE <schema_name.table_name> WITH (
refresh_guc_statement_timeout = '30 min'
);
Activación de una actualización manual
Ejecute la siguiente sentencia para activar una actualización inmediata:
REFRESH DYNAMIC TABLE <schema_name.table_name>;
Si la actualización automática está habilitada, la actualización manual se ejecuta en paralelo con la tarea de actualización automática programada. Ambas se completan con normalidad. El sistema conserva solo una copia de los datos más recientes.
Cancelación de una tarea de actualización
Tablas dinámicas creadas con la nueva sintaxis 3.1
Cancelación de una tarea de actualización en ejecución
Consulte el query_job_id de la tarea en ejecución desde hologres.hg_dynamic_table_refresh_log y, a continuación, cancélela mediante hologres.hg_internal_cancel_query_job.
-- Step 1: Get the query_job_id
SELECT query_job_id
FROM hologres.hg_dynamic_table_refresh_log('<dt_name>')
WHERE status = 'RUNNING';
-- Step 2: Cancel the task
SELECT hologres.hg_internal_cancel_query_job('<query_job_id>');
Solo un superusuario puede cancelar una tarea de actualización mediante hologres.hg_internal_cancel_query_job .
Pausa de la actualización automática de una tabla
Para detener todas las tareas de actualización subsiguientes a nivel de tabla, deshabilite la actualización automática:
ALTER DYNAMIC TABLE [IF EXISTS] [<schema>.]<table_name> SET (auto_refresh_enable = false);
Esta operación detiene todas las tareas de actualización futuras de la tabla. Los datos de la tabla dinámica no se actualizarán hasta que se vuelva a habilitar la actualización automática. Para volver a habilitarla, consulte ALTER DYNAMIC TABLE.
Tablas dinámicas creadas con la sintaxis 3.0
Cancelación de una tarea de actualización en ejecución
Si una tarea de actualización tarda demasiado o parece estar atascada, cancélela mediante pg_cancel_backend.
-- Cancel the refresh task by its process ID (pid)
SELECT pg_cancel_backend(<pid>);
Obtenga el pid desde hologres.hg_dynamic_table_refresh_activity o hg_stat_activity. Para obtener más información, consulte View refresh tasks
Para cancelar tareas de actualización en lotes, utilice el mismo método que para las consultas normales. Para obtener más información, consulte Terminate a query .
Pausa de la actualización automática de una tabla
Para detener todas las tareas de actualización subsiguientes a nivel de tabla:
ALTER DYNAMIC TABLE [IF EXISTS] [<schema>.]<table_name> SET (auto_refresh_enable = false);
Esta operación detiene todas las tareas de actualización futuras de la tabla. Los datos de la tabla dinámica no se actualizarán hasta que se vuelva a habilitar la actualización automática. Para volver a habilitarla, consulte ALTER DYNAMIC TABLE.