Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

193
Vistas
Rendimiento de la vista materializada de TimescaleDB

Estoy enfrentando algunos problemas de rendimiento con los agregados continuos de TimescaleDB y no entiendo completamente por qué sucede.

Tengo una tabla para mis datos de series temporales:

 CREATE TABLE IF NOT EXISTS ack_alarm_number ( time TIMESTAMP NOT NULL, entity_id INT, user_id VARCHAR(255), value INT ); SELECT create_hypertable('ack_alarm_number', 'time', if_not_exists => TRUE);

Quiero obtener un valor promedio diario de mi tabla por entidad_id o/y usuario_id, también espero que mi tabla tenga muchas filas y que las consultas agregadas sean lentas, así que decidí crear un agregado continuo:

 CREATE MATERIALIZED VIEW IF NOT EXISTS ack_alarm_number_daily WITH (timescaledb.continuous) AS SELECT time_bucket(INTERVAL '1 day', time) AS bucket, entity_id, user_id, AVG(value) FROM ack_alarm_number GROUP BY entity_id, user_id, bucket;

Después de eso, generé ~ 7 millones de filas, el intervalo de tiempo es de alrededor de ~ 3 meses.

Funciona bien, cuando ejecuto consultas como esta:

 select bucket, avg(m.avg) from ack_alarm_number_daily m where m.entity_id = 2 group by bucket

Pero cuando trato de ejecutar la siguiente consulta para obtener el número promedio de todas las entidades, se vuelve muy lento ~ 15 segundos:

 select bucket, avg(m.avg) from ack_alarm_number_daily m group by bucket

Cuando ejecuto el mismo tipo de consulta desde la tabla ack_alarm_number , no es tan lento ~ 400 ms:

 select time_bucket('1 day', m.time) as bucket, avg(m.value) from ack_alarm_number m group by bucket

También hay una diferencia cuando trato de unirme a otra mesa.

Cuando ejecuto la siguiente consulta, son ~ 17 s:

 select bucket, avg(m.avg) from ack_alarm_number_daily m join entities e on m.entity_id = e.id where e.category='category-2' group by bucket

El mismo tipo de consulta de ack_alarm_number es ~400ms:

 select time_bucket('1 day', m.time) as bucket, avg(m.value) from ack_alarm_number m join entities e on m.entity_id = e.id where e.category='category-2' group by bucket

Hay un detalle que he encontrado:
No hay una diferencia significativa en el recuento de filas entre la tabla y la vista materializada, porque tengo 1000000 ID de entidad diferentes y 10 ID de usuario y se distribuyeron uniformemente a lo largo de la línea de tiempo durante la generación de datos, por lo que 7 millones de filas no son suficientes para obtener una ventaja real del agregado continuo. en mi caso, pero sigue siendo interesante, incluso si tienen un número de filas similar, ¿por qué hay una diferencia en el rendimiento de la consulta?

over 4 years ago · Santiago Trujillo
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda