定时任务
SCHEDULE,即定时任务,指按照预定的时间或事件自动执行特定的数据库任务。
KaiwuDB 支持授权用户根据需要执行以下定时任务相关操作:
- 通过
SHOW SCHEDULE
语句查看系统默认创建的定时任务的调度周期、执行时间、执行状态等信息; - 通过
SHOW JOBS FOR SCHEDULE
命令查看任务在历史和当前周期执行的开始时间、结束时间、执行进度、执行结果、错误信息等。更多信息,参见查看任务。 - 通过
ALTER SCHEDULE
语句修改调度周期、任务执行错误处理策略、或者前一次任务调度尚未执行完成的处理策略。 - 通过
PAUSE SCHEDULE
语句暂停后台计划任务的调度以及通过RESUME SCHEDULE
语句恢复暂停的定时任务。
默认情况下,KaiwuDB 每 60
秒扫描一次定时任务列表,随机找出应该执行的 10
个定时任务,并执行相关联的任务。KaiwuDB 支持用户通过 SET CLUSTER SETTING <parameter> = <value>
语句修改以下实时参数关闭实时任务功能,修改扫描频率和每次执行的任务数:
jobs.scheduler.enabled
:开启或关闭定时任务功能。默认值为TRUE
,表示开启功能。jobs.scheduler.pace
:扫描任务表system.scheduled_jobs
的频率。默认值为60
秒,设置值不能小于60s
。如果设置值小于60s
,将采用默认值60s
。jobs.scheduler.max_jobs_per_iteration
:每次扫描执行的最大任务数。默认值为10
。取值为0
,表示无任务数限制。
查看定时任务
SHOW SCHEDULE
语句用于查看系统默认创建的以下定时任务:
- 表生命周期管理,任务名称为
scheduled_table_retention
。 - 表压缩,任务名称为
scheduled_table_compress
。
所需权限
用户为 Admin 用户或者 Admin 角色成员。
语法格式
参数说明
参数 | 说明 |
---|---|
schedule_name | 待查看定时任务的名称。 |
返回字段说明
参数 | 描述 |
---|---|
id | 定时任务 ID |
name | 定时任务名称 |
schedule_status | 任务状态 |
next_run | 下次执行时间 |
state | 状态,显示空值或错误及建议处理措施。 |
recurrence | 调度周期 |
jobsrunning | 正在运行的任务 |
owner | 创建用户 |
created | 创建时间 |
command | 执行的 SQL 命令 |
语法示例
查看系统创建的定时任务信息。
show schedules; id | name | schedule_status | next_run | state | recurrence | jobsrunning | owner | created | command ---------------------+----------------------------+-----------------+---------------------------+-------+------------+-------------+-------+----------------------------------+----------------------------------------------------------------------------------------------------------- 958737479282262017 | scheduled_table_statistics | ACTIVE | 2024-04-09 10:00:00+00:00 | | @hourly | 0 | root | 2024-04-09 09:10:58.995182+00:00 | {"backup_statement": "BACKUP TABLE defaultdb.tb1 INTO 'nodelocal://1/defaultdb/tb11.csv' WITH detached"} (1 row)
查看指定的定时任务信息。
show schedule scheduled_table_statistics; id | name | schedule_status | next_run | state | recurrence | jobsrunning | owner | created | command ---------------------+----------------------------+-----------------+---------------------------+-------+------------+-------------+-------+----------------------------------+----------------------------------------------------------------------------------------------------------- 958737479282262017 | scheduled_table_statistics | ACTIVE | 2024-04-09 10:00:00+00:00 | | @hourly | 0 | root | 2024-04-09 09:10:58.995182+00:00 | {"backup_statement": "BACKUP TABLE defaultdb.tb1 INTO 'nodelocal://1/defaultdb/tb11.csv' WITH detached"} (1 row)
修改定时任务
ALTER SCHEDULE
语句用于修改数据库中已存在的定时任务。修改将在下一个调度时间生效,不影响正在执行的任务和定时任务的状态。
所需权限
用户为 Admin 用户或者 Admin 角色成员。
语法格式
参数说明
参数 | 说明 |
---|---|
schedule_name | 待修改的定时任务的名称。 |
RECURRING crontab_expr | 指定定时任务执行的时间点和周期,支持以下字段表达方式: - 7 字段表达式,即全字段表达式,字段之间使用空格分隔( <seconds> <minutes> <hours> <day-of-month> <month> <day-of-week> <year> )。- 6 字段表达式,字段之间使用空格分隔( <minutes> <hours> <day-of-month> <month> <day-of-week> <year> )。其中 seconds 预设为 0 ,表示 0 秒执行。- 5 字段表达式,字段之间使用空格分隔( <minutes> <hours> <day-of-month> <month> <day-of-week> ),其中,year 字段预设为 * ,表示所有年份都适用。- 预定义表达式,具体包括 @annually (每年 1 月 1 日 0 点 0 分 0 秒运行一次)、@yearly (每年 1 月 1 日 0 点 0 分 0 秒运行一次,同@annually )、@monthly (每月 1 日 0 点 0 分 0 秒运行一次)、@weekly (每周日 0 点 0 分 0 秒运行一次)、@daily (每天 0 点 0 分 0 秒运行一次)、@hourly (每小时 0 分 0 秒开始时运行)有关字段表达式的详细说明,参见字段表达式说明。 |
schedule_option | 定时任务相关的执行选项,支持以下可选设置: - first_run :指定未来时间的执行计划。如未指定,默认根据下一个 RECURRING 时间执行计划,支持 TIMESTAMPTZ 类型和 NOW 。- on_execution_failure :指定在执行过程中发生错误时应执行的操作。默认值是 reschedule ,表示根据 RECURRING 表达式重新安排下一次时间来重试执行。也支持设置为 pause ,表示暂停定时任务。暂停后,用户需要手动恢复任务。- on_previous_running :如果按计划启动的上一次任务仍在运行应执行的操作。默认值为 skip ,表示跳过新的执行,然后根据 RECURRING 表达式安排下一次运行。 |
字段表达式说明
字段名称 | 取值范围 | 特殊字符 | 特殊字符说明 |
---|---|---|---|
seconds | [0, 59] |
|
|
minutes | [0, 59] |
| |
hour | [0, 23] |
| |
day of month | [1, 31] |
| |
month | [1,12] 或者 JAN-DEC |
| |
day of week | [0,7] 或者 SUN-SAT 。0 和 7 都表示星期日,兼容 linux 的 crontab 。 |
| |
year | [1970, 2099] |
|
语法示例
以下示例将定时任务修改为每小时执行一次。
ALTER SCHEDULE scheduled_table_statistics RECURRING '@hourly';
暂停定时任务
系统在进行导入大量数据等高负载工作时,为了避免进一步加重系统负载或干扰关键任务,可以暂停预定的定时任务。暂停命令会在下一个调度时间生效,不影响当前正在执行的任务或定时任务的状态。
PAUSE SCHEDULE
语句用于暂停已创建的定时任务。
所需权限
用户为 Admin 用户或者 Admin 角色成员。
语法格式
参数说明
参数 | 说明 |
---|---|
schedule_name | 待暂停的定时任务名称,任务状态必须是 running 。 |
语法示例
以下示例暂停指定的定时任务。
PAUSE SCHEDULE scheduled_table_statistics;
恢复定时任务
RESUME SCHEDULE
语句用于恢复已暂停的定时任务。
所需权限
用户为 Admin 用户或者 Admin 角色成员。
语法格式
参数说明
参数 | 说明 |
---|---|
schedule_name | 待恢复的定时任务的名称,任务状态必须是 paused 。 |
语法示例
以下示例恢复指定的定时任务。
RESUME SCHEDULE scheduled_table_statistics;