暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

「瀚高数据库技术栈」瀚高数据库的定时任务

瀚高数据库 2021-11-25
1359


定时任务

瀚高数据库


定时任务

      

数据库定时任务是数据库中实现定时任务的方法,用于实现定期的备份、统计信息采集、数据汇总、数据清理与优化等。
瀚高数据库的定时任务自研工具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;


总结

瀚高数据库的定时任务hg_job集成在瀚高数据库系统中,一个定时任务同一时间只能有一个作业队列进程在运行。


通过使用定时任务可在固定时间内定期自动执行任务,减少数据库操作人员的重复劳动,提高工作效率。

文章转载自瀚高数据库,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论