小编Old*_*ook的帖子

TimescaleDB 物化视图性能

我面临着 TimescaleDB 连续聚合的一些性能问题,并且我不完全理解为什么会发生这种情况。

我有一个时间序列数据表:

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);
Run Code Online (Sandbox Code Playgroud)

我想通过entity_id或/和user_id从我的表中获取每日平均值,而且我预计我的表将有很多行并且聚合查询可能会很慢,所以我决定创建一个连续聚合:

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;
Run Code Online (Sandbox Code Playgroud)

之后我生成了约 700 万行,时间间隔约为 3 个月。

当我执行这样的查询时,它工作得很好:

select bucket, avg(m.avg) 
from ack_alarm_number_daily m 
where m.entity_id = 2 
group by bucket
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试执行以下查询以获得所有实体的平均数时,它变得非常慢〜15秒:

select bucket, avg(m.avg) 
from …
Run Code Online (Sandbox Code Playgroud)

sql postgresql materialized-views timescaledb

5
推荐指数
0
解决办法
971
查看次数

标签 统计

materialized-views ×1

postgresql ×1

sql ×1

timescaledb ×1