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';
我正在通过转储和重新导入数据从 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
.
(一些正在进行的工作可能仍然输出,但似乎过一会儿就停止了。)
我也用
确认了这一点SELECT job_id, scheduled FROM timescaledb_information.jobs WHERE proc_name = 'policy_refresh_continuous_aggregate';