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数据库时,创建定时任务可以在很多场景中应用,同时可以帮助我们提高系统的运行效率,大大的增加了数据库的便利性。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/641434.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

React16源码: React中的resetChildExpirationTime的源码实现

resetChildExpirationTime 1 )概述 在 completeUnitOfWork 当中,有一步比较重要的一个操作,就是重置 childExpirationTimechildExpirationTime 是非常重要的一个时间节点,它用来记录某一个节点的子树当中,目前优先级最…

git 本地分支提交远程分支

在日常开发中,我们常常遇到这样的场景,本地有个分支名字:developtemp,远程有个分支origin/develop,两个分支没有关联关系,而且分支名字不同,此时想提交代码。 //先拉取远程分支代码 git pull o…

html中根元素以及根元素字体的含义

在 HTML 中&#xff0c;根元素是指 <html> 标签&#xff0c;可以使用 CSS 来设置根元素的字体大小。根元素的字体大小会影响整个页面的文本内容&#xff0c;默认情况下&#xff0c;根元素的字体大小是浏览器默认的大小。 要设置根元素的字体大小&#xff0c;你可以使用 …

如何进行技术选型

关键步骤 进行技术选型时通常会考虑的几个关键步骤&#xff1a; 1. 理解项目需求 业务需求&#xff1a;明确业务目标和需求是技术选型的起点。了解项目的目标、预期成果以及业务方面的限制。技术需求&#xff1a;确定技术上的必要条件&#xff0c;比如性能、可扩展性、安全性…

大数据基础设施搭建 - Redis

一、上传压缩包 二、解压压缩包 [mallmall software]$ tar -zxvf redis-6.2.1.tar.gz -C /opt/module/三、查看gcc是否安装 redis是用c写的&#xff0c;因此安装redis需要c语言的编译环境&#xff0c;即需要安装gcc [mallmall module]$ gcc -v四、编译 [mallmall ~]$ cd /op…

C++提高编程——STL:string容器、vector容器

本专栏记录C学习过程包括C基础以及数据结构和算法&#xff0c;其中第一部分计划时间一个月&#xff0c;主要跟着黑马视频教程&#xff0c;学习路线如下&#xff0c;不定时更新&#xff0c;欢迎关注。 当前章节处于&#xff1a; ---------第1阶段-C基础入门 ---------第2阶段实战…

数据结构:堆与堆排序

目录 堆的定义&#xff1a; 堆的实现&#xff1a; 堆的元素插入&#xff1a; 堆元素删除&#xff1a; 堆初始化与销毁&#xff1a; 堆排序&#xff1a; 堆的定义&#xff1a; 堆是一种完全二叉树&#xff0c;完全二叉树定义如下&#xff1a; 一棵深度为k的有n个结点的二…

ffmpeg使用及java操作

1.文档 官网: FFmpeg 官方使用文档: ffmpeg Documentation 中文简介: https://www.cnblogs.com/leisure_chn/p/10297002.html 函数及时间: ffmpeg日记1011-过滤器-语法高阶&#xff0c;逻辑&#xff0c;函数使用_ffmpeg gte(t,2)-CSDN博客 java集成ffmpeg: SpringBoot集成f…

科技云报道:金融大模型落地,还需跨越几重山?

科技云报道原创。 时至今日&#xff0c;大模型的狂欢盛宴仍在持续&#xff0c;而金融行业得益于数据密集且有强劲的数字化基础&#xff0c;从一众场景中脱颖而出。 越来越多的公司开始布局金融行业大模型&#xff0c;无论是乐信、奇富科技、度小满、蚂蚁这样的金融科技公司&a…

深度学习如何弄懂那些难懂的数学公式?是否需要学习数学?

经过1~2年的学习&#xff0c;我觉得还是需要数学有一定认识&#xff0c;重新捡起高等数学、概率与数理、线代等这几本&#xff0c;起码基本微分方程、求导、对数、最小损失等等还是会用到。 下面给出几个链接&#xff0c;可以用于平时充电学习。 知乎上的&#xff1a; 机器学…

计算机毕业设计 基于SpringBoot的律师事务所案件管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

git merge和git rebase区别

具体详情 具体常见如下&#xff0c;假设有master和change分支&#xff0c;从同一个节点分裂&#xff0c;随后各自进行了两次提交commit以及修改。随后即为change想合并到master分支中&#xff0c;但是直接git commit和git push是不成功的&#xff0c;因为分支冲突了【master以…

上位机图像处理和嵌入式模块部署(流程)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面我们说过&#xff0c;传统图像处理的方法&#xff0c;一般就是pccamera的处理方式。camera本身只是提供基本的raw data数据&#xff0c;所有的…

基于ADAS的车道线检测算法matlab仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 图像预处理 4.2 车道线特征提取 4.3 车道线跟踪 5.完整工程文件 1.课题概述 基于ADAS的车道线检测算法,通过hough变换和边缘检测方法提取视频样板中的车道线&#xff0c;然后根据车道线的弯曲情况…

《Python数据分析技术栈》第06章使用 Pandas 准备数据 13 分组和汇总 Grouping and aggregation

13 分组和汇总 Grouping and aggregation 《Python数据分析技术栈》第06章使用 Pandas 准备数据 13 分组和汇总 Grouping and aggregation Aggregation is the process of summarizing a group of values into a single value. 聚合是将一组值汇总为一个值的过程。 Hadley …

【 CSS 】精灵图、字体图标、CSS 三角、常用布局技巧

1. 精灵图&#xff08;重点&#xff09; 1.1 为何需要精灵图 一个网页中往往会应用很多小的背景图像作为修饰&#xff0c;当网页中的图像过多时&#xff0c;服务器就会频繁地接收和发送请求图片&#xff0c;造成服务器请求压力过大&#xff0c;这将大大降低页面的加载速度。 …

Linux/Mac 命令行工具 tree 开发项目结构可以不用截图了 更方便 更清晰 更全

tree 是一个命令行工具&#xff0c;用于以树形结构显示文件系统目录的内容。它可用于列出指定目录下的所有文件和子目录&#xff0c;以及它们的层次关系。tree 命令在许多操作系统中都可用&#xff0c;包括Unix、Linux和macOS。 效果如下&#xff1a; 一、安装 linux # De…

「Git」config 配置

Git 会自动跟踪是 谁 修改了项目&#xff0c;哪怕只是其中的一个字符&#xff0c;所以&#xff0c;Git需要配置用户的用户名以及邮箱地址。因此&#xff0c;在开始 Git 管理之前&#xff0c;我们可以先把 Git的用户设置配置一下【非必需&#xff0c;如果没有配置&#xff0c;Gi…

Prometheus+Grafana监控Mysql数据库

Promethues Prometheus https://prometheus.io Prometheus是一个开源的服务监控系统&#xff0c;它负责采集和存储应用的监控指标数据&#xff0c;并以可视化的方式进行展示&#xff0c;以便于用户实时掌握系统的运行情况&#xff0c;并对异常进行检测。因此&#xff0c;如何…

Ansible剧本playbooks

playbooks概述 Ansible剧本&#xff08;playbook&#xff09;是用于配置、部署和管理被控节点的一种描述文件。通过编写详细的剧本描述和执行其中的任务&#xff08;tasks&#xff09;&#xff0c;可以使远程主机达到预期的状态。剧本由一个或多个"play"组成的列表构…