【发布时间】:2021-11-29 12:36:59
【问题描述】:
我通过转储和重新导入数据从 TimescaleDB 创建测试和静态分析副本。这些数据库是只读的,没有新数据进入。但是,由于它们是原始 TimescaleDB 数据库的副本,它们仍然在运行连续聚合作业。
这些作业,因为它们无事可做,似乎仍然会导致不必要的唤醒和后台 CPU 使用。
如何禁用 TimescaleDB 中的所有连续聚合作业?
【问题讨论】:
标签: timescaledb
我通过转储和重新导入数据从 TimescaleDB 创建测试和静态分析副本。这些数据库是只读的,没有新数据进入。但是,由于它们是原始 TimescaleDB 数据库的副本,它们仍然在运行连续聚合作业。
这些作业,因为它们无事可做,似乎仍然会导致不必要的唤醒和后台 CPU 使用。
如何禁用 TimescaleDB 中的所有连续聚合作业?
【问题讨论】:
标签: 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 工作
【讨论】:
这是绿草答案的更新。
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';
【讨论】: