使用 TimescaleDB 自动化框架调度的操作会在后台 worker 中定期运行。您可以使用 alter_job
函数更改这些作业的计划。要更改现有作业,请通过 job_id
引用它。job_id
运行给定的操作,其当前计划可以在 timescaledb_information.jobs
视图中找到,该视图列出了有关每个计划操作的信息,以及在 timescaledb_information.job_stats
中。job_stats
视图还提供有关每个作业上次运行时间以及其他有用的统计信息,以用于决定新的计划应该是什么。
名称 | 类型 | 描述 |
---|---|---|
job_id | INTEGER | 要修改的策略作业的 ID |
名称 | 类型 | 描述 |
---|---|---|
schedule_interval | INTERVAL | 作业运行的间隔。默认为 24 小时。 |
max_runtime | INTERVAL | 后台 worker 调度器允许作业运行的最长时间,超过此时间作业将被停止。 |
max_retries | INTEGER | 作业失败时重试的次数。 |
retry_period | INTERVAL | 调度器在作业失败时等待重试的时间量。 |
scheduled | BOOLEAN | 设置为 FALSE 以将此作业从作为后台作业运行中排除。 |
config | JSONB | 作业特定的配置,在作业运行时传递给函数。 |
next_start | TIMESTAMPTZ | 下次运行作业的时间。可以通过将此值设置为 infinity 来暂停作业,并使用 now() 值重新启动。 |
if_exists | BOOLEAN | 设置为 true ,如果作业不存在,则发出通知而不是错误。默认为 false。 |
check_config | REGPROC | 一个接受单个参数的函数,即 JSONB config 结构。如果配置无效,则该函数应引发错误,否则不返回任何内容。可用于在更新作业时验证配置。只有函数,而不是过程,允许作为 check_config 的值。 |
fixed_schedule | BOOLEAN | 要启用固定计划作业运行,请设置为 TRUE 。 |
initial_start | TIMESTAMPTZ | 设置 fixed_schedule 作业运行开始的时间。例如,19:10:25-07 。 |
timezone | TEXT | 解决时钟从夏令时到标准时间更改时开始时间发生 1 小时偏移的问题。例如,America/Sao_Paulo 。 |
当作业开始时,next_start
参数设置为 infinity
。这可以防止作业在运行时尝试再次启动。当作业完成时,无论作业是否成功,该参数都会自动更新为下一个计算的开始时间。
请注意,对于固定计划,更改 next_start
值仅对作业的下一次执行有效。在下一次执行时,它将自动返回到计划。
列 | 类型 | 描述 |
---|---|---|
job_id | INTEGER | 正在修改的作业的 ID |
schedule_interval | INTERVAL | 作业运行的间隔。默认为 24 小时 |
max_runtime | INTERVAL | 后台 worker 调度器允许作业运行的最长时间,超过此时间作业将被停止 |
max_retries | INTEGER | 作业失败时重试的次数 |
retry_period | INTERVAL | 调度器在作业失败时等待重试的时间量 |
scheduled | BOOLEAN | 如果作业由 TimescaleDB 调度器执行,则返回 true |
config | JSONB | 作业特定的配置,在作业运行时传递给函数 |
next_start | TIMESTAMPTZ | 下次运行作业的时间 |
check_config | TEXT | 用于验证更新的作业配置的函数 |
重新调度作业 ID 1000
,使其每两天运行一次
SELECT alter_job(1000, schedule_interval => INTERVAL '2 days');
禁用 conditions
超表上的压缩策略的调度
SELECT alter_job(job_id, scheduled => false)FROM timescaledb_information.jobsWHERE proc_name = 'policy_compression' AND hypertable_name = 'conditions'
重新调度连续聚合作业 ID 1000
,使其在 2020 年 3 月 15 日 9:00:00 下次运行
SELECT alter_job(1000, next_start => '2020-03-15 09:00:00.0+00');
当作业运行导致运行时失败时,下次作业开始时间的计算会同时考虑其 retry_period
和 schedule_interval
。next_start
时间使用以下公式计算
next_start = finish_time + consecutive_failures * retry_period ± jitter
其中添加了抖动(± 13%)以避免“惊群效应”。
注意
为了确保 next_start
时间不会无限期地推迟或产生过大的时间戳以致超出范围,它被限制为 5 * schedule_interval
。此外,超过 20 次连续失败将不被考虑,因此如果连续失败的次数更高,则乘以 20。
此外,对于具有固定计划的作业,系统会确保如果按指定方式计算的下次开始时间超过了下一次计划执行时间,则作业将在下一个计划时段再次执行,而不是在此之后执行。这确保了作业不会错过计划的执行。
最后,运行时失败(不会导致作业崩溃)和作业崩溃之间存在区别。在发生作业崩溃事件时,下次开始时间计算仍遵循上述公式,但始终至少在作业上次完成后的 5 分钟,以便操作员有足够的时间在另一次崩溃之前禁用它。
关键词
在此页面上发现问题?报告问题 或 在 GitHub 上编辑此页。