存储过程的执行延迟处理

场景:

1:存储过程中想实现延迟10分钟再继续执行

2:应用中判断条件如果在“同步”就需要等待5分钟,如果“完成”就可以无需等待

3:测试功能反馈是否正常,我们需要延迟3分钟得到SQL语句的结果和不延迟得到的SQL语句结果是否一致

重点:dbms_lock.sleep()过程我们在使用的时候请注意第一是权限要授予,第二是使用的场景,第三注意单位

简单用法:

BEGIN
  FOR I IN 1 .. 3 LOOP
    dbms_output.put_line(to_char(SYSDATE,'yyyy-mm-dd hh24:mi:ss'));
    --每5秒钟执行一次
    DBMS_LOCK.SLEEP(5);
  
  END LOOP;
END;

 

延迟插入EMP表:

BEGIN
  FOR I IN 1 .. 3 LOOP
    INSERT INTO EMP (EMPNO, HIREDATE) VALUES (I, SYSDATE);
    COMMIT;
    --每5秒钟执行一次
    DBMS_LOCK.SLEEP(5);
  
  END LOOP;
END;

 

dbms_lock包:

1.这个package是Oracle提供的一个锁管理服务包,它具有创建一个锁,请求锁的状态,释放一个锁资源等功能。一般使用dbca创建的数据库默认就有这个包,如果是手工建库的话需要执行$ORACLE_HOME/rdbms/admin/dbmslock.sql这个脚本来创建这个package。创建之后数据库中才能有这个包对象。

注意:只有授予执行权限才能使用

使用SYS用户授予权限

grant execute on dbms_lock to USERNAME;

2.查看dbms_lock包内容

SQL> desc dbms_lock

Element         Type     

--------------- ---------

NL_MODE         CONSTANT 

SS_MODE         CONSTANT 

SX_MODE         CONSTANT 

S_MODE          CONSTANT 

SSX_MODE        CONSTANT 

X_MODE          CONSTANT 

MAXWAIT         CONSTANT 

ALLOCATE_UNIQUE PROCEDURE     给锁分配一个唯一的标识符

REQUEST         FUNCTION      请求一个锁的模式(获取锁的状态值)

CONVERT         FUNCTION      将锁从一个状态转换成另一个状态

RELEASE         FUNCTION       释放锁

SLEEP           PROCEDURE      这是实现延迟时间的存储过程,可以指定睡眠时间间隔

本文章主要讲解SLEEP PROCEDURE。

 

DBMS_LOCK.SLEEP()存储过程:

作用:使用这个存储过程可以中止会话一段时间

语法:DBMS_LOCK.SLEEP (seconds IN NUMBER);  单位为“秒”,最小的增量可以百分之一秒

例如:DBMS_LOCK.SLEEP (1.95);是一个合法的值

 

Example:

(1)由于是一个存储过程可以直接使用

SQL> execute dbms_lock.sleep(60);

PL/SQL procedure successfully completed

SQL> select * from pb_tradeinfo where rownum<=3;

IID       TRADEID       NAME          CERTTYPE

--------------------- --------------------- ----------------------------------

382       548          一次性还款          0

415       563          测试一次性贷款      2

423       569          测试                1

 

(2)PL/SQL块实现延迟60秒

SQL> begin

  2  dbms_output.put_line(to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'));

  3  dbms_lock.sleep(60);

  4  dbms_output.put_line(to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'));

  5  end;

  6  /

 

2014-03-10 20:41:56

2014-03-10 20:42:56

 

PL/SQL procedure successfully completed

 

(3)打印间隔5秒时间列表

创建测试表

SQL> create table leonarding (iid number,appendtime date);

Table created

开始测试

SQL> begin

  2       for i in 1..10

  3       loop

  4           insert into leonarding values(i,sysdate);

  5           commit;

  6           dbms_lock.sleep(5);

  7       end loop;

  8  end;

  9  /

PL/SQL procedure successfully completed

打印列表

SQL> select * from leonarding;

       IID APPENDTIME

---------- --------------------------------------------------

         1 2014-3-10 20:51:20

         2 2014-3-10 20:51:25

         3 2014-3-10 20:51:30

         4 2014-3-10 20:51:35

         5 2014-3-10 20:51:40

         6 2014-3-10 20:51:45

         7 2014-3-10 20:51:50

         8 2014-3-10 20:51:55

         9 2014-3-10 20:52:00

        10 2014-3-10 20:52:05

10 rows selected

 

转载于:https://www.cnblogs.com/yhoralce/p/8016309.html

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hive执行延迟高的原因有以下几点: 1. 作业调度:Hive作业在执行过程中需要通过JobTracker进行调度,但是JobTracker的调度机制比较简单,无法做到高效的任务调度,导致作业执行延迟增加。 2. 数据倾斜:当数据倾斜发生时,部分数据的处理时间会明显延长,导致整个作业的执行时间延长。 3. 大量小文件:当Hive表中存在大量小文件时,因为需要一个文件一个文件地进行读取和处理,会导致执行延迟增加。 4. 数据压缩:如果Hive表中的数据进行了压缩,会增加数据的解压缩时间,从而导致执行延迟增加。 5. 硬件资源不足:Hive的执行需要依赖底层的硬件资源,例如CPU、内存和磁盘等,如果硬件资源不足,会导致执行延迟增加。 6. 数据量过大:当Hive表中的数据量过大时,数据的读取、处理和写入都需要消耗大量的时间,从而导致执行延迟高。 7. 网络延迟:如果Hive集群的网络连接较差或者网络带宽不足,会导致作业的执行时间延长。 综上所述,Hive执行延迟高的原因主要包括作业调度、数据倾斜、大量小文件、数据压缩、硬件资源不足、数据量过大和网络延迟等。为了降低Hive的执行延迟,可以优化作业调度、进行数据倾斜处理、减少小文件数量、适当调整数据压缩方式、提供足够的硬件资源、优化数据存储和调整网络连接等措施。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值