【问题标题】:Timescaledb: How to stop all continuous aggregation jobs in a databaseTimescaledb:如何停止数据库中的所有连续聚合作业
【发布时间】:2021-11-29 12:36:59
【问题描述】:

我通过转储和重新导入数据从 TimescaleDB 创建测试和静态分析副本。这些数据库是只读的,没有新数据进入。但是,由于它们是原始 TimescaleDB 数据库的副本,它们仍然在运行连续聚合作业。

这些作业,因为它们无事可做,似乎仍然会导致不必要的唤醒和后台 CPU 使用。

如何禁用 TimescaleDB 中的所有连续聚合作业?

【问题讨论】:

    标签: timescaledb


    【解决方案1】:

    作业通过自动化策略进行管理。您应该能够识别由此安排的作业

    SELECT * FROM timescaledb_information.jobs;

    您可以使用作业 ID 更改作业(示例使用 id 1000):

    SELECT alter_job(1000, scheduled => false);

    ...或更改所有连续聚合作业...

    SELECT alter_job(job_id, scheduled => false)
    FROM timescaledb_information.jobs
    WHERE proc_name = 'policy_refresh_continuous_aggregate' 
    AND hypertable_name = 'yourhypertablename'
    

    如果你想完全删除它们,那么你可以使用

    SELECT delete_job(1000);

    注意:这也会停止任何当前正在运行的作业。如果您想重新启动它们,那么更改可能比删除更好。

    您可以通过查找自动化策略从 TimescaleDB 文档中获得此信息,最好通读一遍,以便了解这可能产生的任何影响。

    透明度:我为 Timescale 工作

    【讨论】:

    • 嗨。我发布了更新,因为我无法 1:1 应用您的指示,但最终想通了。
    • 非常感谢您更新我的建议...我的技术有点生疏(我是社区经理)所以这非常有帮助!
    • 也添加了这个信息位:stackoverflow.com/a/70104810/315168
    【解决方案2】:

    这是绿草答案的更新。

    hypertable_name 选择工作对我来说似乎不起作用。出于某种原因,我的超表没有合理的名称并且看起来是生成的:

    # SELECT job_id, application_name, hypertable_name FROM timescaledb_information.jobs WHERE proc_name = 'policy_refresh_continuous_aggregate';
    
     job_id |              application_name              |       hypertable_name       
    --------+--------------------------------------------+-----------------------------
       1000 | Refresh Continuous Aggregate Policy [1000] | _materialized_hypertable_3
       1001 | Refresh Continuous Aggregate Policy [1001] | _materialized_hypertable_4
       1002 | Refresh Continuous Aggregate Policy [1002] | _materialized_hypertable_5
       1003 | Refresh Continuous Aggregate Policy [1003] | _materialized_hypertable_6
       1004 | Refresh Continuous Aggregate Policy [1004] | _materialized_hypertable_7
       1005 | Refresh Continuous Aggregate Policy [1005] | _materialized_hypertable_8
       1006 | Refresh Continuous Aggregate Policy [1006] | _materialized_hypertable_9
    

    我不知道如何将此_materialized_hypertable 映射到我传递给create_hypertable 的名称。

    SELECT FROM create_hypertable('candle_ohlcvx', ...)
    

    因此,无论它们属于哪个表,我都会停止所有作业:

    SELECT alter_job(job_id, scheduled => false) FROM timescaledb_information.jobs WHERE proc_name = 'policy_refresh_continuous_aggregate';
    

    我通过观察 docker logs 中的 TimescaleDb docker 容器不再每分钟输出来确认这些作业现在实际上是作业。

    (一些正在进行的作业可能仍会输出,但似乎会在一段时间后停止。)

    我也确认了这一点

    SELECT job_id, scheduled  FROM timescaledb_information.jobs WHERE proc_name = 'policy_refresh_continuous_aggregate';
    

    【讨论】:

      猜你喜欢
      • 2020-12-31
      • 2021-10-03
      • 2021-04-26
      • 2020-12-20
      • 1970-01-01
      • 2021-10-29
      • 2021-11-21
      • 2021-11-07
      • 1970-01-01
      相关资源
      最近更新 更多