邯郸网站改版费用,网站客户端开发,做一公司网站,百度网页游戏中心前言
GaussDB是华为自主创新研发的分布式关系型数据库#xff0c;为企业提供功能全面、稳定可靠、扩展性强、性能优越的企业级数据库服务。在实际业务场景使用中#xff0c;为了提高工作效率#xff0c;数据库GaussDB提供定时任务的功能#xff0c;本节为大家讲解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 SEQUENCE2、指定为某一字段的默认值使该字段具有唯一标识属性。
postgres# CREATE TABLE T2
( id int not null default nextval(seq1),name text
);当结果显示为如下信息则表示默认值指定成功。
CREATE TABLE3、指定序列与列的归属关系。
将序列和一个表的指定字段进行关联。这样在删除那个字段或其所在表的时候会自动删除已关联的序列。
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, sysdate1.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, sysdate5);”。
postgres# call dbe_task.content(1,insert into public.test values(333, sysdate5););
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数据库时创建定时任务可以在很多场景中应用同时可以帮助我们提高系统的运行效率大大的增加了数据库的便利性。