数据库定时任务是数据库中实现定时任务的方法,用于实现定期的备份、统计信息采集、数据汇总、数据清理与优化等。
瀚高数据库的定时任务自研工具hg_job作为瀚高数据库的扩展,提供了内置任务调度功能。
应用场景
数据库的日常应用中常会需要一些定时执行的任务,瀚高的定时任务用于安排和管理数据库作业,可以使瀚高数据库定期执行特定的任务,任务内容可按需在线动态修改,适合于一些每天、每周、每月、每年等需要定时循环执行任务的场景。实际可应用于定时清理历史数据、定时调用存储过程和SQL语句、周期性运行工作等。
功能介绍
hg_job用于定时调用数据库存储过程和SQL语句,可设置时间定期自动执行。时间周期可以细分到年、季度、月、日、小时、分钟、秒。如下为功能架构图。
创建定时任务,需要预先加载hg_job库及相关参数启动定时任务守护进程,通过创建扩展,初始化hg_job的元数据表及功能函数,然后通过函数来创建或修改定时任务。创建定时任务后,可在固定时间内定期自动执行定时任务;查询定时任务的运行状态及检测有效性;也可按需在线动态修改定时任务的内容。
hg_job通过函数来管理定时任务,包括创建,修改等操作;通过2张元数据表hgjob.job和hgjob.jobrunning来记录任务内容,运行情况等信息。其中,hgjob.job记录定时任务属性;hgjob.jobrunning记录正在执行的定时任务的表,如下为hgjob.job和hgjob.jobrunning相关函数说明。
参数设置及扩展
1、配置环境变量
2、参数说明
3、创建扩展
highgo=#create extension hg_job;
highgo=#\dx;
定时任务测试
1、创建定时任务(时间间隔1分钟)
highgo=#create table test(id serial,info text,jobtime timestamp, constraint pk_test_id primary key(id));
highgo=#Select hgjob.job_create($$insert into test(info,jobtime)values('jobid:1',now());$$,$$now()+interval '1 minute'$$,now());
highgo=#select * from hgjob.job;
highgo=#select jobid,jobenabled,jobstartrun, jobinterval,jobnextrun,joblastrun,jobuser,jobcount from hgjob.job;
2、修改定时任务
1)修改时间间隔为2分钟
highgo=#select hgjob.job_interval(1,$$now()+'2 minute'$$);
highgo=#select jobid,jobenabled,jobstartrun, jobinterval,jobnextrun,joblastrun,jobuser,jobcount from hgjob.job;
highgo=#select * from test where jobtime>'2021-09-29 15:39';
2)修改任务定义
highgo=#select hgjob.job_what(1,$$update test set info='jobid:1:updated' where jobtime>'2021-09-29 15:39';$$);
highgo=#select * from test where jobtime>='2021-09-29 15:29';
highgo=#select jobid,jobenabled,jobwhat,jobstartrun, jobinterval,jobnextrun,joblastrun,jobuser,jobcount from hgjob.job;
3)修改任务
highgo=#select hgjob.job_change(1,$$insert into test(info,jobtime)values('jobid:1:job_change',now());$$,$$now()+interval '5 minutes'$$,now()+interval '5 minutes');
highgo=#select jobid,jobenabled,jobwhat,jobstartrun, jobinterval,jobnextrun,joblastrun,jobuser,jobcount from hgjob.job;
highgo=#select * from test order by jobtime desc;
4)修改下次执行时间(时间间隔由5分钟改为3分钟)
highgo=#select jobid,jobenabled,jobwhat,jobstartrun, jobinterval,jobnextrun,joblastrun,jobuser,jobcount from hgjob.job;
highgo=#select hgjob.job_nextrun(1, now()+ interval '3 minutes');
highgo=#select jobid,jobenabled,jobwhat,jobstartrun, jobinterval,jobnextrun,joblastrun,jobuser,jobcount from hgjob.job;
highgo=# select * from test order by jobtime desc;
3、启停删除定时任务
1)停止任务
highgo=#select * from test order by jobtime desc;
highgo=#select * from hgjob.job_stop(1);
highgo=#select jobid,jobenabled,jobwhat,jobstartrun, jobinterval,jobnextrun,joblastrun,jobuser,jobcount from hgjob.job;
highgo=#select * from test order by jobtime desc;
2)启动任务
highgo=# select * from hgjob.job;
highgo=# select hgjob.job_start(4, now()+interval '1 minute');
highgo=# select * from hgjob.job;
3)运行任务
highgo=#select * from hgjob.job_run(4);
highgo=#select * from hgjob.job;
highgo=#select * from test order by jobtime desc;
4)删除任务
highgo=#select * from hgjob.job;
highgo=#select * from test order by jobtime desc;
highgo=#select * from hgjob.job_delete(4);
highgo=#select * from hgjob.job;
如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!
加入交流群
请使用微信扫一扫!