GaussDB如何创建和管理序列、定时任务

这篇具有很好参考价值的文章主要介绍了GaussDB如何创建和管理序列、定时任务。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

GaussDB是华为自主创新研发的分布式关系型数据库,为企业提供功能全面、稳定可靠、扩展性强、性能优越的企业级数据库服务。在实际业务场景使用中,为了提高工作效率,数据库GaussDB提供定时任务的功能,本节为大家讲解GaussDB如何创建和管理,序列及定时任务。


目录

一、创建和管理序列

1、操作步骤

方法一: 声明字段类型为序列整型来定义标识符字段。

二、定时任务管理

步骤 1 创建测试表:

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

步骤 3 创建任务:

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

步骤 5 停止任务。

步骤 6 启动任务。

步骤 7 修改任务属性:

步骤 8 删除JOB。

三、总结


一、创建和管理序列

序列Sequence是用来产生唯一整数的数据库对象。序列的值是按照一定规则自增的整数。因为自增所以不重复,因此说Sequence具有唯一标识性。这也是Sequence常被用作主键的原因。

通过序列使某字段成为唯一标识符的方法有两种:

1)一种是声明字段的类型为序列整理,由数据库在后台自动创建一个对应的Sequence。

2)另一种是使用CREATE SEQUENCE自定义一个新的Sequence,然后将nextval('sequence_name')函数读取的序列值,指定为某一字段的默认值,这样该字段就可以作为唯一标识符。

1、操作步骤

方法一: 声明字段类型为序列整型来定义标识符字段。例如:

postgres=# CREATE TABLE T1
(
    id    serial,
    name  text
);

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

CREATE TABLE

方法二:

创建序列,并通过nextval('sequence_name')函数指定为某一字段的默认值。这种方式更灵活,可以为序列定义cache,一次预申请多个序列值,减少与GTM的交互次数,来提高性能。

1、创建序列

postgres=# CREATE SEQUENCE seq1 cache 100;

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

CREATE SEQUENCE

 2、指定为某一字段的默认值,使该字段具有唯一标识属性。

postgres=# CREATE TABLE T2 
( 
    id   int not null default nextval('seq1'),
    name text
);

当结果显示为如下信息,则表示默认值指定成功。

CREATE TABLE

3、指定序列与列的归属关系。

将序列和一个表的指定字段进行关联。这样,在删除那个字段或其所在表的时候会自动删除已关联的序列。

postgres=# ALTER SEQUENCE seq1 OWNED BY T2.id;

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

ALTER SEQUENCE
注意事项

新序列值的产生是靠GTM维护的,默认情况下,每申请一个序列值都要向GTM发送一次申请,GTM在当前值的基础上加上步长值作为产生的新值返回给调用者。GTM作为全局唯一的节点,势必成为性能的瓶颈,所以对于需要大量频繁产生序列号的操作,如使用Bulkload工具进行数据导入场景,是非常不推荐产生默认序列值的。比如,在下面所示的场景中, INSERT FROM SELECT语句的性能会非常慢。

postgres=# CREATE SEQUENCE newSeq1;
postgres=# CREATE TABLE newT1
           ( 
             id   int not null default nextval('newSeq1'), 
             name text
            );
postgres=# INSERT INTO newT1(name) SELECT name from T1;

 可以提高性能的写法是(假设T1表导入newT1表中的数据为10000行):

postgres=# INSERT INTO newT1(id, name) SELECT id,name from T1;
postgres=# SELECT SETVAL('newSeq1',10000);

如果必须要在bulkload场景下产生默认序列值,则一定要为newSeq1定义足够大的cache,并且不要定义Maxvalue或者Minvalue。数据库会试图将nextval('sequence_name')的调用下推到Data Node,以提高性能。 目前GTM对并发的连接请求是有限制的,当Data Node很多时,将产生大量并发连接, 这时一定要控制bulkload的并发数目,避免耗尽GTM的连接资源。如果目标表为复制表(DISTRIBUTE BY REPLICATION)时下推将不能进行。当数据量较大时,这对数据库将是个灾难。除了性能问题之外,空间也可能会剧烈膨胀,在导入结束后,需要用vacuum full来恢复。推荐采用如上建议,不要在bulkload的场景中产生默认序列值。

另外,序列创建后,在每个节点上都维护了一张单行表,存储序列的定义及当前值,但此当前值并非GTM上的当前值,只是保存本节点与GTM交互后的状态。如果其他节点也向GTM申请了新值,或者调用了Setval修改了序列的状态,不会刷新本节点的单行表,但因每次申请序列值是向GTM申请,所以对序列正确性没有影响。

二、定时任务管理

当用户在使用数据库过程中,如果白天执行一些耗时比较长的任务(例如:统计数据汇总之类或从其他数据库同步数据的任务),会对正常的业务有性能影响,所以用户经常选择在晚上执行,这增加了用户的工作量。因此数据库GaussDB提供定时任务的功能,可以由用户创建定时任务,当任务时间点到达后可以自动触发任务的执行,从而可以减少用户户运维的工作量。

GaussDB提供定时任务的创建、任务到期自动执行、任务删除、修改任务属性(包括:任务id、任务的关闭开启、任务的触发时间、触发时间间隔、任务内容等)。

步骤 1 创建测试表:

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

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

CREATE TABLE

步骤 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

步骤 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)

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

postgres=# select job,dbname,start_date,last_date,this_date,next_date,broken,status,interval,failures,what from my_jobs;
job | dbname |     start_date      |         last_date          |         this_date          |      next_date      | broken | status |      interval       | failures |           what
-----+--------+---------------------+----------------------------+----------------------------+---------------------+--------+--------+---------------------+----------+---------------------------
1 | postgres   | 2017-07-18 11:38:03 | 2017-07-18 13:53:03.607838 | 2017-07-18 13:53:03.607838 | 2017-07-18 13:54:03 | n      | s      | interval '1 minute' |        0 | call public.prc_job_1();
(1 row)

步骤 5 停止任务。

postgres=# call dbe_task.finish(1,true);
broken
--------
 
(1 row)

步骤 6 启动任务。

postgres=# call dbe_task.finish(1,false);
broken
--------
 
(1 row)

步骤 7 修改任务属性:

  • 修改JOB的Next_date参数信息。

--修改Job1的Next_date为1小时以后开始执行。

postgres=# call dbe_task.next_time(1, sysdate+1.0/24);
next_date
-----------
 
(1 row)
  • 修改JOB的Interval参数信息。

--修改Job1的Interval为每隔1小时执行一次。

postgres=# call dbe_task.interval(1,'sysdate + 1.0/24');
interval
----------
 
(1 row)
  • 修改JOB的What参数信息。

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

postgres=# call dbe_task.content(1,'insert into public.test values(333, sysdate+5);');
what
------
 
(1 row)
  • 同时修改JOB的Next_date、Interval、What等多个参数信息。
postgres=# call dbe_task.update(1, 'call public.prc_job_1();', sysdate, 'interval ''1 minute''');
change
--------
 
(1 row)

步骤 8 删除JOB。

postgres=# call dbe_task.cancel(1);
remove
--------
 
(1 row)

三、总结


GaussDB数据库提供了便捷的定时任务功能,以满足不同的需求。在使用这个功能的同时,需要注意,定时任务的设置和使用需要谨慎,避免误删重要数据或影响业务正常运行。同时,也需要保证定时任务的可靠性和稳定性,避免出现任务漏执行或执行重复的情况。

在使用GaussDB数据库时,创建定时任务可以在很多场景中应用,同时可以帮助我们提高系统的运行效率,大大的增加了数据库的便利性。 文章来源地址https://www.toymoban.com/news/detail-818565.html

到了这里,关于GaussDB如何创建和管理序列、定时任务的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 创建定时任务——crontab的使用

    Linux crontab 是用来定期执行程序的命令。 当安装完成操作系统之后,默认便会启动此任务调度命令。 crond 命令每分钟会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。 **注意:**新创建的 cron 任务,不会马上执行,至少要过 2 分钟后才可以,当然你

    2024年02月11日
    浏览(82)
  • ansible批量创建crontab文件并添加到定时任务

    Ansible 来修改 crontab 文件并添加计划任务。用于将你提供的 cron 行添加到特定用户的 crontab 中: 确保将 your_target_host 替换为目标主机的名称或 IP 地址,将 your_username 替换为要添加 cron 任务的用户的用户名。 运行此 Playbook 将使用 Ansible 在指定的用户的 crontab 中添加新的 cron 任

    2024年02月11日
    浏览(29)
  • STM32 实现简单定时任务调度器,动态创建任务,两种思路实现流水灯

    代码实现和硬件没关系,所以并不限于STM32,Arduino 之类的其他地方也能用,只要有一个能获取时间的函数就行,或者说,只要有一个会随着时间自动增加的变量就行,时间单位无所谓,所以确实想的话,拿到电脑上也能用。后面会用跑马灯程序来说明定时任务的玩法,可以直

    2024年02月10日
    浏览(23)
  • Django实战项目-学习任务系统-定时任务管理

    接着上期代码框架,开发第4个功能,定时任务管理,再增加一个学习定时任务表,主要用来设置周期重复性的学习任务,定时周期,定时时间,任务标题和内容,预计完成天数,奖励积分和任务状态等信息。 现实中学习一门课程或一项技能知识,需要很长时间的学习积累才

    2024年02月08日
    浏览(30)
  • 定时任务管理平台青龙 QingLong

    青龙面板是支持 Python3、JavaScript、Shell、Typescript 多语言的定时任务管理平台,支持在线管理脚本和日志等。其功能丰富,能够满足大部分需求场景,值得一试。 主要功能 支持多种脚本语言(python3、javaScript、shell、typescript) 支持在线管理脚本、环境变量、配置文件 支持在线

    2024年02月07日
    浏览(26)
  • 利用Django和Celery管理定时任务

    同步发表于个人站点: http://panzhixiang.cn/article/2023/3/16/68.html 我们以前一直使用k8s的cronjob来管理定时任务的。把定时任务相关的代码单独封装成一个pod,然后以cronjob的方法来触发。 虽然这个方法操作很简单,没有什么第三方资源的依赖(比如Redis),但是也有一个明显的缺点

    2024年02月07日
    浏览(68)
  • Spring Boot集成Quartz实现定时任务的动态创建、启动、暂停、恢复、删除

    一、整个 Quartz 的代码流程基本基本如下: 首先需要创建我们的任务(Job),比如取消订单、定时发送短信邮件之类的,这是我们的任务主体,也是写业务逻辑的地方。 创建任务调度器(Scheduler),这是用来调度任务的,主要用于启动、停止、暂停、恢复等操作,也就是那几个api的

    2024年02月11日
    浏览(30)
  • 【Linux】在服务器上创建Crontab(定时任务),自动执行shell脚本

    业务场景:该文即为上次编写shell脚本的姊妹篇,在上文基础上,将可执行的脚本通过linux的定时任务自动执行,节省人力物力,话不多说,开始操作! 连上服务器后,在任意位置都可以执行: crontab -e 如果没有进入 编辑cron任务模式 根据提示查看我们的服务器上是否未安装crontab没有则

    2024年02月14日
    浏览(46)
  • Spring Boot 实现定时任务动态管理,太爽了!

    SpringBoot的定时任务的加强工具,实现对SpringBoot原生的定时任务进行动态管理,完全兼容原生@Scheduled注解,无需对原本的定时任务进行修改 具体的功能已经封装成SpringBoot-starter即插即用: 使用方法和源码: 码云:https://gitee.com/qiaodaimadewangcai/super-scheduled github:https://github.com/g

    2024年02月09日
    浏览(35)
  • java定时任务如何取消

    java定时任务如何取消,并比如,我之前想每周二晚上6点自动生成一条devops流水线,现在我想停掉 答案: 在Java中,可以使用 ScheduledExecutorService 类来创建定时任务。要取消定时任务,可以调用 ScheduledFuture 对象的 cancel() 方法。 以下是一个示例代码,演示如何创建一个每周二

    2024年02月11日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包