【openGauss】openGauss创建和管理定时任务


创建和管理定时任务

  • 背景信息
  • 当用户在使用数据库过程中,如果白天执行一些耗时比较长的任务(例如:统计数据汇总之类或从其他数据库同步数据的任务),会对正常的业务有性能影响,所以用户经常选择在晚上执行,这增加了用户的工作量。因此数据库GaussDB(for openGauss)提供定时任务的功能,可以由用户创建定时任务,当任务时间点到达后可以自动触发任务的执行,从而可以减少用户户运维的工作量。
  • GaussDB(for openGauss)提供定时任务的创建、任务到期自动执行、任务删除、修改任务属性(包括:任务id、任务的关闭开启、任务的触发时间、触发时间间隔、任务内容等)。

一、定时任务管理

1.1、步骤1 创建测试表:

postgres=# CREATE TABLE test(id int, time date);

当结果显示为如下信息,则表示创建成功。

CREATE TABLE

1.2、步骤2 创建自定义存储过程:

postgres=# CREATE OR REPLACE PROCEDURE PRC_JOB_1()
AS
N_NUM integer :=1;
BEGIN
FOR I IN 1..1000 LOOP
INSERT INTO test VALUES(I,SYSDATE);
END LOOP;
END;
/

当结果显示为如下信息,则表示创建成功。

CREATE PROCEDURE

1.3、步骤3 创建任务:

● 新创建的任务(未指定job_id)表示每隔1分钟执行一次存储过程PRC_JOB_1。

postgres=# call dbe_task.submit('call public.prc_job_1(); ', sysdate, 'interval ''1 minute''', :a);


job
-----
1
(1 row)

● 指定job_id创建任务,其中job_id可用范围为1~32767。

postgres=# call dbe_task.id_submit(2,'call public.prc_job_1(); ', sysdate, 'interval ''1 minute''');


isubmit
---------
(1 row)

1.4、步骤4 通过视图查看当前用户已创建的任务信息。

select job,dbname,start_date,last_date,this_date,next_date,broken,status,interval,failures,what 
from my_jobs;

1.5、步骤5 停止任务。

call dbe_task.finish(15387,true);

1.6、步骤6 启动任务。

call dbe_task.finish(15387,false);

1.7、步骤7 修改任务属性:

● 修改JOB的Next_date参数信息。

--修改Job1的Next_date为1小时以后开始执行。
call dbe_task.next_time(1, sysdate+1.0/24);

● 修改JOB的Interval参数信息。

--修改Job1的Interval为每隔1小时执行一次。
call dbe_task.interval(1,'sysdate + 1.0/24');

● 修改JOB的What参数信息。

--修改Job1的What为执行SQL语句“insert into public.test values(333, sysdate+5);”。
call dbe_task.content(1,'insert into public.test values(333, sysdate+5);');

● 同时修改JOB的Next_date、Interval、What等多个参数信息。

call dbe_task.update(1, 'call public.prc_job_1();', sysdate, 'interval ''1 minute''');

1.8、步骤8 删除JOB。

call dbe_task.cancel(1);

1.9、步骤9 查看JOB执行情况。

当JOB自动执行时,如果JOB执行失败(即job_status状态值为’f’)时,用户可以通过查看当前JOB所属CN的数据目录的pg_log子目录下对应时间点的运行日志来查看JOB的失败信息。
日志信息如下所示,从失败信息(detail error msg)中可以查看失败的具体错误。

1.10、步骤10 JOB的权限控制:

● 当创建一个JOB时,该JOB会和创建该JOB的数据库和用户绑定(即:pg_job系统表新增的JOB记录中的dbname和log_user)。
● 如果当前用户是DBA用户、系统管理员、该JOB的创建用户(即:pg_job中的log_user),那么该用户有权限通过高级包接口remove、change、next_data、what、interval删除或修改JOB的参数信息。否则,会提示当前用户没有权限操作该JOB。
● 如果当前数据库是该JOB创建所属的数据库(即:为pg_job系统表中的dbname),那么连接到当前数据库上可以通过高级包接口cancel、update、next_data、content、interval删除或修改JOB的参数信息。
● 当删除JOB所属的数据库(即:为pg_job系统表中的dbname)时,系统会关联删除该数据库从属的JOB记录。
● 当删除JOB所属的用户(即:为pg_job系统表中的log_user)时,系统会关联删除该用户从属的JOB记录。

1.11、步骤11 JOB的并发控制管理。

用户可以通过配置参数job_queue_processes来调整并发同时执行的JOB数目。
● 当job_queue_processes设置为0值,表示不启用定时任务功能,任何job都不会被执行。
● 当job_queue_processes为大于0时,表示启用定时任务功能且系统能够并发处理的最大任务数。
由于并行运行的任务数太多会消耗更多的系统资源,因此需要设置系统并发处理的任务数,当前并发的任务数达到job_queue_processes时,且此时又有任务到期,那么这些任务本次得不到执行而延期到下一轮询周期。因此,建议用户需要根据每个任务的执行时长合理的设置任务的时间间隔(即submit接口中的interval参数),来避免由于任务执行时间太长而导致下个轮询周期无法正常执行。
注:对于不使用JOB的集群中,用户可以通过在集群安装初始化完成后,通过设置
job_queue_processes为0来关闭JOB功能,减少系统资源的消耗。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tzq@2018

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值