【问题标题】:Very slow continuous aggregate on large hypertable大型超表上非常慢的连续聚合
【发布时间】:2022-06-11 03:12:43
【问题描述】:

我正在使用最新的 docker 版本的 Postgres 14.3 和 Timescale 2.7.0。

我正在运行一些基准测试以确保 timescaledb 是适合我的客户的解决方案。 我有一个包含 5000 万行的超表。这些是按(大约)时间顺序插入的(大约来自于 4 个并行进程插入行的事实,但它们几乎同步地逐小时移动)。

我还有一个名为daily_view的连续聚合时间(按天聚合),以及一些分类标准,主要是客户ID和类型。共有 100,000 个唯一客户 ID,根据 this post,这应该不是问题,因为 TimescaleDB 处理高基数(或声称如此)。

一个简单的查询,例如:

select * from daily_vew limit 1;
...
Time: 39429.423 ms (00:39.429)

耗时超过 39 秒!

执行select count(*) from daily_view,耗时 1 分 43 秒。

奇怪的是,当我删除连续聚合的物化视图,并在 5000 万行的同一个超表上重新创建它时。完全相同的查询:

select * from daily_vew limit 1;
...
Time: 15.829 ms

只用了 15 毫秒!

select count(*) 耗时 9 秒。

显然,如果不能预先创建连续聚合并在数据进入时进行更新,那么连续聚合是没有用的。

为什么连续聚合的性能如此糟糕? 为什么从头开始重新创建它的执行速度要快几个数量级?

【问题讨论】:

  • 快速提问:您是否将 TimescaleDB 扩展从之前的版本升级到 2.7.0?

标签: timescaledb continuous-aggregates


【解决方案1】:

连续聚合也是超表。你大概可以使用approximate_row_count,应该比原来的count函数快。

【讨论】:

    猜你喜欢
    • 2021-07-17
    • 1970-01-01
    • 2020-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多