Timescaledb:如何停止数据库中的所有连续聚合作业

Timescaledb: How to stop all continuous aggregation jobs in a database

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

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

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

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

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 工作

这是对 greenweed 回答的更新。

通过 hypertable_name 选择工作对我来说似乎不起作用。出于某种原因,我的 hypertables 没有合理的名称和生成的外观:

# 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', ...)

因此,我只是停止所有作业,不管它们属于什么table:

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';