Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

199
Views
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
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!